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 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 70 insertions(+), 21 deletions(-)

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

--
Gitblit v1.8.0