From 2bcc092eaf3d04df4934b6493847086929f988a0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 17 十一月 2025 15:21:42 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(增加每大回合每武将最大反击次数限制;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py  |   11 +++++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |    4 +---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py   |   12 ++++++++++--
 3 files changed, 20 insertions(+), 7 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 32ab297..ae5284a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -832,6 +832,7 @@
         self._batAttrDict = {} # 实际战斗属性,包含buff层级的实际属性 {attrID:+-value, ...} value可能是负值
         self._skillTempAttrDict = {} # 某次技能释放中临时的属性增减 {attrID:+-value, ...} value可能是负值
         self._kvDict = {} # 自定义kv字典
+        self._bigTurnAtkbackCnt = 0 # 大回合累计反击次数
         self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
         self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
         self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
@@ -1063,8 +1064,6 @@
     
     def GetSkillUseCnt(self, skillID): return self._skillUseCntDict.get(skillID, 0) # 单场战斗累计使用次数
     def GetSkillTurnUseCnt(self, skillID): return self._skillTurnUseCntDict.get(skillID, 0) # 单回合累计使用次数
-    def ResetSkillTurnUseCnt(self):
-        self._skillTurnUseCntDict = {}
     def ResetSkillUseCnt(self):
         self._skillUseCntDict = {}
         self._skillTurnUseCntDict = {}
@@ -1072,6 +1071,14 @@
         self._skillUseCntDict[skillID] = self._skillUseCntDict.get(skillID, 0) + 1
         self._skillTurnUseCntDict[skillID] = self._skillTurnUseCntDict.get(skillID, 0) + 1
         
+    def GetBigTurnAtkbackCnt(self): return self._bigTurnAtkbackCnt
+    def AddBigTurnAtkbackCnt(self):  self._bigTurnAtkbackCnt += 1
+    
+    def ResetBigTurn(self):
+        ## 每大回合重置
+        self._bigTurnAtkbackCnt = 0
+        self._skillTurnUseCntDict = {}
+    
     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 3e741e5..1108741 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -1574,7 +1574,7 @@
             if turnNum > 1: # 第1回合不用刷新技能
                 RefreshObjSkillByBigTurn(batObj)
                 RefreshObjByBigTurn(turnFight, batObj)
-                
+            batObj.ResetBigTurn() # 每大回合重置
             TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
             
     return
@@ -1669,8 +1669,6 @@
         remainTime -= 1
         curSkill.SetRemainTime(remainTime)
         GameWorld.DebugLog("    更新技能CD: curID=%s,skillID=%s,remainTime=%s" % (curID, skillID, remainTime))
-        
-    batObj.ResetSkillTurnUseCnt() # 重置回合使用次数,放刷新CD后重置
     return
 
 def RefreshObjByBigTurn(turnFight, batObj):
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 e45adbd..70c820a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -998,6 +998,8 @@
         if curBatObj.GetHP() < 0:
             curBatObj.SetHP(0)
             
+    if useSkill.GetBatType() == ChConfig.TurnBattleType_AtkBack:
+        curBatObj.AddBigTurnAtkbackCnt()
     skillID = useSkill.GetSkillID()
     curBatObj.AddSkillUseCnt(skillID)
     if useSkill.GetCoolDownTime():
@@ -1099,8 +1101,6 @@
         #GameWorld.DebugLog("同阵营不触发反击!") # 魅惑可能导致打自己人
         return
     
-    # 大回合单武将反击次数限制
-    
     canAtkbackDictTypeList = IpyGameDataPY.GetFuncEvalCfg("ParryCfg", 2)
     if atkObj.GetAtkDistType() not in canAtkbackDictTypeList:
         heroID = atkObj.GetHeroID()
@@ -1119,6 +1119,14 @@
         GameWorld.DebugLog("没有格挡不可反击! tagID=%s" % tagID)
         return
     
+    # 大回合单武将反击次数限制
+    bigTurnAtkbackCntMax = IpyGameDataPY.GetFuncCfg("ParryCfg", 4)
+    if bigTurnAtkbackCntMax:
+        atkbackCnt = tagObj.GetBigTurnAtkbackCnt()
+        if atkbackCnt >= bigTurnAtkbackCntMax:
+            GameWorld.DebugLog("本大回合累计反击次数达上限! atkbackCnt=%s >= %s" % (atkbackCnt, bigTurnAtkbackCntMax))
+            return
+        
     skillManager = tagObj.GetSkillManager()
     for index in range(0, skillManager.GetSkillCount()):
         useSkill = skillManager.GetSkillByIndex(index)

--
Gitblit v1.8.0