129 【战斗】战斗系统-服务端(技能变更主线阵容战斗中更新技能;B428增加通知是否是添加buff的;buff叠加规则0 4 5;增加效果5002结算目标某种状态持续buff所有回合效果)
8个文件已修改
1个文件已添加
250 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5002.py 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -156,7 +156,9 @@
        effDict = self._AffectBuffDict[key]
        if buffID not in effDict:
            effDict[buffID] = []
        effDict[buffID].append(effectID)
        effIDList = effDict[buffID]
        if effectID not in effIDList:
            effIDList.append(effectID)
        return
    
    def DelBuffPassiveEffect(self, buffID):
@@ -633,10 +635,16 @@
        TurnPassive.RefreshPassive(self)
        return
    
    def UpdInitBatAttr(self, initAttrDict):
    def UpdInitBatAttr(self, initAttrDict, skillIDList):
        ## 更新战斗属性,一般只有主阵容需要更新,战斗中养成、装备变化等引起的主阵容属性变更时需要实时更新
        self._initAttrDict = initAttrDict
        learnNewSkill = False
        for skillID in skillIDList:
            if self._skillMgr.LearnSkillByID(skillID):
                learnNewSkill = True
        TurnBuff.RefreshBuffAttr(self)
        if learnNewSkill: # 有学新技能时重刷技能被动
            self._passiveEffMgr.RefreshSkillPassiveEffect()
        return
    
    def ResetBattleEffect(self):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -47164,6 +47164,7 @@
                  ("Value1", c_int),    
                  ("Value2", c_int),    
                  ("Value3", c_int),    
                  ("IsAdd", c_ubyte),    # 是否是添加/覆盖的,1-是;0-否一般为buff的数据刷新
                  ]
    def __init__(self):
@@ -47190,6 +47191,7 @@
        self.Value1 = 0
        self.Value2 = 0
        self.Value3 = 0
        self.IsAdd = 0
        return
    def GetLength(self):
