129 【战斗】战斗系统-服务端(蔡文姬所有技能;增加复活释放方式支持;增加触发方式40-在场时,41-复活时;增加效果5501、6021、7011;)
7个文件已修改
2个文件已添加
187 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -835,6 +835,7 @@
        self._skillTempAttrDict = {} # 某次技能释放中临时的属性增减 {attrID:+-value, ...} value可能是负值
        self._kvDict = {} # 自定义kv字典
        self._bigTurnAtkbackCnt = 0 # 大回合累计反击次数
        self._incrementValue = 0 # 自增值,每场战斗重置,用于确保唯一的场景,如 Skill tag 标签
        self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
        self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
        self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
@@ -1018,6 +1019,9 @@
    def SetDead(self):
        self._isAlive = False
        self._hp = 0
    def SetRevive(self, hp):
        self._isAlive = True
        self._hp = hp
    def GetMaxHP(self): return int(self._batAttrDict.get(ChConfig.AttrID_MaxHP, 0))
    def SetMaxHP(self, maxHP, isNotify=False):
        maxHP = int(maxHP)
@@ -1070,6 +1074,7 @@
    def ResetSkillUseCnt(self):
        self._skillUseCntDict = {}
        self._skillTurnUseCntDict = {}
        self._incrementValue = 0
    def AddSkillUseCnt(self, skillID):
        self._skillUseCntDict[skillID] = self._skillUseCntDict.get(skillID, 0) + 1
        self._skillTurnUseCntDict[skillID] = self._skillTurnUseCntDict.get(skillID, 0) + 1
@@ -1082,6 +1087,10 @@
        self._bigTurnAtkbackCnt = 0
        self._skillTurnUseCntDict = {}
    
    def GetIncrementValue(self):
        self._incrementValue += 1
        return self._incrementValue
    def GetLastHurtValue(self): return self._lastHurtValue
    def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -1551,6 +1551,7 @@
            batObj = batObjMgr.getBatObj(objID)
            turnFight.ResetOneActionUseSkillCnt()
            TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_FightStart)
            TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_InBattlefield)
            
    turnFight.enterLogic = True
    return True
@@ -1915,8 +1916,12 @@
    turnFight.costTime = time.time() - turnFight.startTime
    winFaction = turnFight.winFaction
    turnFight.isWin = (winFaction == ChConfig.Def_FactionA)
    mapID = turnFight.mapID
    funcLineID = turnFight.funcLineID
    GameWorld.DebugLog("--- 战斗结束处理 ---, winFaction=%s, costTime=%ss, %s" % (winFaction, turnFight.costTime, guid))
    if mapID != ChConfig.Def_FBMapID_Main:
        GameWorld.Log("战斗耗时: %ss, mapID=%s,funcLineID=%s" % (turnFight.costTime, mapID, funcLineID))
    # 统计明细
    batObjMgr = BattleObj.GetBatObjMgr()
    statInfo = {}
