From 314e5bda6fac9148711b9c7f9bc2e4bdef5d4977 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 16 二月 2023 18:42:57 +0800
Subject: [PATCH] 9779 【bt9】【bt8】【主干】【越南】新增修改玩家跨服匹配相关数据后台命令

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py |   61 +++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
index 553dfd8..58ef254 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -226,7 +226,7 @@
             
         return pos
     
-def UpdateCrossPKBillboard(zoneID, seasonID, winner, loser):
+def UpdateCrossPKBillboard(zoneID, seasonID, winner, loser, syncClientServer=False):
     ## 更新跨服PK排行榜,跨服服务器结算调用,子服不调用
     
     curZoneSeasonID = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_CrossPKZoneSeasonID % zoneID)
@@ -310,13 +310,15 @@
     matchState = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.DailyActionID_CrossReamPK)
     if not matchState and not PyGameData.g_crossPKRoomDict:
         GameWorld.Log("匹配已结束,且当前没有PK中的房间了!主动广播子服最新榜单! ")
+        syncClientServer = True
+    if syncClientServer:
         crossZoneName = GameWorld.GetCrossZoneName()
         zoneIpyData = IpyGameDataPY.GetIpyGameData("CrossZonePK", crossZoneName, zoneID)
         if zoneIpyData:
             serverGroupIDList = zoneIpyData.GetServerGroupIDList()
             SyncPKSyncBillboardToClientServer(zoneID, seasonID, serverGroupIDList)
             
-    return
+    return True
 
 #// C0 01 查看跨服竞技场赛季排行榜 #tagCGViewCrossPKBillboard
 #
@@ -438,6 +440,9 @@
 
 def ClientServerMsg_PKBillboard(serverGroupID, msgData):
     ## 收到子服请求查询PK排行榜信息
+    if "GMSetCrossPK" in msgData:
+        _GMSetCrossPK(serverGroupID, msgData)
+        return
     zoneID = msgData["ZoneID"]
     seasonID = msgData["SeasonID"]
     exData = msgData.get("ExData", {}) # 原数据返回子服
@@ -1797,6 +1802,58 @@
     DR_CrossReamlPK("PKOverRobot", dataDict)
     return
 
+def _GMSetCrossPK(serverGroupID, msgData):
+    ## 收到子服GM同步的设置跨服PK数据
+    
+    if not GameWorld.IsCrossServer():
+        GameWorld.ErrLog("GMSetCrossPK非跨服服务器不处理该跨服GM请求!")
+        return
+    
+    zoneID = msgData["ZoneID"]
+    seasonID = msgData["SeasonID"]
+    playerInfoDict = msgData["PlayerInfo"]
+    
+    accID = playerInfoDict["accID"]
+    playerID = playerInfoDict["playerID"]
+    playerName = playerInfoDict["playerName"]
+    playerJob = playerInfoDict["playerJob"]
+    fightPower = playerInfoDict["fightPower"]
+    realmLV = playerInfoDict["realmLV"]
+    pkScore = playerInfoDict["pkScore"]
+    danLV = playerInfoDict["danLV"]
+    cWinCount = playerInfoDict["cWinCount"]
+    ondayScore = playerInfoDict["ondayScore"]
+    
+    zoneMatchPlayerList = PyGameData.g_crossPKZoneMatchPlayerDict.get(zoneID, [])
+    if playerID in zoneMatchPlayerList or playerID in PyGameData.g_crossPKZoneMatchRobotPlayerDict or playerID in PyGameData.g_crossPKZoneMatchRobotPlayerDict:
+        GameWorld.ErrLog("GMSetCrossPK玩家正在匹配中,无法设置该GM请求数据! playerID=%s,accID=%s" % (playerID, accID))
+        return
+    
+    pkPlayer = CrossPKPlayer()
+    pkPlayer.accID = accID
+    pkPlayer.playerID = playerID
+    pkPlayer.playerName = playerName
+    pkPlayer.playerJob = playerJob
+    pkPlayer.pkScore = pkScore
+    pkPlayer.danLV = danLV
+    pkPlayer.fightPower = fightPower
+    pkPlayer.realmLV = realmLV
+    pkPlayer.cWinCount = cWinCount
+    pkPlayer.ondayScore = ondayScore
+    pkPlayer.serverGroupID = serverGroupID
+    pkPlayer.pkZoneID = zoneID
+    pkPlayer.seasonID = seasonID
+    
+    # 更新排行榜
+    isOK = UpdateCrossPKBillboard(zoneID, seasonID, pkPlayer, None, True)
+    GameWorld.Log("GMSetCrossPK设置跨服PK榜单玩家数据成功: isOK=%s,zoneID=%s,seasonID=%s,pkScore=%s,danLV=%s,cWinCount=%s,accID=%s" 
+                  % (isOK, zoneID, seasonID, pkScore, danLV, cWinCount, accID), playerID)
+    
+    # 记录流向
+    dataDict = {"zoneID":zoneID, "seasonID":seasonID, "pkPlayer":pkPlayer.GetDRInfo()}
+    DR_CrossReamlPK("GMSet", dataDict)
+    return
+    
 ##================================== 以下是子服逻辑 ==========================================
 
 def OnGameServerInitOK():

--
Gitblit v1.8.0