@@ -47211,7 +47213,8 @@
                                OwnerID:%d,
                                Value1:%d,
                                Value2:%d,
                                Value3:%d
                                Value3:%d,
                                IsAdd:%d
                                '''\
                                %(
                                self.Cmd,
@@ -47225,7 +47228,8 @@
                                self.OwnerID,
                                self.Value1,
                                self.Value2,
                                self.Value3
                                self.Value3,
                                self.IsAdd
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -788,7 +788,7 @@
                    continue
                lineupHero = lineup.GetLineupHero(posNum)
                if lineupHero.heroBatAttrDict:
                    batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict)
                    batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict, lineupHero.heroSkillIDList)
    else:
        GameWorld.DebugLog("主阵容没有在战斗中,不需要处理", playerID)
        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py
@@ -17,16 +17,16 @@
import TurnBuff
def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
    #结算一次扣除1回合
    remainTime = max(0, curBuff.GetRemainTime() - 1)
    curBuff.SetRemainTime(remainTime)
    remainTime = max(0, effBuff.GetRemainTime() - 1)
    effBuff.SetRemainTime(remainTime)
    
    TurnBuff.DoBuffProcess(turnFight, batObj, curBuff)
    TurnBuff.DoBuffProcess(turnFight, batObj, effBuff)
    
    if remainTime <= 0:
        TurnBuff.DoBuffDel(turnFight, batObj, curBuff)
        TurnBuff.DoBuffDel(turnFight, batObj, effBuff)
    else:
        TurnBuff.SyncBuffRefresh(turnFight, batObj, curBuff)
        TurnBuff.SyncBuffRefresh(turnFight, batObj, effBuff)
        
    return
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5002.py
New file
@@ -0,0 +1,63 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5002
#
# @todo:结算目标某种状态持续buff所有回合效果
# @author hxp
# @date 2025-08-28
# @version 1.0
#
# 详细描述: 结算目标某种状态持续buff所有回合效果
#
#-------------------------------------------------------------------------------
#"""Version = 2025-08-28 10:30"""
#-------------------------------------------------------------------------------
import TurnBuff
import GameWorld
import IpyGameDataPY
import TurnSkill
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
    effectID = curEffect.GetEffectID()
    buffState = curEffect.GetEffectValue(0)
    needLayers = curEffect.GetEffectValue(1) # 累计达到多少层时才结算
    noDel = curEffect.GetEffectValue(2) # 是否不扣除剩余回合,默认0-扣除 1-不扣除
    exSkillID = curEffect.GetEffectValue(3) # 额外释放技能ID,0不释放(可对buff携带者或重设目标)
    #GameWorld.DebugLog("DoBuffEffectLogic: effectID=%s, buffState=%s, needLayers=%s, noDel=%s, exSkillID=%s" % (effectID, buffState, needLayers, noDel, exSkillID))
    if not buffState or not needLayers:
        return
    layerTotal = 0
    buffList = []
    buffMgr = tagObj.GetBuffManager()
    for index in range(buffMgr.GetBuffCount()):
        buff = buffMgr.GetBuffByIndex(index)
        skillData = buff.GetSkillData()
        if skillData.GetCurBuffState() != buffState:
            continue
        layerTotal += buff.GetLayer()
        buffList.append(buff)
    if layerTotal < needLayers:
        GameWorld.DebugLog("buff状态总层数不足不触发! buffState=%s,layerTotal=%s < %s" % (buffState, layerTotal, needLayers))
        return
    GameWorld.DebugLog("结算目标某种状态持续buff所有回合效果: layerTotal=%s,buffCnt=%s,noDel=%s" % (layerTotal, len(buffList), noDel))
    for buff in buffList:
        GameWorld.DebugLog("buffID=%s,RemainTime=%s" % (buff.GetBuffID(), buff.GetRemainTime()))
        for _ in range(buff.GetRemainTime()):
            TurnBuff.DoBuffProcess(turnFight, tagObj, buff)
        if noDel:
            continue
        TurnBuff.DoBuffDel(turnFight, tagObj, buff)
    if exSkillID:
        effSkillID = effSkill.GetSkillID()
        passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", exSkillID)
        if passiveSkill:
            TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID)
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
@@ -17,11 +17,8 @@
import TurnSkill
import IpyGameDataPY
import GameWorld
import ChConfig
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
    effectID = curEffect.GetEffectID()
    skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
    if not skillID:
        passiveSkill = effSkill
@@ -29,30 +26,9 @@
        passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
    if not passiveSkill:
        return
    passiveSkillID = passiveSkill.GetSkillID()
    # 继承主技能目标
    if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
        happenRate = passiveSkill.GetHappenRate()
        GameWorld.DebugLog("被动触发技能,继承主技能目标! effectID=%s,passiveSkillID=%s,happenRate=%s" % (effectID, passiveSkillID, happenRate))
        tagObjList = [tagObj]
        passiveTagObjList = []
        for tagObj in tagObjList:
            tagID = tagObj.GetID()
            if not tagObj.IsAlive():
                GameWorld.DebugLog("    已被击杀不触发: tagID=%s" % (tagID))
                continue
            if happenRate and happenRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
                GameWorld.DebugLog("    概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
                continue
            passiveTagObjList.append(tagObj)
    effectID = curEffect.GetEffectID()
    effSkillID = effSkill.GetSkillID()
    return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID)
            
        if passiveTagObjList:
            TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
    else:
        GameWorld.DebugLog("被动触发技能,重新锁定目标! effectID=%s,passiveSkillID=%s" % (effectID, passiveSkillID))
        TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
    return
def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
    return DoSkillEffectLogic(turnFight, batObj, tagObj, None, curEffect, connSkill)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -61,36 +61,65 @@
                       % (curID, skillID, buffSkill.GetAtkType(), buffValueList, ownerID, relatedSkillID))
    
    skillTypeID = buffSkill.GetSkillTypeID()
    # 先简单做下能加上即可
    buffRepeat = buffSkill.GetBuffRepeat()
    #buff重复获得时的叠加规则
    #以下规则默认针对的是相同施法者,即相同来源的处理
    #如果有针对不同施法者的规则会说明
    #0 覆盖:重置剩余回合,效果覆盖
    #1 延长回合
    #2
    #3 叠加层级
    #4 独立:回合、效果独立计算
    #5 唯一,强制覆盖不同来源同状态buff,如嘲讽状态
    buffMgr = batObj.GetBuffManager()
    if buffRepeat == 4: # 4 独立:回合、效果独立计算
        pass # 不处理,直接跳过添加新buff
    elif buffRepeat == 5: # 5 唯一,强制覆盖不同来源同状态buff,如嘲讽状态
        buffState = buffSkill.GetCurBuffState()
        for index in range(buffMgr.GetBuffCount())[::-1]:
            buff = buffMgr.GetBuffByIndex(index)
            if buffState and buff.GetCurBuffState() != buffState:
                continue
            # 删除相同状态的buff
            DoBuffDel(turnFight, batObj, buff, bySkill, afterLogic, buffOwner)
    else:
    buffList = buffMgr.FindBuffBySkillTypeID(skillTypeID)
    if buffList:
        # buff堆叠逻辑,待处理,先直接通知
        for buff in buffList:
            if not buff:
                continue
            GameWorld.DebugLog("    已经存在该buff: buffID=%s,skillTypeID=%s" % (buff.GetBuffID(), skillTypeID))
                if buff.GetOwnerID() != ownerID:
                    continue
                GameWorld.DebugLog("    已经存在该buff,默认覆盖: buffID=%s,skillTypeID=%s,ownerID=%s" % (buff.GetBuffID(), skillTypeID, ownerID))
                # 重置回合、CD、值等
                buff.SetCalcTime(turnFight.getTimeline())
                buff.SetRemainTime(buffSkill.GetLastTime())
                buff.SetLayer(buffSkill.GetLayerCnt())
                buff.SetBuffValueList(buffValueList)
            if afterLogic and bySkill:
                bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
            else:
                SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
                    SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
                
        return True
    
    __AddNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic)
    __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic)
    return True
def __AddNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False):
    skillID = buffSkill.GetSkillID()
    relatedSkillID = bySkill.GetSkillID() if bySkill else 0
def __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False):
    curID = batObj.GetID()
    ownerID = buffOwner.GetID()
    skillID = buffSkill.GetSkillID()
    buff = buffMgr.AddBuff(skillID)
    if not buff:
        GameWorld.DebugLog("    添加buff失败! skillID=%s" % skillID, curID)
        return False
        return
    relatedSkillID = bySkill.GetSkillID() if bySkill else 0
    ownerID = buffOwner.GetID()
    buffID = buff.GetBuffID()
    GameWorld.DebugLog("    AddBuffOK. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s"
    GameWorld.DebugLog("    __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s"
                       % (buffID, skillID, ownerID, relatedSkillID, turnFight.getTimeline()), curID)
    buff.SetOwnerID(ownerID)
    buff.SetCalcTime(turnFight.getTimeline())
@@ -104,7 +133,7 @@
    if afterLogic and bySkill:
        bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
    else:
        SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
        SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
        
    DoBuffAddOver(turnFight, batObj, buffSkill, buff, buffOwner)
    return
@@ -287,7 +316,7 @@
    GameWorld.DebugLog("    最终属性 ID:%s,atk=%s,def=%s,hp=%s/%s" % (objID, batObj.GetAtk(), batObj.GetDef(), aftHP, aftMaxHP))
    return
def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0):
def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0, isNewAdd=False):
    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffRefresh)
    clientPack.ObjID = curBatObj.GetID()
    clientPack.BuffID = curBuff.GetBuffID()
@@ -299,6 +328,7 @@
    clientPack.Value1 = curBuff.GetValue1()
    clientPack.Value2 = curBuff.GetValue2()
    clientPack.Value3 = curBuff.GetValue3()
    clientPack.IsAdd = 1 if isNewAdd else 0
    turnFight.addBatPack(clientPack)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -82,20 +82,20 @@
def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None):
    buffMgr = batObj.GetBuffManager()
    curBuff = buffMgr.GetBuff(buffID)
    if not curBuff:
    effBuff = buffMgr.GetBuff(buffID)
    if not effBuff:
        return
    skillData = curBuff.GetSkillData()
    skillData = effBuff.GetSkillData()
    
    for effID in effIDList:
        curEffect = skillData.GetEffectByID(effID, triggerWay)
        if not curEffect:
            continue
        DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill)
        DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
        
    return
def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
    effID = curEffect.GetEffectID()
    if not effID:
        return
@@ -103,7 +103,7 @@
    callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
    if not callFunc:
        return
    callFunc(turnFight, batObj, tagObj, curBuff, curEffect, connSkill)
    callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
    return
def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -559,7 +559,7 @@
    __doCostZhanchui(turnFight, curBatObj, useSkill)
    __doSkillUserAnger(turnFight, curBatObj, useSkill)
    
    DoBeAttackResult(turnFight, curBatObj, useSkill)
    DoBeAttackResult(turnFight, curBatObj, useSkill, True)
    return
def DoCombo(turnFight, curBatObj, useSkill):
@@ -656,9 +656,10 @@
                       % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
    return False
def DoBeAttackResult(turnFight, curObj, useSkill):
def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
    '''被攻击结果
    @param curObj: 施法方或buff归属方
    @param isUseSkill: 是否是直接使用技能的攻击结果
    '''
    
    curID = curObj.GetID()
@@ -681,11 +682,13 @@
                shieldBrokenList.append([buffObjID, tagObjID, buffSkillTypeID])
                
        elif logicType == ChConfig.AfterLogic_AddBuff:
            batObj, buff, _ = logicData
            TurnBuff.SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
            batObj = logicData[0]
            buff = logicData[1]
            TurnBuff.SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
            
        elif logicType == ChConfig.AfterLogic_SyncBuff:
            buffObj, buff, _, _ = logicData
            buffObj = logicData[0]
            buff = logicData[1]
            TurnBuff.SyncBuffRefresh(turnFight, buffObj, buff, relatedSkillID)
            
    # 统计击杀
@@ -716,6 +719,7 @@
        FBLogic.OnPlayerLineupAttackResult(curPlayer, curObj, killObjIDList, useSkill, turnFight.mapID, turnFight.funcLineID)
        
    # 优先触发本技能额外效果,注:仅该技能释放后该技能的额外效果视为主技能的效果,优先级最高
    if isUseSkill:
    __DoCurSkillEff(turnFight, curObj, useSkill, missObjIDList)
    
    # ========== 以下触发被动 ==========
@@ -733,7 +737,7 @@
            continue
        
        # 直接攻击
        if not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
        if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
            
@@ -818,6 +822,7 @@
            continue
        
        effID = curEffect.GetEffectID()
        GameWorld.DebugLog("执行额外技能效果: %s, missObjIDList=%s" % (effID, missObjIDList))
        if effID == 5010:
            # 额外技能效果
            __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
@@ -825,6 +830,7 @@
        
        for tagObj in useSkill.GetTagObjList():
            tagID = tagObj.GetID()
            GameWorld.DebugLog("    tagID=%s" % (tagID))
            if tagID in missObjIDList:
                # 闪避了不触发
                continue
@@ -901,6 +907,39 @@
    OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
    return
def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0):
    '''被动触发使用技能
    @param passiveSkill: 释放的被动技能
    @param connSkill: 由什么技能引起的
    @param effSkillID: 被动效果所属的技能ID
    @param effectID: 被动效果ID
    注:可能由A引起触发B技能的效果释放技能C
    '''
    if not passiveSkill:
        return
    isOK = False
    passiveSkillID = passiveSkill.GetSkillID()
    # 继承主技能目标
    if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
        happenRate = passiveSkill.GetHappenRate()
        GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s" % (effSkillID, effectID, passiveSkillID, happenRate))
        if not tagObj:
            return
        tagID = tagObj.GetID()
        if not tagObj.IsAlive():
            GameWorld.DebugLog("    已被击杀不触发: tagID=%s" % (tagID))
            return
        if happenRate and happenRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
            GameWorld.DebugLog("    概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
            return
        passiveTagObjList = [tagObj]
        isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
    else:
        GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
        isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
    return isOK
def __doSkillHurtHP(turnFight, attacker, defObj, curSkill):
    ## 执行技能伤血,只计算伤血,其他逻辑等技能同步后再处理
    # @return: None - 没有执行成功,即忽略该目标