From abe94831e0fe835f9cc83611695a35f46ebcae7b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 26 十一月 2025 20:34:07 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(蔡文姬所有技能;增加复活释放方式支持;增加触发方式40-在场时,41-复活时;增加效果5501、6021、7011;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py |   31 +++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py                       |    6 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |    9 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py |   33 ++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py                    |    9 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py                |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   82 +++++++++++++++-----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |    8 +
 9 files changed, 158 insertions(+), 29 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 5e7ae6c..89f5f9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/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
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index a6ac5ed..fb773af 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/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)
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 368e745..80618ed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py
index 9458607..e23483b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py
+++ b/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()
                                          ))
                 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
index aef81a4..9168eeb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
+++ b/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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
new file mode 100644
index 0000000..61d768a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
@@ -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)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py
new file mode 100644
index 0000000..f9f7a3a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py
@@ -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)
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 38074fd..ce8d2c3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/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
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 5323c9b..824d3d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/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()

--
Gitblit v1.8.0