From 4bcef0ba119712bcd00064516062480f4b46bb51 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 23 九月 2022 14:22:33 +0800 Subject: [PATCH] 9701 【后端】【越南】【BT7】【主干】跨服竞技64位排位赛(初版) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py | 61 ++++++++++++++++++++++++++++++ 1 files changed, 61 insertions(+), 0 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py index 7f38e29..86ba160 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py @@ -33,6 +33,7 @@ import IPY_PlayerDefine import CrossBattlefield import CrossRealmPlayer +import CrossChampionship import DataRecordPack import CrossRealmMsg import ShareDefine @@ -147,6 +148,10 @@ mapID = msgData["MapID"] funcLineID = msgData["FuncLineID"] playerLV = msgData["LV"] + + if mapID == ChConfig.Def_FBMapID_CrossChampionship: + CrossChampionship.OnRequestChampionshipVSRoom(playerID, serverGroupID) + return zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID) if not zoneIpyData: @@ -469,6 +474,15 @@ GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "OpenFB", msgInfo, len(msgInfo)) return copyMapObj +def SendMapOpenFBEx(realMapID, copyPropertyList): + ## 通知地图开启副本线路 + # @param realMapID: 地图ID + # @param copyPropertyList: [[copyMapID, propertyID], ...] + msgInfo = str(copyPropertyList) + GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "OpenFBEx", msgInfo, len(msgInfo)) + GameWorld.Log("SendMapOpenFBEx: realMapID=%s,msgInfo=%s" % (realMapID, msgInfo)) + return + def OpenCrossDynamicLineBySys(zoneID, mapID, funcLineIDList, checkExist): ## 系统开启跨服动态线路 @@ -714,6 +728,7 @@ # @param sendCMD: 请求的命令 根据请求类型和请求命令来决定最终操作 # @return None def EnterFBLine(curPlayer, queryCallName, sendCMD, tick): + playerID = curPlayer.GetPlayerID() GameWorld.Log("EnterFBLine()...queryCallName=%s,sendCMD=%s" % (queryCallName, sendCMD), curPlayer.GetPlayerID()) playerManager = GameWorld.GetPlayerManager() try: @@ -787,3 +802,49 @@ playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_EnterFB, 0, tagMapID, queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex()) return + +def Send_CrossServerMsg_EnterVSRoomRet(vsRoomDict, serverGroupIDList=None): + ## 发送子服跨服对战房间请求进入结果 + # @param vsRoomDict: {roomID:{playerID:playerInfo, ...}, } + # playerInfo key + # serverGroupID 所属服务器分组ID + # regMapInfo 传送跨服注册信息 [registerMap, mapID, dataMapID, copyMapID, posX, posY] + CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_EnterVSRoomRet, vsRoomDict, serverGroupIDList) + return + +def CrossServerMsg_EnterVSRoomRet(msgData, tick): + ## 跨服对战房间请求进入结果 + + curServerGroupID = GameWorld.GetServerGroupID() + GameWorld.DebugLog("=== 跨服PK对战房间请求进入结果 === curServerGroupID=%s" % curServerGroupID) + vsRoomDict = msgData + for roomID, playerDict in vsRoomDict.items(): + GameWorld.DebugLog(" roomID=%s,playerDict=%s" % (roomID, playerDict)) + for playerID, playerInfo in playerDict.items(): + if "serverGroupID" in playerInfo: + serverGroupID = playerInfo["serverGroupID"] + if serverGroupID != curServerGroupID: + GameWorld.DebugLog(" 不是本服玩家,不处理!playerID=%s,serverGroupID=%s" % (playerID, serverGroupID)) + continue + + player = GameWorld.GetPlayerManager().FindPlayerByID(playerID) + if not player: + GameWorld.DebugLog(" 玩家不在线, playerID=%s" % (playerID)) + continue + if PlayerControl.GetIsTJG(player): + GameWorld.DebugLog(" 玩家脱机中, playerID=%s" % (playerID)) + continue + + if "regMapInfo" not in playerInfo: + continue + regMapInfo = playerInfo["regMapInfo"] + if len(regMapInfo) != 6: + continue + registerMap, mapID, dataMapID, copyMapID, posX, posY = regMapInfo + + PlayerControl.SetVsRoomId(player, roomID, True) + # 通知地图玩家匹配成功, 上传数据, 准备进入跨服服务器 + CrossRealmPlayer.SendCrossRealmReg(player, registerMap, mapID, dataMapID, copyMapID, posX, posY) + + return + -- Gitblit v1.8.0