From e4125f3649b63d5602f06b4d0268463f08bff5fe Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 22 十二月 2025 19:50:48 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(修复反弹伤害攻防双方关系错误bug;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |   22 +++++++++++++++++-----
 1 files changed, 17 insertions(+), 5 deletions(-)

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 2d1b1bd..eb1b7c0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -138,6 +138,11 @@
             deadCnt += 1
         return deadCnt
     
+    def getHeroObj(self, heroID):
+        if heroID not in self.heroObjIDDict:
+            return
+        return BattleObj.GetBatObjMgr().getBatObj(self.heroObjIDDict[heroID])
+    
 class BatFaction():
     ## 战斗阵营
     
@@ -1711,7 +1716,7 @@
             batObj.SetTiming(ChConfig.TurnTiming_Before) # 重置时机到回合前
             if turnNum > 1: # 第1回合不用刷新技能
                 RefreshObjSkillByBigTurn(batObj)
-                RefreshObjByBigTurn(turnFight, batObj)
+                RefreshObjByBigTurn(turnFight, batObj, turnNum)
             batObj.ResetBigTurn() # 每大回合重置
             
             if not batObj.IsAlive():
@@ -1813,7 +1818,7 @@
         GameWorld.DebugLogEx("    更新技能CD: curID=%s,skillID=%s,remainTime=%s", curID, skillID, remainTime)
     return
 
-def RefreshObjByBigTurn(turnFight, batObj):
+def RefreshObjByBigTurn(turnFight, batObj, turnNum):
     ## 根据大回合开始刷新buff持续时间,每个大回合-1,第1回合不处理
     curID = batObj.GetID()
     buffMgr = batObj.GetBuffManager()
@@ -1824,7 +1829,7 @@
         skillData = buff.GetSkillData()
         lastType = skillData.GetLastTimeType()
         
-        if lastType not in [ChConfig.BuffLastTimeType_BigTurn, ChConfig.BuffLastTimeType_BigTurnLayer]:
+        if lastType not in [ChConfig.BuffLastTimeType_BigTurn, ChConfig.BuffLastTimeType_BigTurnLayer, ChConfig.BuffLastTimeType_BigTurnLimit]:
             continue
         
         if skillData.GetSkillType() in ChConfig.Def_LstBuff_List:
@@ -1835,12 +1840,17 @@
             continue
         
         # 每大回合固定减1回合
-        if lastType == ChConfig.BuffLastTimeType_BigTurn:
+        if lastType in [ChConfig.BuffLastTimeType_BigTurn, ChConfig.BuffLastTimeType_BigTurnLimit]:
             remainTime = buff.GetRemainTime()
             if remainTime <= 0:
                 continue
             remainTime -= 1
             GameWorld.DebugLogEx("    更新buff回合: curID=%s,buffID=%s,skillID=%s,remainTime=%s", curID, buffID, skillID, remainTime)
+            if lastType == ChConfig.BuffLastTimeType_BigTurnLimit and remainTime > 0:
+                lastTurnMax = skillData.GetLastTime()
+                if lastTurnMax and turnNum > lastTurnMax:
+                    remainTime = 0
+                    GameWorld.DebugLogEx("        超过最大限制回合数,强制清除!: curID=%s,buffID=%s,skillID=%s,remainTime=%s", curID, buffID, skillID, remainTime)
             TurnBuff.SetBuffRemainTime(turnFight, batObj, buff, remainTime)
             
         # 每大回合固定减1层
@@ -1863,6 +1873,8 @@
     buffMgr = batObj.GetBuffManager()
     for index in range(buffMgr.GetBuffCount())[::-1]:
         buff = buffMgr.GetBuffByIndex(index)
+        if not buff: # 有出现过报错,先做下防范,理论上不太可能
+            continue
         buffID = buff.GetBuffID()
         skillID = buff.GetSkillID()
         skillData = buff.GetSkillData()
@@ -2028,7 +2040,7 @@
     killerObjID = killer.GetID() if killer else 0
     skillID = useSkill.GetSkillID() if useSkill else 0
     GameWorld.DebugLogEx("        %s 回合战斗主体被击杀: curID=%s,killerObjID=%s,skillID=%s", GetObjName(gameObj), objID, killerObjID, skillID)
-    gameObj.SetDead()
+    gameObj.SetDead(killer)
     TurnBuff.DoBuffByDead(turnFight, gameObj)
     
     clientPack = ChPyNetSendPack.tagMCTurnFightObjDead()

--
Gitblit v1.8.0