From a9415978e2c4b94debfb59787771e1434a1adf19 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 四月 2024 13:58:44 +0800
Subject: [PATCH] 10130 【后端】福地争夺资源功能(增加摇人功能)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |   90 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 75 insertions(+), 15 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 a8caea7..4eb4384 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -35,6 +35,7 @@
 import FBCommon
 import ItemControler
 import PassiveBuffEffMng
+import FBLogic
 
 # 回合战斗流程状态
 (
@@ -69,13 +70,60 @@
 #    tagHead        Head;
 #    DWORD        MapID;    // 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等)
 #    WORD        FuncLineID;
-#    DWORD        PlayerID;    // 对应玩家ID,可为0,某些功能可能有用,如竞技场
+#    DWORD        PlayerID;    // 战斗目标玩家ID,可为0,某些功能可能有用,如竞技场
+#    BYTE        ValueCount;
+#    DWORD        ValueList[ValueCount]; // 附加值列表,可选,具体含义由MapID决定
 #};
 def OnTurnFight(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     mapID = clientData.MapID
     funcLineID = clientData.FuncLineID
     tagPlayerID = clientData.PlayerID
+    valueList = clientData.ValueList
+    
+    playerID = curPlayer.GetPlayerID()
+    if tagPlayerID:
+        if playerID == tagPlayerID:
+            GameWorld.DebugLog("不能打自己!", playerID)
+            return
+        
+    if not FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
+        return
+    
+    # 需要发送到GameServer验证
+    if mapID in ChConfig.Def_TFMapID_SendToGameServer:
+        SendToGameServer_TurnFight(curPlayer, "TurnFightRequest", [mapID, funcLineID, tagPlayerID, valueList])
+        return
+    
+    DoTurnFightProcess(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick)
+    return
+
+def SendToGameServer_TurnFight(curPlayer, msgType, dataMsg=""):
+    playerID = curPlayer.GetPlayerID()
+    msgList = str([msgType, dataMsg])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "TurnFight", msgList, len(msgList))
+    GameWorld.Log("回合战斗发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
+    return
+
+def GameServer_TurnFight_DoResult(curPlayer, msgData, tick):
+    
+    msgType, dataMsg, ret = msgData
+    
+    if not ret:
+        return
+    
+    if msgType == "TurnFightRequest":
+        mapID, funcLineID, tagPlayerID, valueList = dataMsg
+        DoTurnFightProcess(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick)
+        
+    elif msgType == "TurnFightOver":
+        mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList = dataMsg
+        FBLogic.OnTurnFightOver_GameServerRet(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList, ret)
+        
+    return
+
+def DoTurnFightProcess(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick):
+    ## 执行回合制战斗的完整流程
     
     if curPlayer.GetSightLevel() != curPlayer.GetID():
         PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
@@ -83,23 +131,23 @@
     SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Start)
     
     if tagPlayerID:
-        PlayerViewCacheTube.GetPlayerPropDataCall(curPlayer, tagPlayerID, DoTrunFightVSPlayer, [mapID, funcLineID], True)
+        PlayerViewCacheTube.GetPlayerPropDataCall(curPlayer, tagPlayerID, DoTrunFightVSPlayer, [mapID, funcLineID, valueList], True)
         return
     
-    DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick)
+    DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick)
     
     SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Over)
     return
 
 def DoTrunFightVSPlayer(curPlayer, tagPlayerID, callData, PropDict):
-    mapID, funcLineID = callData
+    mapID, funcLineID, valueList = callData
     if PropDict and curPlayer.GetPlayerID() != tagPlayerID:
         tick = GameWorld.GetGameWorld().GetTick()
-        DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick)
+        DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick)
     SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Over)
     return
 
-def DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick):
+def DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick):
     playerID = curPlayer.GetPlayerID()
     factionInfoA = GetPlayerFactionInfoByCache(playerID)
     ipyData = None
@@ -121,20 +169,32 @@
         skillIDExList.extend(ipyData.GetSTSkillIDList())
         factionInfoB = {"npcID":npcID, "pet":petCacheInfo, "skillIDExList":skillIDExList}
         
-    ret = ProcessAutoTurnFight(mapID, funcLineID, factionInfoA, factionInfoB, tick, curPlayer)
-    if not ret:
+    fightRet = ProcessAutoTurnFight(mapID, funcLineID, factionInfoA, factionInfoB, tick, curPlayer)
+    if not fightRet:
         return
-    isWin, turnNum, turnMax, factionTotalHurtDict, playbackID = ret
+    isWin, turnNum, turnMax, factionTotalHurtDict, playbackID = fightRet
     
-    # 结算奖励...待扩展
-    awardItemList = []
+    # 结算奖励, awardWay-发放方式(0-不发放, 1-TurnAttack模块统一发放, 2-功能自己决定发放逻辑)
+    needSendGameServer, awardItemList, awardWay = False, [], 1
+    overRet = FBLogic.OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet)
+    if overRet != None:
+        needSendGameServer, awardItemList, awardWay = overRet
+        
     if isWin and ipyData:
-        # 山寨测试先默认都是首次奖励,正式后需删除
-        awardItemList = ipyData.GetAwardItemListFirst()
+        if awardWay == 1 and not awardItemList:
+            # 山寨测试先默认都是首次奖励,正式后需删除
+            awardItemList = ipyData.GetAwardItemListFirst()
+            
+    if awardItemList == None:
+        awardItemList = []
         
     GameWorld.DebugLog("奖励物品: %s" % awardItemList)
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}])
-    
+    if awardWay == 1 and awardItemList:
+        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}])
+        
+    if needSendGameServer or mapID in ChConfig.Def_TFMapID_SendToGameServer:
+        SendToGameServer_TurnFight(curPlayer, "TurnFightOver", [mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList])
+        
     overMsg = {"isWin":isWin, "itemInfo":FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
     playbackID and overMsg.update({"playbackID":playbackID})
     SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Award, turnNum, turnMax, overMsg)

--
Gitblit v1.8.0