From 70cbc5b6eb5744691be6d36a843d89166add9d7c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 26 三月 2024 19:08:37 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(增加神通部分技能支持;增加部分属性;优化伤血公式;) 1. 增加强化灵兽(属性ID 217)、弱化灵兽属性(属性ID 218); 2. 去除反击必命中设定;优化反击灵兽协同释放方式46支持配置是否重新进入技能CD; 3. 细化回合战斗伤血公式分类;技能表HurtType字段增加十位数表示原攻击类型(1-物理攻击;2-魔法攻击;新增3-额外攻击),个位数保留目前设定; 4. 增加xp道法攻击被动增伤,道法技能释放被动触发; 5. NPC支持反弹伤害; 6. 灵宠释放技能、灵宠攻击触发被动支持区分(每次、每只独立首次,所有灵宠共享首次) 7. 治疗支持强化治疗、弱化治疗属性;区分主角主动治疗、灵宠治疗;强化灵兽及弱化灵兽属性对灵宠治疗有效; 8. 技能释放方式增加 恢复妖气-47;扣除妖气-48;
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5007.py | 22 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5005.py | 19 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5006.py | 40 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5008.py | 21 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5009.py | 23 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 20 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 99 ++++++----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_47.py | 32 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_46.py | 21 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_48.py | 34 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 14 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py | 30 +++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 60 +++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 23 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 2
20 files changed, 408 insertions(+), 76 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index abb8447..d0c8612 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -701,6 +701,8 @@
Def_Effect_SuckHPDefPer = 214 # 抗吸血比率
Def_Effect_CurePer = 215 # 强化治疗
Def_Effect_CureDefPer = 216 # 弱化治疗
+Def_Effect_PetStrengthenPer = 217 # 强化灵兽
+Def_Effect_PetWeakenPer = 218 # 弱化灵兽
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
@@ -1077,7 +1079,9 @@
CDBPlayerRefresh_Xiantao, # 仙桃 254
CDBPlayerRefresh_CurePer, # 强化治疗 255
CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
-) = range(146, 257)
+CDBPlayerRefresh_PetStrengthenPer, # 弱化灵兽 257
+CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
+) = range(146, 259)
TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
@@ -1195,7 +1199,7 @@
GameFuncID_FaQi = 199 # 法器
GameFuncID_LianTi = 207 # 炼体
GameFuncID_Championship = 210 # 排位
-GameFuncID_MineArea = 223 # 福地
+GameFuncID_MineArea = 223 # 福地
# 以下为暂时无用的
GameFuncID_Truck = 33 # 运镖
GameFuncID_RunDaily = 34 # 日常跑环
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 036a701..123ca00 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -487,7 +487,8 @@
# @remarks 获取攻击类型
def GetBattleType(attack, attackUseSkill):
# GetHurtType用法改成 pvp pve标识
- return IPY_GameWorld.ghtPhy
+ return SkillCommon.GetBattleType(attackUseSkill)
+ #return IPY_GameWorld.ghtPhy
# #---技能攻击, 读表获取攻击类型---
# if attackUseSkill != None:
# return attackUseSkill.GetHurtType()
@@ -2121,10 +2122,11 @@
mustHit = True
GameWorld.DebugLog(" 灵宠必命中")
petNPCOwner = PetControl.GetPetNPCOwner(atkObj)
- if turnFightTimeline:
- if atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType) == ChConfig.TurnBattleType_AtkBack:
- mustHit = True
- GameWorld.DebugLog(" 反击必命中: atkID=%s,defID=%s" % (atkObj.GetID(), defObj.GetID()))
+ #去除反击必命中设定
+ #if turnFightTimeline:
+ # if atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType) == ChConfig.TurnBattleType_AtkBack:
+ # mustHit = True
+ # GameWorld.DebugLog(" 反击必命中: atkID=%s,defID=%s" % (atkObj.GetID(), defObj.GetID()))
if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_HitOn):
mustHit = True
GameWorld.DebugLog(" 技能必命中: skillID=%s" % skillID)
@@ -2204,7 +2206,9 @@
# 印记增加的技能伤害,用于飘字
atkSkillPerYinji = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPerYinji)
atkSkillPer += atkSkillPerYinji
-
+ if curSkill and curSkill.GetXP():
+ atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_XPAttackAddSkillPer)
+
if hurtType == ChConfig.Def_HurtType_SuperHit:
# 暴击增加技能伤害
atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSkillPer)
@@ -2232,7 +2236,16 @@
aMinAtk = petNPCOwner.GetMinAtk() * summonAtkPer # 攻击方最小攻击
aMaxAtk = petNPCOwner.GetMaxAtk() * summonAtkPer # 攻击方最大攻击
#GameWorld.DebugLog("灵宠攻击,直接取主人攻击力: %s ~ %s, 自己: %s ~ %s" % (aMinAtk, aMaxAtk, atkObj.GetMinAtk(), atkObj.GetMaxAtk()))
-
+ enemyObj = None
+ aPetStrengthenPer, dPetWeakenPer = 0, 0 # 强化灵兽, 弱化灵兽
+ if turnFightTimeline:
+ if petNPCOwner:
+ aPetStrengthenPer = GameObj.GetPetStrengthenPer(petNPCOwner)
+
+ enemyObj = TurnAttack.GetEnemyObj(petNPCOwner)
+ if enemyObj:
+ dPetWeakenPer = GameObj.GetPetWeakenPer(enemyObj)
+
aIceAtk = atkObj.GetIceAtk() # 冰攻, 元素真伤, 玩家及NPC通用
aIceAtk += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddIceAtk)
#------- 防守方
@@ -2367,10 +2380,10 @@
# 回合战斗
if turnFightTimeline:
- hurtFormulaKey = "TurnFight"
+ hurtFormulaKey = "TurnFight_%sV%s_%s" % (atkStateMark, defStateMark, atkType)
if hurtFormulaKey not in hurtDist:
- GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s" % (hurtFormulaKey))
+ GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s, skillID=%s" % (hurtFormulaKey, skillID))
return 0, ChConfig.Def_HurtType_Miss
if atkwargs.get('hurtFormulaKey', None):
@@ -2456,8 +2469,9 @@
CalcBounceHP(atkObj, defObj, resultHurtType.LostHP, resultHurtType.HurtType, curSkill)
#吸血
CalcSuckBlood(atkObj, defObj, curSkill, resultHurtType, tick)
-
- if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+
+ turnFightTimeline = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline)
+ if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer or turnFightTimeline:
# 记录最后一次伤害值
GameObj.SetLastHurtValue(atkObj, resultHurtType.RealHurtHP)
if defObj.GetGameObjType() == IPY_GameWorld.gotNPC:
@@ -2531,37 +2545,35 @@
if not atkObj.GetCanAttack():
return
+ if GameObj.GetHP(atkObj) <= 1:
+ return
+
#只有玩家会反弹
defObjType = defObj.GetGameObjType()
- if defObjType != IPY_GameWorld.gotPlayer:
- return
-
- #boss境界压制不反弹
- atkObjType = atkObj.GetGameObjType()
- aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType) # 获取境界
- if atkObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(atkObj) and aRealmLV > dRealmLV:
- aRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", aRealmLV)
- dRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", dRealmLV)
- aRealmLVLarge = aRealmIpyData.GetLvLarge() if aRealmIpyData else 0
- dRealmLVLarge = dRealmIpyData.GetLvLarge() if dRealmIpyData else 0
- if aRealmLVLarge > dRealmLVLarge:
- #GameWorld.DebugLog("boss大境界压制玩家,不反弹: aRealmLV=%s,dRealmLV=%s,aRealmLVLarge=%s,dRealmLVLarge=%s" % (aRealmLV, dRealmLV, aRealmLVLarge, dRealmLVLarge))
- return
+ if defObjType == IPY_GameWorld.gotPlayer:
+ #boss境界压制不反弹
+ atkObjType = atkObj.GetGameObjType()
+ aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType) # 获取境界
+ if atkObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(atkObj) and aRealmLV > dRealmLV:
+ aRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", aRealmLV)
+ dRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", dRealmLV)
+ aRealmLVLarge = aRealmIpyData.GetLvLarge() if aRealmIpyData else 0
+ dRealmLVLarge = dRealmIpyData.GetLvLarge() if dRealmIpyData else 0
+ if aRealmLVLarge > dRealmLVLarge:
+ #GameWorld.DebugLog("boss大境界压制玩家,不反弹: aRealmLV=%s,dRealmLV=%s,aRealmLVLarge=%s,dRealmLVLarge=%s" % (aRealmLV, dRealmLV, aRealmLVLarge, dRealmLVLarge))
+ return
- if GameObj.GetHP(atkObj) == 1:
- return
-
- ##摸怪次数判断
- #if not CheckAttackNPCByCnt(defObj, atkObj, False):
- # GameWorld.DebugLog("不能攻击,不反弹")
- # return
- #杀怪次数判断
- if not CheckKillNPCByCnt(defObj, atkObj, False) and not NPCHurtManager.IsAssistPlayer(defObj.GetPlayerID(), atkObj):
- #GameWorld.DebugLog("不能攻击,不反弹")
- return
+ ##摸怪次数判断
+ #if not CheckAttackNPCByCnt(defObj, atkObj, False):
+ # GameWorld.DebugLog("不能攻击,不反弹")
+ # return
+ #杀怪次数判断
+ if not CheckKillNPCByCnt(defObj, atkObj, False) and not NPCHurtManager.IsAssistPlayer(defObj.GetPlayerID(), atkObj):
+ #GameWorld.DebugLog("不能攻击,不反弹")
+ return
#没有反弹退出
- defObj_DamageBackRate = defObj.GetDamageBackRate()
+ defObj_DamageBackRate = GameObj.GetDamageBackRate(defObj)
defObj_DamageBackRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, None, None, ChConfig.TriggerType_BounceHPPer)
defObj_DamageBackRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_BounceHPPerByAttacker)
@@ -2570,6 +2582,9 @@
bounceHP = int(bounceHP + PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, None, None, ChConfig.TriggerType_BounceHP))
if bounceHP <= 0:
return
+ skillID = curSkill.GetSkillID() if curSkill else 0
+ GameWorld.DebugLog(" 反弹: defID=%s,atkID=%s,skillID=%s,hurtValue=%s,defObj_DamageBackRate=%s,bounceHP=%s"
+ % (defObj.GetID(), atkObj.GetID(), skillID, hurtValue, defObj_DamageBackRate, bounceHP))
bounceHP = bounceHP if bounceHP < GameObj.GetHP(atkObj) else GameObj.GetHP(atkObj) - 1
@@ -2597,7 +2612,7 @@
if defObjType == IPY_GameWorld.gotPlayer:
OnPVPDamage(defObj, bounceHP, atkObj, "Player bounce Player")
- ChangeHPView(atkObj, defObj, 0, bounceHP, ChConfig.Def_HurtType_BounceHurt)
+ ChangeHPView(atkObj, defObj, skillID, bounceHP, ChConfig.Def_HurtType_BounceHurt)
return
@@ -2656,12 +2671,12 @@
suckHPTotal = suckHPByPer + suckHP
if suckHPTotal <= 0:
return
-
+ skillID = curSkill.GetSkillID() if curSkill else 0
GameObj.SetHP(atkObj, min(GameObj.GetMaxHP(atkObj), GameObj.GetHP(atkObj) + suckHPTotal), False)
- ChangeHPView(atkObj, None, 0, suckHPTotal, ChConfig.Def_HurtTYpe_Recovery)
- GameWorld.DebugLog(" 吸血: atkID=%s,defID=%s,最终比例=%s(%s-%s),伤血=%s,总吸血=%s(%s+%s),HP=%s"
- % (atkObj.GetID(), defObj.GetID(), suckHPPerFinal, suckHPPer, suckHPDefPer, hurtValue, suckHPTotal, suckHPByPer, suckHP, GameObj.GetHP(atkObj)))
+ ChangeHPView(atkObj, None, skillID, suckHPTotal, ChConfig.Def_HurtTYpe_Recovery)
+ GameWorld.DebugLog(" 吸血: atkID=%s,defID=%s,最终比例=%s(%s-%s),伤血=%s,总吸血=%s(%s+%s),HP=%s,skillID=%s"
+ % (atkObj.GetID(), defObj.GetID(), suckHPPerFinal, suckHPPer, suckHPDefPer, hurtValue, suckHPTotal, suckHPByPer, suckHP, GameObj.GetHP(atkObj), skillID))
return
## 攻击者回蓝逻辑
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index 015f484..45978b9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1708,6 +1708,9 @@
# TriggerType_AttackOver 和 TriggerType_AttackOverPassive 根据触发的被动buff效果顺序而定
PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_AttackOverPassive, tick)
+ if curSkill and curSkill.GetXP():
+ PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_XPAttackOver, tick)
+
else:
PassiveBuffEffMng.OnPassiveSkillTrigger(attacker, defender, curSkill, ChConfig.TriggerType_SkillOverNoAttack, tick)
@@ -1717,7 +1720,18 @@
if PetControl.IsPetNPC(attacker):
petOwner = PetControl.GetPetNPCOwner(attacker)
+ petOwner.SetDict("useSkillPetID", attacker.GetID())
PassiveBuffEffMng.OnPassiveSkillTrigger(petOwner, defender, curSkill, ChConfig.TriggerType_SkillSuccessPet, tick)
+ if isAtkSkill:
+ PassiveBuffEffMng.OnPassiveSkillTrigger(petOwner, defender, curSkill, ChConfig.TriggerType_AttackOverPet, tick)
+
+ # 更新状态放最后
+ attacker.SetDict(ChConfig.Def_Obj_Dict_TurnSkillSuccessPetState, 1)
+ petOwner.SetDict(ChConfig.Def_Obj_Dict_TurnSkillSuccessPetState, 1)
+ if isAtkSkill:
+ attacker.SetDict(ChConfig.Def_Obj_Dict_TurnAttackOverPetState, 1)
+ petOwner.SetDict(ChConfig.Def_Obj_Dict_TurnAttackOverPetState, 1)
+
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 833acea..935554f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -395,15 +395,6 @@
return
return GameWorld.FindNPCByID(tagID)
-def GetEnemyCureDefPer(gameObj):
- ## 获取敌对方弱化治疗值
- tagObj = GetEnemyObj(gameObj)
- if not tagObj:
- return 0
- cureDefPer = GameObj.GetCureDefPer(tagObj)
- #其他的...
- return cureDefPer
-
def GetRebornTypeInfo(gameObj):
''' 获取可复活的方式信息
@return: None-代表不可复活
@@ -527,6 +518,8 @@
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnRebornCount, 0)
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, 0)
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, 0)
+ gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnSkillSuccessPetState, 0)
+ gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnAttackOverPetState, 0)
SetTimeline(gameObj, 1, 0)
faction = GameObj.GetFaction(gameObj)
GameObj.SetHPFull(gameObj, True)
@@ -575,9 +568,11 @@
return
def __logGameObjAttr(gameObj):
- GameWorld.DebugLog(" HP=%s/%s,atk=%s~%s,Def=%s,atkSpeed=%s,XP=%s/%s"
+ GameWorld.DebugLog(" HP=%s/%s,atk=%s~%s,Def=%s,atkSpeed=%s"
% (GameObj.GetHP(gameObj), GameObj.GetMaxHP(gameObj), gameObj.GetMinAtk(), gameObj.GetMaxAtk(),
- gameObj.GetDef(), GameObj.GetAtkSpeed(gameObj), GameObj.GetXP(gameObj), GameObj.GetMaxXP(gameObj)))
+ gameObj.GetDef(), GameObj.GetAtkSpeed(gameObj)))
+ if not gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightMainRolePlace):
+ return
GameWorld.DebugLog(" 闪(%s,%s),暴(%s,%s),晕(%s,%s),连(%s,%s),反(%s,%s),吸(%s,%s)"
% (GameObj.GetMissRate(gameObj), GameObj.GetMissDefRate(gameObj),
GameObj.GetSuperHitRate(gameObj), GameObj.GetSuperHitRateReduce(gameObj),
@@ -586,6 +581,9 @@
GameObj.GetAtkBackRate(gameObj), GameObj.GetAtkBackDefRate(gameObj),
GameObj.GetSuckHPPer(gameObj), GameObj.GetSuckHPDefPer(gameObj),
))
+ GameWorld.DebugLog(" XP=%s/%s,强疗=%s,弱疗=%s,强灵=%s,弱灵=%s"
+ % (GameObj.GetXP(gameObj), GameObj.GetMaxXP(gameObj), GameObj.GetCurePer(gameObj), GameObj.GetCureDefPer(gameObj),
+ GameObj.GetPetStrengthenPer(gameObj), GameObj.GetPetWeakenPer(gameObj)))
return
def TurnFightObjPerTurnStart(gameObj, tagObj, turnNum, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5227f50..5feca62 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -79,7 +79,7 @@
Def_BuffValue_Count = 3 # buff记录的value个数
#游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 172
+Def_Calc_AllAttrType_MAX = 174
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
TYPE_Calc_Metal, # 金 1
@@ -265,6 +265,8 @@
TYPE_Calc_SuckHPPer, # 吸血比率
TYPE_Calc_SuckHPDefPer, # 抗吸血比率 170
TYPE_Calc_CureDefPer, # 弱化对方治疗效果
+TYPE_Calc_PetStrengthenPer, # 强化灵兽
+TYPE_Calc_PetWeakenPer, # 弱化灵兽
) = range(1, Def_Calc_AllAttrType_MAX)
## 支持大数值属性,超过20E
@@ -3094,6 +3096,8 @@
Def_Obj_Dict_TurnAtkAddXPCount = 'TurnAtkAddXPCount' # 每回合攻击已增加XP次数
Def_Obj_Dict_TurnXPFullTimeline = 'TurnXPFullTimeline' # XP满时的回合时间点
Def_Obj_Dict_TurnXPUseState = 'TurnXPUseState' # XP使用状态;0-不可用;1-可用;2-已用
+Def_Obj_Dict_TurnSkillSuccessPetState = 'TurnSkillSuccessPetState' # 回合制灵宠是否已使用过技能,主人及灵宠均有该值,独立算
+Def_Obj_Dict_TurnAttackOverPetState = 'TurnAttackOverPetState' # 回合制灵宠是否已攻击过,主人及灵宠均有该值,独立算
#---NPC字典-------
#每道龙卷风最终坐标
@@ -4548,6 +4552,8 @@
AttrName_SuckHPDefPer = "SuckHPDefPer" # 抗吸血比率
AttrName_CurePer = "CurePer" # 强化治疗
AttrName_CureDefPer = "CureDefPer" # 弱化治疗
+AttrName_PetStrengthenPer = "PetStrengthenPer" # 强化灵兽
+AttrName_PetWeakenPer = "PetWeakenPer" # 弱化灵兽
#物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
#对应 Def_Calc_AllAttrType_MAX
@@ -4748,6 +4754,8 @@
AttrName_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
ShareDefine.Def_Effect_CurePer:[[TYPE_Calc_CurePer], False, TYPE_Linear],
ShareDefine.Def_Effect_CureDefPer:[[TYPE_Calc_CureDefPer], False, TYPE_Linear],
+ ShareDefine.Def_Effect_PetStrengthenPer:[[TYPE_Calc_PetStrengthenPer], False, TYPE_Linear],
+ ShareDefine.Def_Effect_PetWeakenPer:[[TYPE_Calc_PetWeakenPer], False, TYPE_Linear],
#战斗非线性
ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
@@ -5120,7 +5128,10 @@
TriggerType_AtkBackBef, # 反击前触发 94
TriggerType_AtkBackAft, # 反击后触发 95
TriggerType_SkillSuccessPet, # 灵宠技能释放成功都可触发 96
-) = range(1, 97)
+TriggerType_AttackOverPet, # 灵宠攻击(对敌技能)后被动技能被触发 97
+TriggerType_XPAttackAddSkillPer, # 道法攻击增加伤害百分比 98
+TriggerType_XPAttackOver, # 道法攻击后触发99
+) = range(1, 100)
#不可以佩戴翅膀的地图
@@ -5775,6 +5786,14 @@
Def_BattleRelationType_CommNoBoss, # 除了(指定)BOSS,可对其释放技能,但是无实际效果
) = range(0, 4)
+#IPY_GameWorld.ghtPhy
+# 攻击类型
+(
+ghtPhy, # 物理攻击 1
+ghtMag, # 魔法攻击 2
+ghtEx, # 额外攻击 3
+) = range(1, 1 + 3)
+
# 经验倍率限制类型
(
ExpRateLimitType_Recover, # 资源找回
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index 9699a74..7709a2d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -232,6 +232,9 @@
SetAtkBackHP(gameObj, 0)
SetCurePer(gameObj, 0)
SetCureDefPer(gameObj, 0)
+ SetPetStrengthenPer(gameObj, 0)
+ SetPetWeakenPer(gameObj, 0)
+ SetDamageBackRate(gameObj, 0)
return
def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
@@ -405,6 +408,33 @@
PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CureDefPer, value)
return
+def GetPetStrengthenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetStrengthenPer)
+def SetPetStrengthenPer(gameObj, value):
+ ## 强化灵兽
+ gameObj.SetDict(ChConfig.AttrName_PetStrengthenPer, value)
+ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetStrengthenPer, value)
+ return
+def GetPetWeakenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetWeakenPer)
+def SetPetWeakenPer(gameObj, value):
+ ## 弱化灵兽
+ gameObj.SetDict(ChConfig.AttrName_PetWeakenPer, value)
+ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value)
+ return
+
+def GetDamageBackRate(gameObj):
+ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ return gameObj.GetDamageBackRate()
+ return gameObj.GetDictByKey(ChConfig.AttrName_DamBackPer)
+def SetDamageBackRate(gameObj, value):
+ ## 反弹伤害
+ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ gameObj.SetDamageBackRate(value)
+ else:
+ gameObj.SetDict(ChConfig.AttrName_DamBackPer, value)
+ return
+
def NotifyObjInfoRefresh(gameObj, refreshType, value):
##0418通知对象属性刷新
sendPack = ChNetSendPack.tagObjInfoRefresh()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index cbdc127..d9a28d1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -4201,6 +4201,8 @@
GameObj.SetSuckHPDefPer(curNPC, PropDict.get("SuckHPDefPer", 0))
GameObj.SetCurePer(curNPC, PropDict.get("CurePer", 0))
GameObj.SetCureDefPer(curNPC, PropDict.get("CureDefPer", 0))
+ GameObj.SetPetStrengthenPer(curNPC, PropDict.get("PetStrengthenPer", 0))
+ GameObj.SetPetWeakenPer(curNPC, PropDict.get("PetWeakenPer", 0))
GameObj.SetFinalHurtPer(curNPC, PropDict.get("FinalHurtPer", 0))
GameObj.SetFinalHurtReducePer(curNPC, PropDict.get("FinalHurtReducePer", 0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index e780369..a403547 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -231,6 +231,8 @@
curPlayerPropDict["PVPAtkBackHP"] = PlayerControl.GetPVPAtkBackHP(curPlayer) # PVP攻击回血
curPlayerPropDict["CurePer"] = GameObj.GetCurePer(curPlayer) # 强化治疗
curPlayerPropDict["CureDefPer"] = GameObj.GetCureDefPer(curPlayer) # 弱化治疗
+ curPlayerPropDict["PetStrengthenPer"] = GameObj.GetPetStrengthenPer(curPlayer) # 强化灵兽
+ curPlayerPropDict["PetWeakenPer"] = GameObj.GetPetWeakenPer(curPlayer) # 弱化灵兽
#-----------
#扩展属性缓存
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index abb8447..7001a75 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -701,6 +701,8 @@
Def_Effect_SuckHPDefPer = 214 # 抗吸血比率
Def_Effect_CurePer = 215 # 强化治疗
Def_Effect_CureDefPer = 216 # 弱化治疗
+Def_Effect_PetStrengthenPer = 217 # 强化灵兽
+Def_Effect_PetWeakenPer = 218 # 弱化灵兽
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
@@ -1077,7 +1079,9 @@
CDBPlayerRefresh_Xiantao, # 仙桃 254
CDBPlayerRefresh_CurePer, # 强化治疗 255
CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
-) = range(146, 257)
+CDBPlayerRefresh_PetStrengthenPer, # 弱化灵兽 257
+CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
+) = range(146, 259)
TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index 462b3c9..09d32bc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -91,7 +91,7 @@
[lambda curObj:PlayerControl.GetMaxProDef(curObj), lambda curObj, value:PlayerControl.SetMaxProDef(curObj, value), ShareDefine.CDBPlayerRefresh_MaxProDef, 1, 0], # 最大防护值
[lambda curObj:PlayerControl.GetProDefHPPer(curObj), lambda curObj, value:PlayerControl.SetProDefHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_ProDefHPPer, 1, 0], # 生命上限换算为防护值的百分比
[lambda curObj:PlayerControl.GetProDefAbsorb(curObj), lambda curObj, value:PlayerControl.SetProDefAbsorb(curObj, value), ShareDefine.CDBPlayerRefresh_ProDefAbsorb, 1, 0], # 防护值吸收伤害比率
- [lambda curObj:curObj.GetDamageBackRate(), lambda curObj, value:curObj.SetDamageBackRate(value), IPY_PlayerDefine.CDBPlayerRefresh_DamageBackRate, 1, 0], # 反伤百分比
+ [lambda curObj:GameObj.GetDamageBackRate(curObj), lambda curObj, value:GameObj.SetDamageBackRate(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_DamageBackRate, 1, 0], # 反伤百分比
[lambda curObj:PlayerControl.GetDamChanceDef(curObj), lambda curObj, value:PlayerControl.SetDamChanceDef(curObj, value), ShareDefine.CDBPlayerRefresh_DamChanceDef, 1, 0], # 20%的概率抵御伤害比率
[lambda curObj:PlayerControl.GetShieldMPCostRate(curObj), lambda curObj, value:PlayerControl.SetShieldMPCostRate(curObj, value), 0, 0, 0], # 魔法盾伤害吸收蓝耗比率
[lambda curObj:GameObj.GetFaintRate(curObj), lambda curObj, value:GameObj.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0], # 触发击晕
@@ -211,6 +211,8 @@
[lambda curObj:GameObj.GetSuckHPPer(curObj), lambda curObj, value:GameObj.SetSuckHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPPer, 1, 0], # 吸血比率
[lambda curObj:GameObj.GetSuckHPDefPer(curObj), lambda curObj, value:GameObj.SetSuckHPDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPDefPer, 1, 0], # 抗吸血比率
[lambda curObj:GameObj.GetCureDefPer(curObj), lambda curObj, value:GameObj.SetCureDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_CureDefPer, 1, 0], # 弱化对方治疗
+ [lambda curObj:GameObj.GetPetStrengthenPer(curObj), lambda curObj, value:GameObj.SetPetStrengthenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetStrengthenPer, 1, 0], # 强化灵兽
+ [lambda curObj:GameObj.GetPetWeakenPer(curObj), lambda curObj, value:GameObj.SetPetWeakenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetWeakenPer, 1, 0], # 弱化灵兽
]
## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 1a436c0..c42569e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1253,11 +1253,7 @@
# 禁止治疗
return
- # 治疗加成
- curePer = GameObj.GetCurePer(curObj) + ChConfig.Def_MaxRateValue
- curePerReduce = TurnAttack.GetEnemyCureDefPer(curObj) # 弱化治疗,取对方的
- curePerFinal = max(0, curePer - curePerReduce)
- addValueFianl = int(addValue*curePerFinal*1.0/ChConfig.Def_MaxRateValue)
+ addValueFianl = addValue
maxHP = GameObj.GetMaxHP(curObj)
@@ -1292,8 +1288,8 @@
if isNotify:
AttackCommon.ChangeHPView(curObj, curObj, skillTypeID, addValueFianl, ChConfig.Def_HurtTYpe_Recovery)
- GameWorld.DebugLog(" 治疗: curID=%s,skillTypeID=%s,curePerFinal=%s(%s-%s),addValue=%s,addValueFianl=%s,HP=%s"
- % (curObj.GetID(), skillTypeID, curePerFinal, curePer, curePerReduce, addValue, addValueFianl, remainHP))
+ GameWorld.DebugLog(" 治疗: curID=%s,skillTypeID=%s,addValue=%s,addValueFianl=%s,HP=%s"
+ % (curObj.GetID(), skillTypeID, addValue, addValueFianl, remainHP))
return addValueFianl
## 直接扣血不走公式
@@ -1974,11 +1970,21 @@
return
+def GetBattleType(curSkill):
+ ## 攻击类型
+ if not curSkill:
+ return ChConfig.ghtPhy
+ battleType = curSkill.GetHurtType() / 10
+ if not battleType:
+ # 没有配置,默认物理攻击
+ return ChConfig.ghtPhy
+ return battleType
+
def GetSkillBattleType(curSkill):
if not curSkill:
return ChConfig.Def_BattleRelationType_Comm
#0通哟 1 PVP类型 2PVE类型
- return curSkill.GetHurtType()
+ return curSkill.GetHurtType() % 10
## 检查技能是否为被动技能, 用于控制不可释放技能
def isPassiveSkill(curSkill):
@@ -2245,21 +2251,47 @@
#获得技能的计算参数值
if cureType == ChConfig.Def_Cure_PHY:
# 根据敏捷,力量差值及效果系数计算恢复比例
- skillPer = max(0, userObj.GetPHY() - userObj.GetSTR()) / float(curSkill.GetEffect(0).GetEffectValue(0))
+ skillPer = max(0, userObj.GetPHY() - userObj.GetSTR()) / float(curSkill.GetEffect(0).GetEffectValue(0)) * ChConfig.Def_MaxRateValue
GameWorld.DebugLog("英勇复苏: 敏=%s,力=%s,skillPer=%s" % (userObj.GetPHY(), userObj.GetSTR(), skillPer))
else:
- skillPer = curSkill.GetEffect(0).GetEffectValue(0) / float(ChConfig.Def_MaxRateValue)
+ skillPer = curSkill.GetEffect(0).GetEffectValue(0)
#技能附加
skillValue = curSkill.GetEffect(0).GetEffectValue(1)
- skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)/float(ChConfig.Def_MaxRateValue)
+ skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)
+
+ # 回合制
+ curePer = 0 # 治疗加成、强化灵兽
+ cureDefPer = 0 # 敌方的弱化治疗、弱化灵兽
+ if userObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline):
+ isPetNPC = PetControl.IsPetNPC(userObj)
+ enemyObj = None
+
+ if isPetNPC:
+ petOwner = PetControl.GetPetNPCOwner(userObj)
+ enemyObj = TurnAttack.GetEnemyObj(petOwner)
+
+ curePer += GameObj.GetCurePer(petOwner)
+ curePer += GameObj.GetPetStrengthenPer(petOwner) # 强化灵兽
+ else:
+ enemyObj = TurnAttack.GetEnemyObj(userObj)
+
+ curePer += GameObj.GetCurePer(userObj)
+
+ if enemyObj:
+ cureDefPer += GameObj.GetCureDefPer(enemyObj)
+ if isPetNPC:
+ cureDefPer += GameObj.GetPetWeakenPer(enemyObj) # 弱化灵兽
+
+ skillPer += (curePer - cureDefPer) # 可能负值
#公式计算治疗值
- cureHP = int((cureBaseValue * skillPer + skillValue + addExValue) * curePercent)
+ cureHP = int((cureBaseValue * skillPer / float(ChConfig.Def_MaxRateValue) + skillValue + addExValue) * curePercent)
if not largeNum:
cureHP = min(cureHP, ChConfig.Def_UpperLimit_DWord)
+ cureHP = max(1, cureHP) # 保底1点
- #GameWorld.DebugLog("获取治疗值(%s):cureType=%s,cureBaseValue=%s,skillPer=%s,skillValue=%s"
- # % (cureHP, cureType, cureBaseValue, skillPer, skillValue))
+ #GameWorld.DebugLog("获取治疗值(%s):skillID=%s,cureType=%s,cureBaseValue=%s,skillPer=%s,skillValue=%s,curePer=%s,cureDefPer=%s"
+ # % (cureHP, curSkill.GetSkillID(), cureType, cureBaseValue, skillPer, skillValue, curePer, cureDefPer))
return cureHP
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_46.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_46.py
index 1587fc6..4593bb5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_46.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_46.py
@@ -9,7 +9,7 @@
# @date 2024-02-01
# @version 1.0
#
-# 详细描述: 命令第一位置灵兽立即使用一次技能(具体效果由灵兽技能决定),回合制适用
+# 详细描述: 命令第一位置灵兽立即使用一次技能(具体效果由灵兽技能决定),效果1: A值-灵兽技能是否重新进入技能CD,回合制适用
#
#-------------------------------------------------------------------------------
#"""Version = 2024-02-01 15:30"""
@@ -26,7 +26,7 @@
if not attacker.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline):
return
- # 默认第一位置灵兽强制使用技能1,并重新进入CD
+ # 默认第一位置灵兽强制使用技能1
curPet = PetControl.GetFightPet(attacker, 1)
if not curPet:
return
@@ -34,6 +34,10 @@
tagObj = TurnAttack.GetEnemyObj(attacker)
if not tagObj:
return
+
+ skillEffect = curSkill.GetEffect(0)
+ isCD = skillEffect.GetEffectValue(0) # 是否重新进入冷却时间
+ remainTime = None
useSkill = None
skillManager = curPet.GetSkillManager()
@@ -51,6 +55,7 @@
if SkillCommon.isPassiveSkill(skill):
continue
+ remainTime = skill.GetRemainTime()
skill.SetRemainTime(0)
useSkill = skill
break
@@ -60,5 +65,15 @@
BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
tagDist = 0
- return AICommon.DoNPCUseSkill(curPet, tagObj, useSkill, tagDist, tick)
+ isOK = AICommon.DoNPCUseSkill(curPet, tagObj, useSkill, tagDist, tick)
+ if isOK:
+ # 不重新进入CD的话,还原原剩余时间
+ if not isCD and remainTime != None:
+ skill.SetRemainTime(remainTime)
+ else:
+ # 释放失败,还原原剩余时间
+ if remainTime != None:
+ skill.SetRemainTime(remainTime)
+
+ return isOK
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_47.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_47.py
new file mode 100644
index 0000000..06978d3
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_47.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.GameSkills.SkillModule_47
+#
+# @todo:恢复妖气
+# @author hxp
+# @date 2024-03-26
+# @version 1.0
+#
+# 详细描述: 恢复妖气 效果1: A值-恢复百分比,B值-恢复固定值
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-26 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameObj
+import GameWorld
+
+def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
+ skillEffect = curSkill.GetEffect(0)
+ addPer = skillEffect.GetEffectValue(0)
+ addValue = skillEffect.GetEffectValue(1)
+ maxXP = GameObj.GetMaxXP(attacker)
+ curXP = GameObj.GetXP(attacker)
+ updXP = min(curXP + int(maxXP * addPer / 10000.0) + addValue, maxXP)
+ GameObj.SetXP(attacker, updXP)
+ GameWorld.DebugLog(" 恢复妖气: curXP=%s,addPer=%s,addValue=%s,updXP=%s,curID=%s" % (curXP, addPer, addValue, updXP, attacker.GetID()))
+ return True # 不通知使用成功
+ #return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_48.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_48.py
new file mode 100644
index 0000000..fec0a47
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_48.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.GameSkills.SkillModule_48
+#
+# @todo:扣除目标妖气
+# @author hxp
+# @date 2024-03-26
+# @version 1.0
+#
+# 详细描述: 扣除妖气 效果1: A值-扣除百分比,B值-扣除固定值
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-26 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameObj
+import GameWorld
+
+def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
+ if not defender:
+ return
+ skillEffect = curSkill.GetEffect(0)
+ delPer = skillEffect.GetEffectValue(0)
+ delValue = skillEffect.GetEffectValue(1)
+ maxXP = GameObj.GetMaxXP(defender)
+ curXP = GameObj.GetXP(defender)
+ updXP = max(curXP - int(maxXP * delPer / 10000.0) - delValue, 0)
+ GameObj.SetXP(defender, updXP)
+ GameWorld.DebugLog(" 扣除妖气: curXP=%s,delPer=%s,delValue=%s,updXP=%s,atkID=%s,curID=%s" % (curXP, delPer, delValue, updXP, attacker.GetID(), defender.GetID()))
+ return True # 不通知使用成功
+ #return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5005.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5005.py
index f5ca539..63d90f4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5005.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5005.py
@@ -14,6 +14,25 @@
#-------------------------------------------------------------------------------
import GameWorld
+import ChConfig
def CheckCanHappen(attacker, defender, effect, curSkill):
+ #生效类型(0-每次;1-独立首次,即每只灵宠独立算首次;2-共享首次,即本场战斗本方多只灵宠的情况下仅首次生效)
+ effType = effect.GetEffectValue(1)
+ if effType == 1:
+ # 独立首次,取灵宠自己的状态
+ useSkillPetID = attacker.GetDictByKey("useSkillPetID")
+ if not useSkillPetID:
+ return False
+ petObj = GameWorld.FindNPCByID(useSkillPetID)
+ if not petObj:
+ return False
+ if petObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnSkillSuccessPetState):
+ #GameWorld.DebugLog("该灵宠释放过技能! 不再触发独立首次!", useSkillPetID.GetID())
+ return False
+ elif effType == 2:
+ # 共享首次,直接取主人的状态
+ if attacker.GetDictByKey(ChConfig.Def_Obj_Dict_TurnSkillSuccessPetState):
+ #GameWorld.DebugLog("已经有灵宠释放过技能! 不再触发共享首次!", attacker.GetID())
+ return False
return GameWorld.CanHappen(effect.GetEffectValue(0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5006.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5006.py
new file mode 100644
index 0000000..1bfbf5e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5006.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveBuff.PassiveSkill_5006
+#
+# @todo:灵宠攻击后触发
+# @author hxp
+# @date 2024-03-26
+# @version 1.0
+#
+# 详细描述: 灵宠攻击后触发
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-26 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ChConfig
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ #生效类型(0-每次;1-独立首次,即每只灵宠独立算首次;2-共享首次,即本场战斗本方多只灵宠的情况下仅首次生效)
+ effType = effect.GetEffectValue(1)
+ if effType == 1:
+ # 独立首次,取灵宠自己的状态
+ useSkillPetID = attacker.GetDictByKey("useSkillPetID")
+ if not useSkillPetID:
+ return False
+ petObj = GameWorld.FindNPCByID(useSkillPetID)
+ if not petObj:
+ return False
+ if petObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnAttackOverPetState):
+ #GameWorld.DebugLog("该灵宠攻击过! 不再触发独立首次!", useSkillPetID.GetID())
+ return False
+ elif effType == 2:
+ # 共享首次,直接取主人的状态
+ if attacker.GetDictByKey(ChConfig.Def_Obj_Dict_TurnAttackOverPetState):
+ #GameWorld.DebugLog("已经有灵宠攻击过! 不再触发共享首次!", attacker.GetID())
+ return False
+ return GameWorld.CanHappen(effect.GetEffectValue(0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5007.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5007.py
new file mode 100644
index 0000000..e59f115
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5007.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveBuff.PassiveSkill_5007
+#
+# @todo:道法攻击增加技能伤害百分比
+# @author hxp
+# @date 2024-03-26
+# @version 1.0
+#
+# 详细描述: 道法攻击增加技能伤害百分比
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-26 19:00"""
+#-------------------------------------------------------------------------------
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ return True
+
+def GetValue(attacker, defender, effect):
+ return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5008.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5008.py
new file mode 100644
index 0000000..25ad7b5
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5008.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveBuff.PassiveSkill_5008
+#
+# @todo:道法攻击触发技能
+# @author hxp
+# @date 2024-03-26
+# @version 1.0
+#
+# 详细描述: 道法攻击触发技能
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-26 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ return GameWorld.CanHappen(effect.GetEffectValue(0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5009.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5009.py
new file mode 100644
index 0000000..cc830c2
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5009.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveBuff.PassiveSkill_5009
+#
+# @todo:受到攻击时,反射X%的伤害
+# @author hxp
+# @date 2024-03-26
+# @version 1.0
+#
+# 详细描述: 受到攻击时,反射X%的伤害
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-26 19:00"""
+#-------------------------------------------------------------------------------
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ return True
+
+def GetValue(attacker, defender, effect):
+ return effect.GetEffectValue(0)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index b82323d..542511f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -443,6 +443,10 @@
5003:ChConfig.TriggerType_AtkBackAft, # 反击后触发 95
5004:ChConfig.TriggerType_BeAttackOver, # 被攻击后触发 20
5005:ChConfig.TriggerType_SkillSuccessPet, # 灵宠技能释放成功都可触发 96
+ 5006:ChConfig.TriggerType_AttackOverPet, # 灵宠攻击(对敌技能)后被动技能被触发 97
+ 5007:ChConfig.TriggerType_XPAttackAddSkillPer, # 道法攻击增加伤害百分比 98
+ 5008:ChConfig.TriggerType_XPAttackOver, # 道法攻击后触发99
+ 5009:ChConfig.TriggerType_BounceHPPer, # 受到攻击时,反弹伤害百分比值17
}
return tdict.get(effectID, -1)
#===========================================================================
--
Gitblit v1.8.0