129 【战斗】战斗系统-服务端(马超所有技能;增加触发方式20 21 22;增加效果5006 6010 6011 6012 6013;修复非学习的子技能加载触发效果bug;)
5个文件已修改
5个文件已添加
263 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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):
        '''添加技能释放后需要处理额外逻辑
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]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py
New file
@@ -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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py
New file
@@ -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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py
New file
@@ -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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py
New file
@@ -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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py
New file
@@ -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
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:
        # 可指定来源技能技能才生效,不指定的话默认生效
        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("        默认覆盖")
                
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
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: