From 861e1ad98f9e8d56f3d97691eac02da1e900eb1c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 13 五月 2024 16:08:28 +0800
Subject: [PATCH] 10156 副本功能玩法关联回合战斗表现(竞技场战斗改为回合制,功能玩法不变,配置不变;)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py                                       |   91 +++++++++++---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTurnFight.py                                              |   10 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                                |   21 +++
 ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py                                                            |    7 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py                             |  109 +++++++++--------
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                                     |   21 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ArenaBattle.py |   64 +++++++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                       |    2 
 8 files changed, 227 insertions(+), 98 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index e41ded3..418be3e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -705,6 +705,8 @@
 Def_FBMapID_CrossGrasslandXian = 32050
 #跨服战场
 Def_FBMapID_CrossBattlefield = 32060
+#竞技场战斗
+Def_FBMapID_ArenaBattle = 31290
 #情缘副本
 Def_FBMapID_Love = 31300
 
@@ -736,6 +738,11 @@
 #需要统计副本功能线路ID人数的跨服地图
 Def_NeedCountFBFuncLinePlayerCrossMap = [Def_FBMapID_CrossDemonKing]
 
+# 回合战斗目标类型
+TurnBattle_TagType_NPC = 0
+TurnBattle_TagType_Player = 1
+TurnBattle_TagType_Team = 2
+
 #同系职业枚举
 JOB_TYPY_COUNT = 5
 (
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 80034f6..f9203f8 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -2651,6 +2651,7 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    Face = 0    #(DWORD Face)//基本脸型
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
@@ -2670,6 +2671,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -2685,6 +2687,7 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
@@ -2701,6 +2704,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
 
         return length
 
@@ -2712,6 +2716,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
@@ -2725,6 +2730,7 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Score:%d
@@ -2736,6 +2742,7 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Score
@@ -2756,6 +2763,7 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    Face = 0    #(DWORD Face)//基本脸型
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
@@ -2776,6 +2784,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -2791,6 +2800,7 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
@@ -2810,6 +2820,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
         length += 1
         length += len(self.AddScore)
         length += 1
@@ -2824,6 +2835,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
@@ -2840,6 +2852,7 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Score:%d,
@@ -2854,6 +2867,7 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Score,
@@ -2940,6 +2954,7 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    Face = 0    #(DWORD Face)//基本脸型
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
@@ -2956,6 +2971,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -2967,6 +2983,7 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
@@ -2982,6 +2999,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
 
         return length
 
@@ -2992,6 +3010,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
@@ -3004,6 +3023,7 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Score:%d
@@ -3014,6 +3034,7 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Score
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
index b1c451b..1ea70bf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
@@ -29,6 +29,7 @@
 import NetPackCommon
 import IpyGameDataPY
 import PyGameData
+import ChConfig
 
 import random
 import time
@@ -590,6 +591,43 @@
     GameWorld.Log("    奖励保底玩家信息: %s" % floorPlayerIDList)
     return
 
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+    playerID = curPlayer.GetPlayerID()
+    if not valueList or len(valueList) < 1:
+        GameWorld.DebugLog("没有指定valueList!", playerID)
+        return
+    tagPlayerID = valueList[0]
+    
+    isFindTag, tagLV, tagJob, tagScore = __findBattleTag(playerID, tagPlayerID)
+    if not isFindTag:
+        GameWorld.ErrLog("找不到对战对手,不在匹配列表或对战记录里!不能战斗!tagPlayerID=%s" % tagPlayerID, playerID)
+        return
+    
+    if tagPlayerID <= MaxRobotID:
+        #验证NPCID是否正确
+        if tagType != ChConfig.TurnBattle_TagType_NPC:
+            GameWorld.ErrLog("竞技场请求回合战斗目标为机器人时tagType错误! tagType=%s != %s" 
+                             % (tagType, ChConfig.TurnBattle_TagType_NPC), playerID)
+            return
+        robotLVNPCIDDict = IpyGameDataPY.GetFuncEvalCfg("ArenaRobotLVNPC", 1, {})
+        lvList = [int(lvStr) for lvStr in robotLVNPCIDDict.keys()]
+        lvList.sort()
+        tagLVStr = ""
+        for lv in lvList:
+            if tagLV <= lv:
+                tagLVStr = str(lv)
+                break
+        if tagLVStr not in robotLVNPCIDDict:
+            GameWorld.ErrLog("竞技场找不到该等级机器人对应的回合战斗NPCID! tagPlayerID=%s,tagLV=%s" % (tagPlayerID, tagLV), playerID)
+            return
+        npcID = robotLVNPCIDDict[tagLVStr]
+        if npcID != tagID:
+            GameWorld.ErrLog("竞技场请求回合战斗的机器人等级对应的NPCID不一致! tagPlayerID=%s,tagLV=%s,tagID=%s != npcID=%s" 
+                             % (tagPlayerID, tagLV, tagID, npcID), playerID)
+            return
+        
+    return True
+
 def MapServer_Arena(curPlayer, msgList):
     GameWorld.DebugLog("MapServer_Arena %s" % str(msgList), curPlayer.GetPlayerID())
     if not msgList:
@@ -846,6 +884,7 @@
                 matchInfo.RealmLV = cacheDict["RealmLV"]
                 matchInfo.FightPower = fightPower % ShareDefine.Def_PerPointValue
                 matchInfo.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
+                matchInfo.Face = cacheDict.get("Face", 0)
         else:
             # 此处机器人的暂忽略等级变化的同步,仅在刷新、更新积分时同步,此处省略查询机器人所属榜单排名
             pass
@@ -854,6 +893,33 @@
     clientPack.MatchCount = len(clientPack.MatchList)
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
+
+def __findBattleTag(playerID, tagPlayerID):
+    ## 检查查找要战斗的对象是否合法
+    
+    isFindTag = False
+    tagLV, tagJob, tagScore = 0, 0, 0
+        
+    # 先找匹配列表
+    matchList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
+    for matchPlayer in matchList:
+        if matchPlayer.tagPlayerID == tagPlayerID:
+            isFindTag = True
+            tagLV, tagJob, tagScore = matchPlayer.tagLV, matchPlayer.tagJob, matchPlayer.tagScore
+            GameWorld.DebugLog("    对手在匹配列表中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
+            break
+        
+    # 在找对战记录列表
+    curBattleRecList = GetPlayerArenaBattleRecList(playerID)
+    if not isFindTag:
+        for battleRec in curBattleRecList:
+            if battleRec.tagPlayerID == tagPlayerID:
+                isFindTag = True
+                tagLV, tagJob, tagScore = battleRec.tagLV, battleRec.tagJob, battleRec.tagScore
+                GameWorld.DebugLog("    对手在对战记录中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
+                break
+            
+    return isFindTag, tagLV, tagJob, tagScore
 
 def __DoArenaBattleResult(curPlayer, cmdDict):
     ## 地图玩家同步战斗结果
@@ -884,33 +950,14 @@
     '''
    
     curScore = playerScore
-    isFindTag = False
-    tagLV, tagJob, tagScore = 0, 0, 0
     tagRealmLV, tagFightPower, tagAccID = 0, 0, "" # 机器人无值
     
-    # 先找匹配列表
-    matchList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
-    for matchPlayer in matchList:
-        if matchPlayer.tagPlayerID == tagPlayerID:
-            isFindTag = True
-            tagLV, tagJob, tagScore = matchPlayer.tagLV, matchPlayer.tagJob, matchPlayer.tagScore
-            GameWorld.DebugLog("    对手在匹配列表中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
-            break
-        
-    # 在找对战记录列表
-    curBattleRecList = GetPlayerArenaBattleRecList(playerID)
-    if not isFindTag:
-        for battleRec in curBattleRecList:
-            if battleRec.tagPlayerID == tagPlayerID:
-                isFindTag = True
-                tagLV, tagJob, tagScore = battleRec.tagLV, battleRec.tagJob, battleRec.tagScore
-                GameWorld.DebugLog("    对手在对战记录中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
-                break
-            
+    isFindTag, tagLV, tagJob, tagScore = __findBattleTag(playerID, tagPlayerID)
     if not isFindTag:
         GameWorld.ErrLog("找不到对战对手,不在匹配列表或对战记录里!不处理结算!tagPlayerID=%s" % tagPlayerID, playerID)
         return retDict
     
+    curBattleRecList = GetPlayerArenaBattleRecList(playerID)
     billBoard = GameWorld.GetBillboard().FindBillboard(ShareDefine.Def_BT_Arena)
     if not billBoard:
         return retDict
@@ -1123,6 +1170,7 @@
                 recInfo.RealmLV = cacheDict["RealmLV"]
                 recInfo.FightPower = fightPower % ShareDefine.Def_PerPointValue
                 recInfo.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
+                recInfo.Face = cacheDict.get("Face", 0)
                 
         clientPack.BattleRecordList.append(recInfo)
         
@@ -1165,6 +1213,7 @@
         clientPack.RealmLV = cacheDict["RealmLV"]
         clientPack.FightPower = fightPower % ShareDefine.Def_PerPointValue
         clientPack.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
+        clientPack.Face = cacheDict.get("Face", 0)
         
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTurnFight.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTurnFight.py
index dd1dd52..89e30d8 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTurnFight.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTurnFight.py
@@ -17,6 +17,7 @@
 
 import GameWorld
 import GameWorldMineArea
+import GameWorldArena
 import ChConfig
 
 def MapServer_TurnFight(curPlayer, msgList):
@@ -47,6 +48,9 @@
     if mapID == ChConfig.Def_TFMapID_MineArea:
         return GameWorldMineArea.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagID, valueList)
     
+    if mapID == ChConfig.Def_FBMapID_ArenaBattle:
+        return GameWorldArena.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
+    
     return
 
 def __OnTurnFightOver(curPlayer, dataMsg):
@@ -56,7 +60,11 @@
     
     if mapID == ChConfig.Def_TFMapID_MineArea:
         return GameWorldMineArea.OnTurnFightOver(curPlayer, mapID, funcLineID, tagID, valueList, fightRet, awardItemList)
-        
+    
+    if mapID == ChConfig.Def_FBMapID_ArenaBattle:
+        # 竞技场的over通知走原来的途径,仅请求战斗增加GameServer验证
+        return
+    
     return
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index e7ca3f4..26d88ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1885,7 +1885,7 @@
 Def_TFMapID_Adventure = 5000 # 冒险
 
 #回合战斗自定义地图需要发送GameServer的列表
-Def_TFMapID_SendToGameServer = [Def_TFMapID_MineArea]
+Def_TFMapID_SendToGameServer = [Def_TFMapID_MineArea, Def_FBMapID_ArenaBattle]
 
 #前端自定义场景地图
 ClientCustomScene = [Def_FBMapID_PersonalBoss, Def_FBMapID_ArenaBattle]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 80034f6..f9203f8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -2651,6 +2651,7 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    Face = 0    #(DWORD Face)//基本脸型
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
@@ -2670,6 +2671,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -2685,6 +2687,7 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
@@ -2701,6 +2704,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
 
         return length
 
@@ -2712,6 +2716,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
@@ -2725,6 +2730,7 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Score:%d
@@ -2736,6 +2742,7 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Score
@@ -2756,6 +2763,7 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    Face = 0    #(DWORD Face)//基本脸型
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
@@ -2776,6 +2784,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -2791,6 +2800,7 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
@@ -2810,6 +2820,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
         length += 1
         length += len(self.AddScore)
         length += 1
@@ -2824,6 +2835,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
@@ -2840,6 +2852,7 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Score:%d,
@@ -2854,6 +2867,7 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Score,
@@ -2940,6 +2954,7 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    Face = 0    #(DWORD Face)//基本脸型
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
@@ -2956,6 +2971,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -2967,6 +2983,7 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
@@ -2982,6 +2999,7 @@
         length += 4
         length += 4
         length += 4
+        length += 4
 
         return length
 
@@ -2992,6 +3010,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
@@ -3004,6 +3023,7 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Score:%d
@@ -3014,6 +3034,7 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Score
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ArenaBattle.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ArenaBattle.py
index c71d235..6ac443e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ArenaBattle.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ArenaBattle.py
@@ -10,34 +10,54 @@
 # @version 1.0
 #
 # 详细描述: 竞技场战斗,目前主要做自定义副本流程桥梁吧,暂时没什么额外逻辑,战斗过程前端自行处理,后端只处理击杀木桩后结算
+#            砍树版本改为回合战斗
 #
 #-------------------------------------------------------------------------------
 #"""Version = 2020-12-07 19:30"""
 #-------------------------------------------------------------------------------
 
+import ChConfig
+import GameWorld
+import PlayerControl
 import PlayerArena
 
-## 是否能够通过活动查询进入
-def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+    ## 回合战斗请求 - 地图验证
+    
+    playerID = curPlayer.GetPlayerID()
+    if not PlayerArena.CheckArenaBattleCount(curPlayer):
+        GameWorld.DebugLog("竞技场已经没有对战次数!", playerID)
+        return
+    
+    if not valueList:
+        GameWorld.DebugLog("竞技场没有发送回合战斗的PlayerID,在valueList里,索引0的值为PlayerID!", playerID)
+        return
+    tagPlayerID = valueList[0]
+    GameWorld.DebugLog("竞技场请求对战! tagType=%s,tagID=%s,tagPlayerID=%s" % (tagType, tagID, tagPlayerID), playerID)
+    
     return True
 
-## 是否需要做进入副本通用检查条件逻辑,默认需要检查
-def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
-    ## 进行中的不需要重复检查,防止断线重连被禁止进入
-    return False
-
-## 客户端进入自定义场景
-def OnEnterCustomScene(curPlayer, mapID, lineID):
-    return
-
-## 判断可否召唤木桩怪
-def OnCanSummonPriWoodPile(curPlayer, mapID, lineID, npcID, count):
-    return True
-
-## 自定义场景副本击杀NPC
-def DoCustomScene_Player_KillNPC(curPlayer, curNPC, mapID, lineID):
-    PlayerArena.OnKillBattleNPC(curPlayer, curNPC)
-    return
-
-
-
+def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
+    ## 回合战斗结束
+    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
+    needSendGameServer = False
+    awardItemList = []
+    overInfoEx = {}
+    isWin = fightRet[0]
+    
+    playerID = curPlayer.GetPlayerID()
+    if not valueList:
+        return
+    tagPlayerID = valueList[0]
+        
+    if not PlayerArena.CheckArenaBattleCount(curPlayer):
+        return
+    
+    playerLV = curPlayer.GetLV()
+    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
+    msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore, 
+                                    "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])
+    GameWorld.DebugLog("竞技场发送GameServer结算: %s" % msgInfo, playerID)
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))
+    
+    return needSendGameServer, awardItemList, overInfoEx
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
index 2700979..4eb6e4d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
@@ -184,36 +184,38 @@
 #    BYTE        Result;    // 0-进入自定义场景发送通知后端;1-胜利(后端处理,暂时不需要发送此状态);2-失败(前端被对手击杀需要发送此状态)
 #};
 def OnArenaBattle(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    tagPlayerID = clientData.TagPlayerID
-    result = clientData.Result
-    
-    GameWorld.DebugLog("竞技场挑战玩家! tagPlayerID=%s,result=%s" % (tagPlayerID, result), playerID)
-    if not tagPlayerID:
-        return
-    
-    if not result:
-        GameWorld.DebugLog("更新竞技场对战对手ID! tagPlayerID=%s" % tagPlayerID, playerID)
-        # 记录对手ID
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleTagID, tagPlayerID)
-        return
-    
-    isWin = 1 if result == 1 else 0
-#    # 木桩被击杀,后端判断,其他前端同步
-#    if isWin:
-#        GameWorld.ErrLog("前端不能同步竞技场胜利状态!", playerID)
-#        return
-    
-    recTagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
-    if tagPlayerID != recTagPlayerID:
-        GameWorld.ErrLog("竞技场结算时对手ID不一致! tagPlayerID(%s) != recTagPlayerID(%s)" % (tagPlayerID, recTagPlayerID), playerID)
-        __DoArenaBattleOver(curPlayer)
-        return
-    
-    # 失败结算入口: 前端同步
-    SendGameServer_ArenaBattleOver(curPlayer, isWin)
+    # 改为回合战斗
     return
+#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+#    playerID = curPlayer.GetPlayerID()
+#    tagPlayerID = clientData.TagPlayerID
+#    result = clientData.Result
+#    
+#    GameWorld.DebugLog("竞技场挑战玩家! tagPlayerID=%s,result=%s" % (tagPlayerID, result), playerID)
+#    if not tagPlayerID:
+#        return
+#    
+#    if not result:
+#        GameWorld.DebugLog("更新竞技场对战对手ID! tagPlayerID=%s" % tagPlayerID, playerID)
+#        # 记录对手ID
+#        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleTagID, tagPlayerID)
+#        return
+#    
+#    isWin = 1 if result == 1 else 0
+#    # 木桩被击杀,后端判断,其他前端同步
+#    #if isWin:
+#    #    GameWorld.ErrLog("前端不能同步竞技场胜利状态!", playerID)
+#    #    return
+#    
+#    recTagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
+#    if tagPlayerID != recTagPlayerID:
+#        GameWorld.ErrLog("竞技场结算时对手ID不一致! tagPlayerID(%s) != recTagPlayerID(%s)" % (tagPlayerID, recTagPlayerID), playerID)
+#        __DoArenaBattleOver(curPlayer)
+#        return
+#    
+#    # 失败结算入口: 前端同步
+#    SendGameServer_ArenaBattleOver(curPlayer, isWin)
+#    return
 
 def OnKillBattleNPC(curPlayer, curNPC):
 #    ## 击杀对手,前端本,使用木桩NPC作为对手
@@ -231,30 +233,31 @@
 
 def SendGameServer_ArenaBattleOver(curPlayer, isWin):
     ## 发送GameServer通知战斗结算
-    
-    playerID = curPlayer.GetPlayerID()
-    tagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
-    if not tagPlayerID:
-        GameWorld.ErrLog("竞技场结算时没有对手ID!", playerID)
-        __DoArenaBattleOver(curPlayer)
-        return
-    
-    if not CheckArenaBattleCount(curPlayer):
-        GameWorld.ErrLog("竞技场已经没有对战次数!", playerID)
-        __DoArenaBattleOver(curPlayer)
-        return
-    
-    tick = GameWorld.GetGameWorld().GetTick()
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Arena, tick):
-        GameWorld.ErrLog("结算竞技场CD中!tagPlayerID=%s" % tagPlayerID, playerID)
-        return
-    
-    playerLV = curPlayer.GetLV()
-    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
-    msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore, 
-                                    "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])
-    GameWorld.DebugLog("竞技场发送GameServer结算: %s" % msgInfo, playerID)
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))
+    #改为回合战斗
+    return
+#    playerID = curPlayer.GetPlayerID()
+#    tagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
+#    if not tagPlayerID:
+#        GameWorld.ErrLog("竞技场结算时没有对手ID!", playerID)
+#        __DoArenaBattleOver(curPlayer)
+#        return
+#    
+#    if not CheckArenaBattleCount(curPlayer):
+#        GameWorld.ErrLog("竞技场已经没有对战次数!", playerID)
+#        __DoArenaBattleOver(curPlayer)
+#        return
+#    
+#    tick = GameWorld.GetGameWorld().GetTick()
+#    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Arena, tick):
+#        GameWorld.ErrLog("结算竞技场CD中!tagPlayerID=%s" % tagPlayerID, playerID)
+#        return
+#    
+#    playerLV = curPlayer.GetLV()
+#    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
+#    msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore, 
+#                                    "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])
+#    GameWorld.DebugLog("竞技场发送GameServer结算: %s" % msgInfo, playerID)
+#    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))
     return
 
 def __DoArenaBattleOver(curPlayer, retDict={}):

--
Gitblit v1.8.0