From 2350f87cbba3da859d02632aa8116c1511d6d60b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 24 九月 2025 18:54:13 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(马超所有技能;增加触发方式20 21 22;增加效果5006 6010 6011 6012 6013;修复非学习的子技能加载触发效果bug;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 15 +- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py | 30 ++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 27 ++++- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 3 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py | 24 ++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py | 41 ++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py | 19 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py | 30 ++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 52 +++++++-- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 24 +++- 10 files changed, 231 insertions(+), 34 deletions(-) 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 8af1cb2..e0ce407 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py @@ -63,14 +63,18 @@ effectID = effect.GetEffectID() if effectID == 0: continue - triggerWay = effect.GetTriggerWay() - triggerSrc = effect.GetTriggerSrc() - if not triggerWay: + tWay = effect.GetTriggerWay() + tSrc = effect.GetTriggerSrc() + if not tWay: continue - if triggerWay in ChConfig.TriggerWayNoLoadList: + if tWay in ChConfig.TriggerWayNoLoadList: continue - if triggerSrc != ChConfig.TriggerSrc_SkillSelf: + if tSrc != ChConfig.TriggerSrc_SkillSelf: # 仅添加本技能的 + continue + if tWay == ChConfig.TriggerWay_CalcEffValue: + tWay = "%s_%s" % (tWay, effectID) + if tWay != triggerWay: continue effIDList.append(effectID) if effIDList: @@ -468,6 +472,15 @@ return buffID = buffIDList[0] return self._buffIDDict.get(buffID, None) + def FindBuffListByState(self, state): + ## 查找某种buff状态的buff列表 + buffIDList = self._buffStateDict.get(state, []) + buffs = [] + for buffID in buffIDList: + if buffID not in self._buffIDDict: + continue + buffs.append(self._buffIDDict[buffID]) + return buffs def AddBuffState(self, state, buffID): ## 添加buff影响的状态,ChConfig.BatObjStateList @@ -503,6 +516,7 @@ self._remainTime = 0 self._batType = 0 # 战斗类型,普通、连击、反击、追击等 self._tagObjList = [] # 本次技能目标列表 [BatObj, ...] + self._killObjList = [] # 本次技能击杀目标列表 [BatObj, ...] self._hurtList = [] # 本次伤血列表,可能同一个对象有多个伤害,如弹射等 [HurtObj, ...] self._bySkill = None # 由哪个技能触发的 self._byBuff = None # 由哪个buff触发的 @@ -518,6 +532,7 @@ def ResetUseRec(self): self._batType = 0 self._tagObjList = [] + self._killObjList = [] self._bySkill = None self._byBuff = None self._afterLogicList = [] @@ -572,6 +587,8 @@ def SetByBuff(self, byBuff): self._byBuff = byBuff def GetTagObjList(self): return self._tagObjList # 技能目标列表 def SetTagObjList(self, tagObjList): self._tagObjList = tagObjList + def GetKillObjList(self): return self._killObjList # 击杀目标列表 + def SetKillObjList(self, killObjList): self._killObjList = killObjList def GetAfterLogicList(self): return self._afterLogicList def AddAfterLogic(self, logicType, logicData): '''添加技能释放后需要处理额外逻辑 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index ff9a710..390ea1a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -4294,7 +4294,10 @@ TriggerWay_BuffDel, # buff消失后 17 TriggerWay_BeCombo, # 被连击时 18 TriggerWay_BePursue, # 被追击时 19 -) = range(1, 1 + 19) +TriggerWay_UseSkillOverOne, # 使用技能后(多目标仅触发一次)20 +TriggerWay_AttackOverDirectOne, # 直接攻击后(除dot或buff外的攻击,多目标仅触发一次)21 +TriggerWay_BeAnyEffect, # 受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)22 +) = range(1, 1 + 22) # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的 TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst] @@ -4307,13 +4310,18 @@ # 被动效果ID,属性类的直接使用属性ID当做效果ID PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...] -PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...] -PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减): 值1-变更倍值;值2-可附加验证处于xx状态 [状态1, 状态2, ...] -PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比: 值1-增加的万分比;值2-可附加验证处于xx状态 [状态1, 状态2, ...] -PassiveEff_AddSkillPerByJob = 6006 # 增加本次技能万分比: 值1-增加的万分比;值2-验证目标职业 -PassiveEff_AddSkillTagCnt = 6007 # 增加技能目标数:值1-增加目标个数 -PassiveEff_ImmuneControlBuff = 6008 # 生命值低于x%时免疫控制效果:值1-百分比 -PassiveEff_MustSuperHit = 6009 # 生命值低于x%时必定暴击:值1-百分比 +PassiveEff_ChangeHurtType = 6002 # 变更本次伤害类型 +PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减) +PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比(验证目标状态) +PassiveEff_AddSkillPerByJob = 6006 # 增加本次技能万分比(验证目标职业) +# 6005 增加本次技能万分比(按buff状态层数算) +PassiveEff_AddSkillTagCnt = 6007 # 增加技能目标数 +PassiveEff_ImmuneControlBuff = 6008 # 生命值低于x%时免疫控制效果 +PassiveEff_MustSuperHit = 6009 # 生命值低于x%时必定暴击 +PassiveEff_AddSkillPerByHP = 6010 # 增加本次技能万分比(验证当前生命) +PassiveEff_AddSkillPerByBuffLayer = 6011 # 增加本次技能万分比(根据buff层级) +PassiveEff_AddBuffLayerMax = 6012 # 添加buff层级上限: 数值1-增加层级上限 +PassiveEff_AddFinalDamPer = 6013 # 增加最终增伤(根据属性转化) # 被动效果ID有触发值时就返回的 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit] diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py new file mode 100644 index 0000000..39e8ae8 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py @@ -0,0 +1,41 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_5006 +# +# @todo:移除目标身上某种状态buff +# @author hxp +# @date 2025-09-24 +# @version 1.0 +# +# 详细描述: 移除目标身上某种状态buff +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-24 19:00""" +#------------------------------------------------------------------------------- + +import GameWorld +import TurnBuff + +def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs): + buffState = curEffect.GetEffectValue(0) # buff状态 + if not buffState: + return + killObjNotEff = curEffect.GetEffectValue(2) # 有击杀时该效果不生效,默认0-均生效;1-有击杀不生效 + if killObjNotEff: + # 判断是否击杀有个小问题,如果关联技能没有击杀目标,但是额外触发的伤害击杀了目标,这个是否算击杀 + # 如马超的怒技,这个可以到时看表现再看是否优化,待优化方案:同步效果技能的目标判断目标是否有死亡来判断是否有击杀 + if connSkill and connSkill.GetKillObjList(): + GameWorld.DebugLog("本次有击杀不触发该效果: effID=%s" % (curEffect.GetEffectID())) + return + + tagChoose = curEffect.GetEffectValue(1) # 目标:0-继承技能目标;1-自己 + delObj = batObj if tagChoose == 1 else tagObj + + buffMgr = delObj.GetBuffManager() + for buff in buffMgr.FindBuffListByState(buffState): + GameWorld.DebugLog(" 移除buff状态: tagID=%s,buffID=%s" % (delObj.GetID(), buff.GetBuffID())) + TurnBuff.DoBuffDel(turnFight, delObj, buff) + + return True diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py new file mode 100644 index 0000000..6ccb464 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_6010 +# +# @todo:增加本次技能万分比(验证当前生命) +# @author hxp +# @date 2025-09-24 +# @version 1.0 +# +# 详细描述: 增加本次技能万分比(验证当前生命) +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-24 19:00""" +#------------------------------------------------------------------------------- + +def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs): + checkHPPer = curEffect.GetEffectValue(1) + checkType = curEffect.GetEffectValue(2) + nowPer = attacker.GetHP() / float(attacker.GetMaxHP()) * 100 + # 小于等于 + if checkType == 0: + if nowPer > checkHPPer: + return + # 大于等于 + else: + if nowPer < checkHPPer: + return + return curEffect.GetEffectValue(0) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py new file mode 100644 index 0000000..50abc29 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_6011 +# +# @todo:增加本次技能万分比(根据buff层级) +# @author hxp +# @date 2025-09-24 +# @version 1.0 +# +# 详细描述: 增加本次技能万分比(根据buff层级) +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-24 19:00""" +#------------------------------------------------------------------------------- + + +def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs): + layerPer = curEffect.GetEffectValue(0) # 每层增加的万分比 + buffState = curEffect.GetEffectValue(1) # buff状态 + if not buffState: + return + + layerTotal = 0 + buffMgr = attacker.GetBuffManager() + for buff in buffMgr.FindBuffListByState(buffState): + layerTotal += buff.GetLayer() + + return layerTotal * layerPer diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py new file mode 100644 index 0000000..62d8379 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_6012 +# +# @todo:添加buff层级上限 +# @author hxp +# @date 2025-09-24 +# @version 1.0 +# +# 详细描述: 添加buff层级上限 +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-24 19:00""" +#------------------------------------------------------------------------------- + +def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs): + return curEffect.GetEffectValue(0) \ No newline at end of file diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py new file mode 100644 index 0000000..06f3a13 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_6013 +# +# @todo:增加最终增伤(根据属性转化) +# @author hxp +# @date 2025-09-24 +# @version 1.0 +# +# 详细描述: 增加最终增伤(根据属性转化) +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-24 19:00""" +#------------------------------------------------------------------------------- + +def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs): + perAttr = curEffect.GetEffectValue(0) # 每万分比 + attrID = curEffect.GetEffectValue(1) # 属性ID + toPer = curEffect.GetEffectValue(2) # 转化为x万分比最终增伤 + attrValue = attacker.GetBatAttrValue(attrID) + changeValue = attrValue / perAttr * toPer + return changeValue 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 bd8ae78..b319418 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py @@ -74,16 +74,21 @@ return False buffValueList = GetAddBuffValue(turnFight, buffOwner, batObj, buffSkill) - GameWorld.DebugLog("OnAddBuff: curID=%s,skillID=%s,atkType=%s,buffValueList=%s,ownerID=%s,relatedSkillID=%s" - % (curID, skillID, buffSkill.GetAtkType(), buffValueList, ownerID, relatedSkillID)) skillTypeID = buffSkill.GetSkillTypeID() buffRepeat = buffSkill.GetBuffRepeat() addLayerCnt = buffSkill.GetLayerCnt() addLayerEff = buffSkill.GetEffectByID(ChConfig.PassiveEff_AddBuffLayerByWeight) if addLayerEff: - addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt) + # 可指定来源技能技能才生效,不指定的话默认生效 + if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID: + addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt) + maxLayerCnt = buffSkill.GetLayerMax() + if maxLayerCnt: + maxLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayerMax, buffSkill) + GameWorld.DebugLog("OnAddBuff: curID=%s,skillID=%s,atkType=%s,buffValueList=%s,addLayerCnt=%s/%s,ownerID=%s,relatedSkillID=%s" + % (curID, skillID, buffSkill.GetAtkType(), buffValueList, addLayerCnt, maxLayerCnt, ownerID, relatedSkillID)) #buff重复获得时的叠加规则 #以下规则默认针对的是相同施法者,即相同来源的处理 #如果有针对不同施法者的规则会说明 @@ -97,7 +102,6 @@ buffMgr = batObj.GetBuffManager() if buffRepeat == 4: # 4 独立:回合、效果独立计算 - maxLayerCnt = buffSkill.GetLayerMax() # 如果有限制最大层数,达到上限时如果有新的层数进来,就替换掉持续时间最短的,只算相同来源 if maxLayerCnt: buffList = buffMgr.FindBuffListBySkillTypeID(skillTypeID) @@ -136,11 +140,10 @@ updLayerCnt = addLayerCnt if buffRepeat == 3: # 叠加层级 - maxLayerCnt = buffSkill.GetLayerMax() updLayerCnt = nowLayerCnt + addLayerCnt if maxLayerCnt and updLayerCnt > maxLayerCnt: updLayerCnt = maxLayerCnt - GameWorld.DebugLog(" 叠加层级: nowLayerCnt=%s,addLayerCnt=%s,updLayerCnt=%s" % (nowLayerCnt, addLayerCnt, updLayerCnt)) + GameWorld.DebugLog(" 叠加层级: nowLayerCnt=%s,addLayerCnt=%s,updLayerCnt=%s,maxLayerCnt=%s" % (nowLayerCnt, addLayerCnt, updLayerCnt, maxLayerCnt)) else: GameWorld.DebugLog(" 默认覆盖") 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 ef57875..fd3b51a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py @@ -125,7 +125,6 @@ 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": @@ -168,6 +167,7 @@ if effID in ChConfig.PassiveEffHappenValueList: if value: + GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s,curValue=%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList, value)) return value elif effID in ChConfig.PassiveEffValueMaxList: curValue = max(curValue, value) # 取最大值 @@ -182,5 +182,6 @@ # if curSkill.GetCoolDownTime(): # SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker) + GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s,curValue=%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList, curValue)) 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 1ee372c..5492ff9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py @@ -710,7 +710,7 @@ @param isUseSkill: 是否是直接使用技能的攻击结果,否则视为持续性的 ''' - curID = curObj.GetID() + #curID = curObj.GetID() isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill) isAngerSkill = SkillCommon.isAngerSkill(useSkill) @@ -746,6 +746,7 @@ if tagObj.IsAlive() and tagObj.GetHP() <= 0 and tagObj.GetFaction() != curObj.GetFaction(): killObjList.append(tagObj) TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill) + useSkill.SetKillObjList(killObjList) if curObj.IsAlive() and curObj.GetHP() <= 0: TurnAttack.SetObjKilled(turnFight, curObj) @@ -813,19 +814,33 @@ tagObj = batObjMgr.getBatObj(tagObjID) TurnPassive.OnTriggerPassiveEffect(turnFight, buffObj, ChConfig.TriggerWay_ShieldBroken, tagObj, connSkillTypeID=buffSkillTypeID) + # 有击杀时 + for index, tagObj in enumerate(killObjList): + if index == 0: + TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill) + TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill) + + triggerOne = False batType = useSkill.GetBatType() + isAttackDirect = (isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]) for tagObj in useSkill.GetTagObjList(): tagID = tagObj.GetID() if tagID in effIgnoreObjIDList: continue # 直接攻击 - if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]: + if isAttackDirect: + if not triggerOne: + TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirectOne, tagObj, connSkill=useSkill) TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill) TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill) + else: + TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill) # 使用技能后 if isUseSkill: + if not triggerOne: + TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOverOne, tagObj, connSkill=useSkill) TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill) # 连击 @@ -835,11 +850,7 @@ elif batType == ChConfig.TurnBattleType_Pursue: TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill) - if killObjList: - tagObj = killObjList[0] - TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill) - for tagObj in killObjList: - TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill) + triggerOne = True # 设置已经触发过一次 return @@ -942,7 +953,7 @@ continue effID = curEffect.GetEffectID() - GameWorld.DebugLog("●执行额外技能效果: %s, triggerWay=%s,effIgnoreObjIDList=%s" % (effID, triggerWay, effIgnoreObjIDList)) + GameWorld.DebugLog("●执行额外技能效果: skillID=%s,effID=%s, triggerWay=%s,effIgnoreObjIDList=%s" % (useSkill.GetSkillID(), effID, triggerWay, effIgnoreObjIDList)) if effID == 5010: # 额外技能效果 __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, effIgnoreObjIDList) @@ -1025,12 +1036,21 @@ ''' if not passiveSkill: return - isOK = False + bySkillID = 0 + if connSkill: + bySkillID = connSkill.GetSkillID() + elif connBuff: + bySkillID = connBuff.GetSkillID() passiveSkillID = passiveSkill.GetSkillID() + if passiveSkillID == bySkillID: + #GameWorld.DebugLog("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID)) + return + + isOK = False # 继承主技能目标 if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill: happenRate = passiveSkill.GetHappenRate() - GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s" % (effSkillID, effectID, passiveSkillID, happenRate)) + GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s,bySkillID=%s" % (effSkillID, effectID, passiveSkillID, happenRate, bySkillID)) if not tagObj: return tagID = tagObj.GetID() @@ -1043,7 +1063,7 @@ passiveTagObjList = [tagObj] isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff) else: - GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID)) + GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s" % (effSkillID, effectID, passiveSkillID, bySkillID)) isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff) return isOK @@ -1168,14 +1188,18 @@ aAtk = atkObj.GetAtk() # 攻击方最大攻击 - dHP = defObj.GetHP() + dHP, dMaxHP = defObj.GetHP(), defObj.GetMaxHP() dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力 atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill) + atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByHP, curSkill) atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByJob, curSkill) + atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill) aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成 dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤 + + aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill) aNormalSkillPer, dNormalSkillPerDef = 0, 0 if isTurnNormalSkill: @@ -1224,8 +1248,8 @@ if calcType != ChConfig.Def_Calc_Attack: aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill) - GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s" - % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, hurtTypes, aAddSkillPer)) + GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aAddSkillPer=%s" + % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aAddSkillPer)) # 持续性伤害 if isTurnNormalSkill: -- Gitblit v1.8.0