@@ -1951,8 +1956,6 @@
                
    overMsg = {"winFaction":winFaction, "statInfo":statInfo}
    curPlayer = turnFight.curPlayer
    mapID = turnFight.mapID
    funcLineID = turnFight.funcLineID
    
    FBLogic.OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg)
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -918,7 +918,7 @@
HurtType_Fail,              # 失败 - 如概率没有触发 0
HurtType_Normal,            # 伤害 1
HurtTYpe_Cure,              # 治疗 2
HurtType_3,
HurtType_Revive,            # 复活 3
HurtType_Immune,            # 免疫 4
HurtType_Parry,             # 格挡 5
HurtType_IgnoreDef,         # 无视防御/真实伤害 6
@@ -3997,7 +3997,9 @@
TriggerWay_BeParry, # 被格挡时 37
TriggerWay_BeMiss, # 被闪避时 38
TriggerWay_BeAtkBack, # 被反击时 39
) = range(1, 1 + 39)
TriggerWay_InBattlefield, # 在场时 40
TriggerWay_Revive, # 复活时 41
) = range(1, 1 + 41)
# 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4029,6 +4031,7 @@
PassiveEff_AddAngerSkillPerByXP = 6018 # 增加怒气技能伤害(按消耗怒气值)
PassiveEff_AddBatDamPerByTagLostHP = 6019 # 战斗增伤(按目标已损失生命)
PassiveEff_AddSkillPerByBuffState = 6020 # 增加技能系数(验证由buff状态触发的)
PassiveEff_AddBuffLayer = 6021 # 添加buff层级时额外增加x层
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid]
@@ -4048,6 +4051,7 @@
SkillEff_UseSkillHarmSelf = 7008 # 释放技能时自残(先扣血)
SkillEff_SkillUseCntLimit = 7009 # 限制技能最多触发次数
SkillEff_UseSkillStealBuff = 7010 # 释放技能前偷取buff
SkillEff_ReviveNoUse = 7011 # 没有复活目标时释放其他技能
(
TriggerType_BeSuperHit, # 被暴击触发技能 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py
@@ -244,8 +244,9 @@
            GameWorld.DebugAnswer(curPlayer, "Buff: %s" % buffMgr.GetBuffCount())
            for index in range(buffMgr.GetBuffCount()):
                buff = buffMgr.GetBuffByIndex(index)
                GameWorld.DebugAnswer(curPlayer, "ID:%s,SkillID:%s,回合:%s,层:%s,V:%s,来源:%s,光环:%s"
                                      % (buff.GetBuffID(), buff.GetSkillID(), buff.GetRemainTime(), buff.GetLayer(),
                buffName = GameWorld.CodeToGbk(buff.GetSkillData().GetSkillName())
                GameWorld.DebugAnswer(curPlayer, "ID:%s,%s(%s),回合:%s,层:%s,V:%s,来源:%s,光环:%s"
                                      % (buff.GetBuffID(), buffName, buff.GetSkillID(), buff.GetRemainTime(), buff.GetLayer(),
                                         [buff.GetValue1(), buff.GetValue2(), buff.GetValue3()], buff.GetOwnerID(), buff.GetHaloObjIDList()
                                         ))
                
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
@@ -43,3 +43,7 @@
        TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, exSkillID, connBuff=connBuff)
            
    return True
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
    effSkill = effBuff.GetSkillData().GetIpyData()
    return DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
New file
@@ -0,0 +1,33 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5501
#
# @todo:触发释放技能(指定buff层级)
# @author hxp
# @date 2025-11-26
# @version 1.0
#
# 详细描述: 触发释放技能(指定buff层级)
#
#-------------------------------------------------------------------------------
#"""Version = 2025-11-26 20:30"""
#-------------------------------------------------------------------------------
import TurnSkill
import IpyGameDataPY
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
    setLayerCnt = curEffect.GetEffectValue(1) # 指定buff层级
    if not skillID:
        passiveSkill = effSkill
    else:
        passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
    if not passiveSkill:
        return
    effectID = curEffect.GetEffectID()
    effSkillID = effSkill.GetSkillID()
    return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID, connBuff, setLayerCnt=setLayerCnt)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py
New file
@@ -0,0 +1,31 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6021
#
# @todo:添加buff层级时额外增加x层
# @author hxp
# @date 2025-11-26
# @version 1.0
#
# 详细描述: 添加buff层级时额外增加x层
#
#-------------------------------------------------------------------------------
#"""Version = 2025-11-26 20:30"""
#-------------------------------------------------------------------------------
import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    onlyFirstUse = curEffect.GetEffectValue(1) # 是否仅首次释放技能有效
    if onlyFirstUse:
        skillID = connSkill.GetSkillID() if connSkill else skillkwargs.get("connSkillID", 0)
        if not skillID:
            #GameWorld.DebugLog("没有技能ID! %s" % skillkwargs)
            return
        useCnt = attacker.GetSkillUseCnt(skillID)
        if useCnt > 0:
            GameWorld.DebugLog("技能非首次使用不增加额外层级! skillID=%s,useCnt=%s" % (skillID, useCnt))
            return
    return curEffect.GetEffectValue(0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -78,7 +78,7 @@
    poolMgr.release(useSkill)
    return addBuff
def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, setLayerCnt=0):
def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, **kwargs):
    skillID = buffSkill.GetSkillID()
    bySkill = buffSkill.GetBySkill() if not bySkill else bySkill
    relatedSkillID = bySkill.GetSkillID() if bySkill else 0
@@ -114,6 +114,7 @@
    
    skillTypeID = buffSkill.GetSkillTypeID()
    buffRepeat = buffSkill.GetBuffRepeat()
    setLayerCnt = kwargs.get("setLayerCnt", 0)
    if setLayerCnt > 0:
        addLayerCnt = setLayerCnt
        GameWorld.DebugLog("外部直接指定添加的buff层级: setLayerCnt=%s" % setLayerCnt)
@@ -124,6 +125,7 @@
            # 可指定来源技能技能才生效,不指定的话默认生效
            if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID:
                addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
        addLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayer, buffSkill)
    maxLayerCnt = buffSkill.GetLayerMax()
    if maxLayerCnt:
        maxLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayerMax, buffSkill)
@@ -455,7 +457,7 @@
            effID = effect.GetEffectID()
            if effID not in ChConfig.AttrIDList:
                continue
            if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
            if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill]:
                # 技能时仅技能有效
                continue
            attrID = effID
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -45,7 +45,7 @@
    ## 是否无视防御
    return useSkill.GetHurtType() / 10 == 1 # 2为真伤,待扩展
def OnUseSkill(turnFight, curBatObj, useSkill, tagObjList=None, batType=ChConfig.TurnBattleType_Normal, bySkill=None, byBuff=None, comboLimit=False, atkBackTag=None):
def OnUseSkill(turnFight, curBatObj, useSkill, tagObjList=None, batType=ChConfig.TurnBattleType_Normal, bySkill=None, byBuff=None, comboLimit=False, atkBackTag=None, **kwargs):
    '''使用技能通用入口
    @param useSkill: 使用的技能,注意并不一定是身上的技能,可能只是 SkillData 表数据
    @param bySkill: 由哪个技能额外触发的,比如附加触发的技能或被动技能均可能由某个技能触发
@@ -92,6 +92,16 @@
    if not tagObjList:
        # 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
        GameWorld.DebugLog("找不到技能目标! skillID=%s,mapID=%s,funcLineID=%s" % (skillID, turnFight.mapID, turnFight.funcLineID), turnFight.playerID)
        if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive:
            otherEff = useSkill.GetEffectByID(ChConfig.SkillEff_ReviveNoUse)
            if otherEff:
                otherSkillID = otherEff.GetEffectValue(0)
                GameWorld.DebugLog("没有可复活的目标,释放其他技能! otherSkillID=%s" % otherSkillID)
                otherSkill = curBatObj.GetSkillManager().FindSkillByID(otherSkillID)
                if not otherSkill:
                    otherSkill = IpyGameDataPY.GetIpyGameData("Skill", otherSkillID)
                if otherSkill:
                    OnUseSkill(turnFight, curBatObj, otherSkill, None, batType, bySkill, byBuff, comboLimit, atkBackTag, **kwargs)
        return
    
    oneActionUseCnt = turnFight.GetOneActionUseSkillCnt(objID)
@@ -153,7 +163,7 @@
        
    #这个技能是Buff
    if SkillCommon.IsBuff(useSkill):
        __doAddBuff(turnFight, curBatObj, useSkill)
        __doAddBuff(turnFight, curBatObj, useSkill, **kwargs)
    else:
        __doUseSkill(turnFight, curBatObj, useSkill)
        
@@ -608,7 +618,7 @@
    #    return False
    return True
def __doAddBuff(turnFight, curBatObj, useSkill):
def __doAddBuff(turnFight, curBatObj, useSkill, **kwargs):
    #执行添加buff
    
    #光环技能,需先添加施法者
@@ -616,14 +626,14 @@
        curID = curBatObj.GetID()
        skillID = useSkill.GetSkillID()
        GameWorld.DebugLog("光环技能先给施法者添加光源buff! skillID=%s,ownerID=%s" % (skillID, curID))
        if TurnBuff.OnAddBuff(turnFight, curBatObj, useSkill, buffOwner=curBatObj):
        if TurnBuff.OnAddBuff(turnFight, curBatObj, useSkill, buffOwner=curBatObj, **kwargs):
            for tagBatObj in useSkill.GetTagObjList():
                if tagBatObj.GetID() == curBatObj.GetID():
                    continue
                TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj)
                TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj, **kwargs)
    else:
        for tagBatObj in useSkill.GetTagObjList():
            TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj)
            TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj, **kwargs)
        
    return
@@ -643,7 +653,7 @@
        SkillModule_2(turnFight, curBatObj, useSkill)
    # 复活
    elif atkType == 3:
        pass
        SkillModule_3(turnFight, curBatObj, useSkill)
    # 多次攻击(锁目标多次伤害,非前端的多段飘血)
    elif atkType == 4:
        pass
@@ -849,6 +859,27 @@
        
    return
def SkillModule_3(turnFight, curBatObj, useSkill):
    ## 复活
    skillPer = useSkill.GetSkillPer()
    for tagBatObj in useSkill.GetTagObjList():
        skillPer += GetAddSkillPer(turnFight, curBatObj, tagBatObj, useSkill) # 复活后的血量百分比
        dID = tagBatObj.GetID()
        dMapHP = tagBatObj.GetMaxHP()
        cureHP = int(dMapHP * skillPer / 10000.0)
        tagBatObj.SetRevive(cureHP)
        hurtObj = useSkill.AddHurtObj(dID)
        hurtObj.AddHurtType(ChConfig.HurtType_Revive)
        hurtObj.SetHurtHP(cureHP)
        hurtObj.SetLostHP(cureHP)
        hurtObj.SetCurHP(tagBatObj.GetHP())
        GameWorld.DebugLog("    复活: dID=%s,cureHP=%s,skillPer=%s,%s/%s" % (dID, cureHP, skillPer, tagBatObj.GetHP(), dMapHP))
    return
def DoSkillCureHP(turnFight, atkObj, curSkill, calcCureResults, lostType="", caorenProtectObj=None, isManyTimes=False):
    '''结算技能治疗
    @param calcCureResults: 技能公式计算后的伤害结果 [[tagBatObj, cureHP, poisonCureOwner], ...]
@@ -921,7 +952,7 @@
    defID = defObj.GetID()
    
    # 结算需要同步标签
    useTag = "Skill_%s_%s_Cot" % (atkID, skillID)
    useTag = "Skill_%s_%s_Cot_%s" % (atkID, skillID, atkObj.GetIncrementValue())
    Sync_TurnFightTag(turnFight, useTag, 0)
    
    dHP = defObj.GetHP()
@@ -1252,6 +1283,7 @@
    missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
    stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
    beHurtObjIDList = [] # 受伤的对象ID列表
    reviveObjList = [] # 复活的对象列表
    for hurtObj in useSkill.GetHurtObjListAll():
        hurtObjID = hurtObj.GetObjID()
        tagObj = batObjMgr.getBatObj(hurtObjID)
@@ -1272,6 +1304,10 @@
                missObjIDList.append(hurtObjID)
            DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Miss, relatedSkillID)
            
        if hurtObj.HaveHurtType(ChConfig.HurtType_Revive):
            if tagObj not in reviveObjList:
                reviveObjList.append(tagObj)
        if hurtObj.HaveHurtType(ChConfig.HurtType_Immune):
            if hurtObjID not in immuneObjIDList:
                immuneObjIDList.append(hurtObjID)
@@ -1345,12 +1381,23 @@
                        # 己方单位死亡时
                        else:
                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill)
    # 复活时
    for tagObj in reviveObjList:
        TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Revive, curObj, connSkill=useSkill)
        TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_InBattlefield, curObj, connSkill=useSkill)
    triggerOne = False
    batType = useSkill.GetBatType()
    isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
    for tagObj in tagObjListAll:
        tagID = tagObj.GetID()
        # 闪避
        if tagID in missObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
        if tagID in effIgnoreObjIDList:
            continue
        
@@ -1397,14 +1444,9 @@
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
            
        # 格挡
        if tagID in missObjIDList:
        if tagID in parryObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
        # 闪避
        if tagID in missObjIDList:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
            
        # 连击
        if batType == ChConfig.TurnBattleType_Combo:
@@ -1643,7 +1685,7 @@
    OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
    return
def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None):
def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None, **kwargs):
    '''被动触发使用技能
    @param passiveSkill: 释放的被动技能 或 技能ID
    @param connSkill: 由什么技能引起的
@@ -1684,17 +1726,17 @@
        if not tagObj:
            return
        tagID = tagObj.GetID()
        if not tagObj.IsAlive():
        if not tagObj.IsAlive() and passiveSkill.GetSkillType() != ChConfig.Def_SkillType_Revive:
            GameWorld.DebugLog("    已被击杀不触发: tagID=%s" % (tagID))
            return
        if happenRate 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, byBuff=connBuff)
        isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
    else:
        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)
        isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
        
    return isOK
@@ -2577,7 +2619,7 @@
    defID = defObj.GetID()
    
    # 结算需要同步标签
    useTag = "Skill_%s_%s_Dot" % (atkID, skillID)
    useTag = "Skill_%s_%s_Dot_%s" % (atkID, skillID, atkObj.GetIncrementValue())
    Sync_TurnFightTag(turnFight, useTag, 0)
    
    dHP = defObj.GetHP()