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