From 0c96af08f55d05ab40eae9f940467dd8eafae44c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 16 九月 2025 14:07:53 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(增加属性ID技能增伤65、技能减伤66;曹轶技能;被动触发增加属性支持;) --- PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 32 ++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 150 +++++++++++------------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 73 +++++------ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 14 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py | 30 +++++ 8 files changed, 176 insertions(+), 135 deletions(-) diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" index 185d462..9d5abc0 100644 --- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" +++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" @@ -291,7 +291,7 @@ def __StrToList(self, strValue): setList = [] - if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue): + if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")): setList = eval(strValue) elif strValue in ["0", "-", ""]: pass @@ -301,6 +301,8 @@ for value in strValue.split(ChConfig.Def_Str_Montant): if value.isdigit(): value = int(value) + elif (value.startswith("[") and value.endswith("]")) or (value.startswith("(") and value.endswith(")")): + value = eval(value) setList.append(value) if setList: setList = tuple(setList) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py index 8b7a961..e49c8f3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py @@ -45,7 +45,7 @@ effList = [] # 优先取关联技能的 - if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff]: + if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]: # 技能 key = (triggerWay, connSkillTypeID) if key in self._AffectSkillDict: @@ -99,13 +99,19 @@ return if triggerWay == ChConfig.TriggerWay_CurSkillEff: return - if triggerSrc == ChConfig.TriggerSrc_Buff: + if triggerSrc in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]: # buff有效的不加进来 return skillID = curSkill.GetSkillID() effectID = effect.GetEffectID() + if triggerWay == ChConfig.TriggerWay_CalcEffValue: + triggerWay = "%s_%s" % (triggerWay, effectID) + + if triggerSrc == ChConfig.TriggerSrc_SkillSelf: + triggerSrc = curSkill.GetSkillTypeID() + key = (triggerWay, triggerSrc) if key not in self._AffectSkillDict: self._AffectSkillDict[key] = {} @@ -143,13 +149,19 @@ return if triggerWay == ChConfig.TriggerWay_CurSkillEff: return - if triggerSrc == ChConfig.TriggerSrc_Skill: + if triggerSrc in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]: # 技能有效的不加进来 return buffID = buff.GetBuffID() effectID = effect.GetEffectID() + if triggerWay == ChConfig.TriggerWay_CalcEffValue: + triggerWay = "%s_%s" % (triggerWay, effectID) + + if triggerSrc == ChConfig.TriggerSrc_BuffSelf: + triggerSrc = skillData.GetSkillTypeID() + key = (triggerWay, triggerSrc) if key not in self._AffectBuffDict: self._AffectBuffDict[key] = {} @@ -720,8 +732,20 @@ # return False return True - def IsInState(self, state): + def CheckInState(self, checkInState): ## 是否处于某种状态下 + if isinstance(checkInState, int): + checkInStateList = [checkInState] + elif isinstance(checkInState, list) or isinstance(checkInState, tuple): + checkInStateList = checkInState + else: + return False + for state in checkInStateList: + if self._buffMgr.IsInBuffState(state): + return True + return False + def IsInState(self, state): + ## 是否处于指定状态下 return self._buffMgr.IsInBuffState(state) def IsInControlled(self): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index fc0c34a..98578b9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -160,7 +160,9 @@ AttrID_WuFinalDamPerDef, # 对吴减伤 62 AttrID_QunFinalDamPer, # 对群增伤 63 AttrID_QunFinalDamPerDef, # 对群减伤 64 -) = range(1, 1 + 64) +AttrID_SkillPer, # 技能增伤 65 +AttrID_SkillPerDef, # 技能减伤 66 +) = range(1, 1 + 66) # 需要计算的武将战斗属性ID列表 CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_StunRate, AttrID_StunRateDef, @@ -4270,8 +4272,8 @@ TriggerWay_HeroTurnEnd, # 武将回合开始时 5 TriggerWay_HeroActionStart, # 武将行动前 6 TriggerWay_HeroActionEnd, # 武将行动后 7 -TriggerWay_CalcTagInState, # 攻击计算时对方处于xx状态时(参数:状态1|2|...)一般用于攻击时属性计算 8 -TriggerWay_AttackOverTagInState, # 攻击计算后对方处于xx状态时(参数:状态1|2|...)一般用于攻击后触发效果 9 +TriggerWay_CalcEffValue, # 统计计算效果值时 8 +TriggerWay_9, # 9 TriggerWay_AttackOverDirect, # 直接攻击后 (非buff攻击)10 TriggerWay_BeAttackedDirect, # 受到直接攻击时 (非buff攻击)11 TriggerWay_ShieldBroken, # 承伤盾被击破时 12 @@ -4279,8 +4281,10 @@ ) = range(1, 1 + 13) # 被动触发有效来源 -TriggerSrc_Skill = 1 -TriggerSrc_Buff = 2 +TriggerSrc_Skill = 1 # 身上技能有效 +TriggerSrc_Buff = 2 # 身上buff有效 +TriggerSrc_SkillSelf = 3 # 本技能有效 +TriggerSrc_BuffSelf = 4 # 本buff有效 ( TriggerType_BeSuperHit, # 被暴击触发技能 1 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index ac11826..f345268 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -6915,7 +6915,7 @@ def __StrToList(self, strValue): setList = [] - if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue): + if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")): setList = eval(strValue) elif strValue in ["0", "-", ""]: pass @@ -6925,6 +6925,8 @@ for value in strValue.split(ChConfig.Def_Str_Montant): if value.isdigit(): value = int(value) + elif (value.startswith("[") and value.endswith("]")) or (value.startswith("(") and value.endswith(")")): + value = eval(value) setList.append(value) if setList: setList = tuple(setList) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py new file mode 100644 index 0000000..2cdd501 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_Attr +# +# @todo:被动触发属性 +# @author hxp +# @date 2025-09-16 +# @version 1.0 +# +# 详细描述: 被动触发属性 +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-16 14:30""" +#------------------------------------------------------------------------------- + +def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs): + + checkInStateList = curEffect.GetEffectValue(2) + if checkInStateList: + if not defender.CheckInState(checkInStateList): + return 0 + + attrValue = curEffect.GetEffectValue(0) + calcType = curEffect.GetEffectValue(1) + if calcType == 2: # 减少,其他默认增加 + attrValue = -attrValue + + return attrValue diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py index 4d70727..fdf6480 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py @@ -179,7 +179,7 @@ continue if curEffect.GetTriggerWay(): - if curEffect.GetTriggerSrc() != ChConfig.TriggerSrc_Skill: + if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]: passiveEffMgr.AddBuffPassiveEffect(addBuff, buffSkill, curEffect) elif effectID in ChConfig.AttrIDList: @@ -240,7 +240,7 @@ continue if curEffect.GetTriggerWay(): - if curEffect.GetTriggerSrc() != ChConfig.TriggerSrc_Skill: + if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]: haveBuffPassiveEff = True elif effectID in ChConfig.AttrIDList: diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py index 03f9397..9891021 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py @@ -106,86 +106,74 @@ callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill) return -def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None): +def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None): ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么 - @return: 触发的值,0-没有触发或本身触发的值为0;大于0-触发的具体值 + @param calcEffID: 需要统计的效果ID,可以是属性ID或者其他自定义效果ID + @return: 触发的值,0-没有触发或本身触发的值为0;非0-触发的具体值 ''' - return 0 -# attacker = FindRealAttacker(attacker) -# if not attacker: -# return 0 -# -# stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能 -# if useSkill and SkillCommon.isPassiveSkill(useSkill) and isStopPassiveSkill: -# #GameWorld.DebugLog("被动技能不能再次触发被动技能") -# #return 0 -# if not PassPassiveLimit(useSkill): -# stopPassiveSkill = True -# -# -# passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) -# if not passiveEff: -# return 0 -# buffDict = passiveEff.GetBuffsByTriggerType(triggerType) -# if not buffDict: -# return 0 -# -# # 当前战斗关系 pvp pve -# battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) -# if not AttackCommon.CheckBattleRelationType(attacker, defender, useSkill, battleRelationType): -# return 0 -# -# useSkillID = useSkill.GetSkillID() if useSkill else 0 -# #tick = GameWorld.GetGameWorld().GetTick() -# curValue = 0 -# -# for skillID, effectList in buffDict.items(): -# if skillID == useSkillID: -# continue -# curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) -# if not curSkill: -# continue -# -# if not IsValidPassiveSkill(curSkill): -# continue -# -# triggerCount = 0 # 成功触发次数 -# for effectInfo in effectList: -# if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill: -# # 只有天赋才可以再次被触发 -# continue -# passiveEffect = effectInfo[0] -# # 被动触发的技能 -# pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID() -# -# callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen")) -# if not callFunc: -# continue -# -# # 条件不满足 -# if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]): -# continue -# -# callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue")) -# if callFunc is None: -# continue -# -# # 如被动技能:千幻冥炎真实伤害从2变4倍 -# #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue) -# value = callFunc(attacker, defender, passiveEffect) -# if triggerType in TriggerValueMaxList: -# curValue = max(curValue, value) # 取最大值 -# elif triggerType in TriggerValueMinList: -# if not curValue: -# curValue = value -# elif value > 0: -# curValue = min(curValue, value) # 取最小值 -# else: -# curValue += value -# -# triggerCount += 1 -# -# if triggerCount: -# OnTriggerBuffDel(attacker, curSkill, triggerCount) -# -# return curValue + + triggerWay = ChConfig.TriggerWay_CalcEffValue + passiveEffMgr = atkObj.GetPassiveEffManager() + connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0 + effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID) + if not effInfoList: + return 0 + + curValue = 0 + skillMgr = atkObj.GetSkillManager() + buffMgr = atkObj.GetBuffManager() + # [["skill/buff", skillID/buffID, effIDList], ...] + tagID = defObj.GetID() if defObj else 0 + GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList)) + for effInfo in effInfoList: + sign = effInfo[0] + if sign == "skill": + skillID, effIDList = effInfo[1:] + effSkill = skillMgr.FindSkillByID(skillID) + elif sign == "buff": + buffID, effIDList = effInfo[1:] + effBuff = buffMgr.GetBuff(buffID) + if not effBuff: + continue + effSkill = effBuff.GetSkillData() + else: + continue + + if not effSkill: + continue + + for effID in effIDList: + effect = effSkill.GetEffectByID(effID, triggerWay) + if not effect: + continue + effID = effect.GetEffectID() + if not effID or effID != calcEffID: + continue + + if effID in ChConfig.AttrIDList: + pyName = "PassiveEff_Attr" + else: + pyName = "PassiveEff_%s" % effID + + callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "GetHappenValue")) + if not callFunc: + continue + value = callFunc(atkObj, defObj, effect, effSkill) + if value is None: + continue + + #if triggerType in TriggerValueMaxList: + # curValue = max(curValue, value) # 取最大值 + #elif triggerType in TriggerValueMinList: + # if not curValue: + # curValue = value + # elif value > 0: + # curValue = min(curValue, value) # 取最小值 + #else: + curValue += value + #if skillTypeID not in Def_PassiveSkillValueNoCD: + # if curSkill.GetCoolDownTime(): + # SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker) + + return curValue + diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py index 3231fc0..d1042eb 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py @@ -562,7 +562,7 @@ DoBeAttackResult(turnFight, curBatObj, useSkill, True) return -def DoCombo(turnFight, curBatObj, useSkill): +def DoCombo(turnFight, atkObj, useSkill): ''' 格挡、反击、连击规则 1. 所有武将或怪物均可能产生格挡,群攻时格挡一对一判断,均可能产生格挡 @@ -586,7 +586,7 @@ tagFriendly = useSkill.GetTagFriendly() if tagFriendly: - tagObj = GetRelativeObj(turnFight, curBatObj) + tagObj = GetRelativeObj(turnFight, atkObj) else: tagObjList = useSkill.GetTagObjList() if not tagObjList: @@ -596,18 +596,31 @@ if atkBackSkill: # 可以反击,打断连击 GameWorld.DebugLog("● %s 【反击】" % TurnAttack.GetObjName(tagObj)) - OnUseSkill(turnFight, tagObj, atkBackSkill, [curBatObj], ChConfig.TurnBattleType_AtkBack) + OnUseSkill(turnFight, tagObj, atkBackSkill, [atkObj], ChConfig.TurnBattleType_AtkBack) return if not tagObj: return - if CanCombo(curBatObj, tagObj): - # 连击根据技能目标配置逻辑重新选择目标 - GameWorld.DebugLog("● %s 【连击】" % TurnAttack.GetObjName(curBatObj)) - DoHeroSpecialty(turnFight, curBatObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID()) - OnUseSkill(turnFight, curBatObj, useSkill, batType=ChConfig.TurnBattleType_Combo) - + comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) + aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate) + aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill) + + dComboRateDef = tagObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef) + happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1)) + if not GameWorld.CanHappen(happenRate): + GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" + % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum)) + return + GameWorld.DebugLog("● %s 【连击】 happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" + % (TurnAttack.GetObjName(atkObj), happenRate, aComboRate, dComboRateDef, comboNum)) + atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1) + + # 连击特长 + DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID()) + + # 连击根据技能目标配置逻辑重新选择目标 + OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo) return def __getCanAtkBackSkill(useSkill, tagObj): @@ -642,21 +655,6 @@ GameWorld.DebugLog("可以反击! tagID=%s" % tagID) return useSkill return - -def CanCombo(atkObj, defObj): - ## 可否连击 - comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) - aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate) - dComboRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef) - happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1)) - if GameWorld.CanHappen(happenRate): - GameWorld.DebugLog("可以连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" - % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum)) - atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1) - return True - GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" - % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum)) - return False def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False): '''被攻击结果 @@ -880,9 +878,6 @@ # return enhanceSkillID = curEffect.GetEffectValue(0) checkInStateList = curEffect.GetEffectValue(1) - if checkInStateList: - if isinstance(checkInStateList, int): - checkInStateList = [checkInStateList] GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s" % (enhanceSkillID, checkInStateList)) tagObjList = useSkill.GetTagObjList() @@ -905,12 +900,7 @@ GameWorld.DebugLog(" 闪避的不触发: tagID=%s" % (tagID)) continue if checkInStateList: - inState = False - for state in checkInStateList: - if tagObj.IsInState(state): - inState = True - break - if not inState: + if not tagObj.CheckInState(checkInStateList): GameWorld.DebugLog(" 不在状态下不触发: tagID=%s not in state:%s" % (tagID, checkInStateList)) continue if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue): @@ -929,11 +919,8 @@ if checkInStateList: inState = False for tagObj in tagObjList: - for state in checkInStateList: - if not state or tagObj.IsInState(state): - inState = True - break - if inState: + if tagObj.CheckInState(checkInStateList): + inState = True break if not inState: GameWorld.DebugLog(" 没有目标在状态下不触发: tagObj not in state:%s" % str(checkInStateList)) @@ -1102,7 +1089,10 @@ if isAngerSkill: aAngerSkillPer = atkObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPer) # 普技增伤 dAngerSkillPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPerDef) # 普技减伤 - + + aAddSkillPer = 0 # 技能增伤 + aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill) + # 物法增减伤 if pmType == IPY_GameWorld.ghtMag: # 法伤 aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer) @@ -1117,6 +1107,7 @@ dNormalSkillPerDef /= 10000.0 aAngerSkillPer /= 10000.0 dAngerSkillPerDef /= 10000.0 + aAddSkillPer /= 10000.0 aPMDamPer /= 10000.0 dPMDamPerDef /= 10000.0 aSuperDamPer /= 10000.0 @@ -1124,8 +1115,8 @@ aFinalDamPer /= 10000.0 dFinalDamPerDef /= 10000.0 - GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s" - % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes)) + GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s" + % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes, aAddSkillPer)) # 持续性伤害 if isDot: -- Gitblit v1.8.0