From c26f44a3d2d8debf560f46fb09e23761516ab7b4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 28 十月 2025 16:36:28 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(王元姬、张宝技能;增加释放方式5-弹射攻击,9-弹射治疗,1002-持续治疗;增加效果6015-增加弹射次数;效果7004-随机弹射次数;效果5005-按类型清除buff;增加技能类型15-清除净化buff类;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |   53 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 39 insertions(+), 14 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 4e4123c..786b64f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -459,6 +459,7 @@
     ## 回合战斗管理器
     
     def __init__(self):
+        self.lastRequestTick = 0
         self.turnFightDict = {} # {guid:TurnFight, ...}
         return
     
@@ -546,8 +547,8 @@
     ## 获取玩家阵容
     olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
     lineup = olPlayer.GetLineup(lineupID)
-    if not lineup.lineupHeroDict:
-        # 为空时默认取主阵容
+    if lineup.IsEmpty():
+        GameWorld.DebugLog("玩家没有目标阵容默认取主阵容! lineupID=%s" % lineupID)
         lineup = olPlayer.GetLineup(ShareDefine.Lineup_Main)
     return lineup
 
@@ -558,12 +559,12 @@
     
     playerID = curPlayer.GetPlayerID()
     lineup = GetPlayerLineup(curPlayer, lineupID)
-    if not lineup.lineupHeroDict:
+    if lineup.IsEmpty():
         return {}
     
     heroDict = {}
     curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
-    for posNum in lineup.lineupHeroDict.keys():
+    for posNum in lineup.GetPosNumList():
         hero = lineup.GetLineupHero(posNum)
         heroID = hero.heroID
         itemIndex = hero.itemIndex
@@ -864,6 +865,30 @@
         
     return
 
+def CheckFightCD(curPlayer, tick, selfKey):
+    ## 是否战斗请求CD中
+    
+    # 所有玩家公共CD,待扩展
+    tfMgr = GetTurnFightMgr()
+    pubCD = IpyGameDataPY.GetFuncCfg("TurnFightCD", 1)
+    if pubCD:
+        if tfMgr.lastRequestTick and tick - tfMgr.lastRequestTick <= pubCD:
+            GameWorld.DebugLog("回合制战斗请求服务器公共CD中!")
+            PlayerControl.NotifyCode(curPlayer, "BattleCoolDown")
+            return True
+        
+    # 个人CD
+    selfCD = IpyGameDataPY.GetFuncCfg("TurnFightCD", 2)
+    lastTick = curPlayer.GetDictByKey(selfKey)
+    if selfCD and lastTick and tick - lastTick <= selfCD:
+        GameWorld.DebugLog("回合制战斗请求CD中: %s" % selfKey)
+        PlayerControl.NotifyCode(curPlayer, "BattleCoolDown")
+        return True
+    
+    tfMgr.lastRequestTick = tick
+    curPlayer.SetDict(selfKey, tick)
+    return False
+
 #// B4 10 回合制战斗 #tagCMTurnFight
 #
 #struct    tagCMTurnFight
@@ -886,8 +911,13 @@
     tagID = clientData.TagID
     valueList = clientData.ValueList
     
-    GameWorld.DebugLog("回合制战斗请求: mapID=%s,funcLineID=%s,tagType=%s,tagID=%s,valueList=%s" 
+    GameWorld.DebugLog("----- 回合制战斗请求: mapID=%s,funcLineID=%s,tagType=%s,tagID=%s,valueList=%s" 
                        % (mapID, funcLineID, tagType, tagID, valueList), curPlayer.GetPlayerID())
+    
+    reqRet = FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
+    if not reqRet:
+        return
+    funcLineID = reqRet[1] if len(reqRet) > 1 else funcLineID
     
     fbIpyData = FBCommon.GetFBIpyData(mapID)
     fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID, False)
@@ -898,13 +928,12 @@
         if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, funcLineID, fbIpyData, fbLineIpyData) != ShareDefine.EntFBAskRet_OK:
             return
         
-    reqRet = FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
-    if not reqRet:
-        return
-    
     # 攻防方所使用的阵容ID
     atkLineupID, defLineupID = FBLogic.GetFBPlayerLineupID(curPlayer, mapID, funcLineID)
     if atkLineupID not in ShareDefine.LineupList or defLineupID not in ShareDefine.LineupList:
+        return
+    
+    if CheckFightCD(curPlayer, tick, "TurnFightReqTick"):
         return
     
     # 玩家
@@ -1153,12 +1182,8 @@
     
     # 限制请求CD
     if tick:
-        key = "MainFightReqTick"
-        lastTick = curPlayer.GetDictByKey(key)
-        if lastTick and tick - lastTick <= 1000:
-            GameWorld.DebugLog("主线战斗请求CD中")
+        if CheckFightCD(curPlayer, tick, "MainFightReqTick"):
             return
-        curPlayer.SetDict(key, tick)
         
     mainFightMgr = GetMainFightMgr(curPlayer)
     turnFight = mainFightMgr.turnFight

--
Gitblit v1.8.0