From 5f9bb5660f4a62ed7a30767a23d565fd9c152e2a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 十二月 2025 20:38:01 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(关羽全部技能; 优化技能冷却时间字段对触发被动效果的技能也有效;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5012.py |    2 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |    6 ++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py                    |   17 ++++++++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   12 ++++++++++--
 4 files changed, 31 insertions(+), 6 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 a65e3e0..ae30896 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -348,6 +348,7 @@
         self._ipyData = ipyData
         self._skillID = self._ipyData.GetSkillID()
         self._skillTypeID = self._ipyData.GetSkillTypeID()
+        self._cdTime = self._ipyData.GetCoolDownTime()
         self._effList = [] # [Effect, ...]
         self._effDict = {} # {(effID, triggerWay):Effect, ...} ,确保唯一,同个技能可能配置相同的效果ID
         for num in range(1, 1 + 3):
@@ -393,7 +394,7 @@
             return self._effDict[(effID, triggerWay)]
     def GetConnSkill(self): return self._ipyData.GetConnSkill()
     def GetCoolDownInit(self): return self._ipyData.GetCoolDownInit()
-    def GetCoolDownTime(self): return self._ipyData.GetCoolDownTime()
+    def GetCoolDownTime(self): return self._cdTime
     def GetBuffStateLimit(self): return self._ipyData.GetBuffStateLimit()
     def GetCurBuffState(self): return self._ipyData.GetCurBuffState()
     def GetLastTime(self): return self._ipyData.GetLastTime() # 持续时间
@@ -645,6 +646,7 @@
         self._skillData = SklllData(ipyData)
         self._skillID = self._skillData.GetSkillID()
         self._skillTypeID = self._skillData.GetSkillTypeID()
+        self._cdTime = self._skillData.GetCoolDownTime()
         self._remainTime = 0
         self._batType = 0 # 战斗类型,普通、连击、反击、追击等
         self._tagObjList = [] # 本次技能主要目标列表 [BatObj, ...]
@@ -712,7 +714,7 @@
     def GetEffectByID(self, effID, triggerWay=0): return self._skillData.GetEffectByID(effID, triggerWay)
     def GetConnSkill(self): return self._skillData.GetConnSkill()
     def GetCoolDownInit(self): return self._skillData.GetCoolDownInit()
-    def GetCoolDownTime(self): return self._skillData.GetCoolDownTime()
+    def GetCoolDownTime(self): return self._cdTime
     def GetBuffStateLimit(self): return self._skillData.GetBuffStateLimit()
     def GetCurBuffState(self): return self._skillData.GetCurBuffState()
     def GetLastTime(self): return self._skillData.GetLastTime() # 持续时间
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5012.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5012.py
index 7e30a7d..ebb2e75 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5012.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5012.py
@@ -32,7 +32,7 @@
         passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
     if not passiveSkill:
         return
-    return TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Pursue, bySkill=connSkill, byBuff=connBuff)
+    return TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Pursue, bySkill=connSkill, byBuff=connBuff, **kwargs)
 
 def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
     effSkill = effBuff.GetSkillData().GetIpyData()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index dacd25b..3dd3612 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -82,6 +82,12 @@
     if not effSkill:
         return
     
+    if effSkill.GetCoolDownTime():
+        if hasattr(effSkill, "GetRemainTime") and effSkill.GetRemainTime() > 0:
+            GameWorld.DebugLogEx("被动效果技能CD中! effSkillID=%s,RemainTime=%s", skillID, effSkill.GetRemainTime())
+            return
+        kwargs["byEffSkill"] = effSkill # 目前用于触发被动技能时,该效果技能提前先设置CD,防止嵌套触发时CD后置才设置,如关羽的怒技追击
+        
     kwargs["byTriggerWay"] = triggerWay
     for effID in effIDList:
         curEffect = effSkill.GetEffectByID(effID, triggerWay)
@@ -99,7 +105,16 @@
     callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoSkillEffectLogic"))
     if not callFunc:
         return
-    callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
+    isOK = callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
+    if not isOK:
+        return
+    
+    cdTime = effSkill.GetCoolDownTime()
+    if cdTime:
+        # 非触发技能的在后面设置CD即可
+        if hasattr(effSkill, "GetRemainTime"):
+            effSkill.SetRemainTime(cdTime)
+            
     return
 
 def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None, connBuff=None, **kwargs):
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 669af57..e031d89 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -179,7 +179,7 @@
     else:
         __doUseSkill(turnFight, curBatObj, useSkill)
         
-    DoAttackResult(turnFight, curBatObj, useSkill)
+    DoAttackResult(turnFight, curBatObj, useSkill, **kwargs)
     
     if useTag:
         Sync_TurnFightTag(turnFight, useTag, 1)
@@ -1123,7 +1123,7 @@
         
     return
 
-def DoAttackResult(turnFight, curBatObj, useSkill):
+def DoAttackResult(turnFight, curBatObj, useSkill, **kwargs):
     '''执行攻击结果
     @param curBatObj: 施法方或buff归属方
     '''
@@ -1140,6 +1140,14 @@
     if useSkill.GetCoolDownTime():
         useSkill.SetRemainTime(useSkill.GetCoolDownTime())
         
+    if "byEffSkill" in kwargs:
+        byEffSkill = kwargs["byEffSkill"]
+        cdTime = byEffSkill.GetCoolDownTime()
+        if cdTime:
+            if hasattr(byEffSkill, "GetRemainTime"):
+                byEffSkill.SetRemainTime(cdTime)
+                GameWorld.DebugLogEx("提前设置效果技能触发后CD,防止嵌套循环触发! effSkillID=%s,cdTime=%s", byEffSkill.GetSkillID(), cdTime)
+                
     __doCostZhanchui(turnFight, curBatObj, useSkill) # 先扣除再同步技能
     
     # 需先技能使用 - 前端按顺序优先表现技能释放内容,前端需要动作或有伤血则通知

--
Gitblit v1.8.0