From d8cf06e323dca770512529f741a667278c0c8786 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 07 一月 2019 17:38:57 +0800 Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(进入跨服地图通用逻辑) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py | 75 +++++++++++++++++++++++++++++++------ 1 files changed, 62 insertions(+), 13 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py index 98d7d21..f3ff343 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py @@ -19,7 +19,10 @@ import PlayerControl import CrossRealmPlayer import IPY_GameWorld -import ChPlayer +import ChPyNetSendPack +import NetPackCommon +import IpyGameDataPY +import ChConfig #------------------------------------------------------------------------------ @@ -44,29 +47,66 @@ # @remarks 函数详细说明. def DoResult(curPlayer, callFunName, funResult, tick): resultInfo = eval(funResult) - actionType = resultInfo[0] - mapPosInfo = resultInfo[1:] - if not curPlayer: + GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, curPlayer.GetPlayerID()) + if not resultInfo: return - - playerID = curPlayer.GetPlayerID() - GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, playerID) + registerType, mapID, dataMapID, copyMapID, posX, posY = resultInfo + RegisterEnterCrossServer(curPlayer, registerType, mapID, dataMapID, copyMapID, posX, posY) + return +def RegisterEnterCrossServer(curPlayer, registerType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0): + playerID = curPlayer.GetPlayerID() if GameWorld.IsCrossServer(): GameWorld.Log(" 跨服服务器不允许上传报名数据!", playerID) return - if not mapPosInfo: + playerRegisterType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType) + if playerRegisterType in ChConfig.RegisterEnter_CrossServerMapIDList: + GameWorld.ErrLog("跨服已经在上传数据,不重复提交!playerRegisterType=%s,registerType=%s" % (playerRegisterType, registerType), curPlayer.GetPlayerID()) + return + + if not mapID: + if registerType in ChConfig.RegisterEnter_CrossServerMapIDList: + registerTableName = "CrossPenglaiZone" + else: + return + RegisterMapInfo = GetCurServerGroupIDRegisterMapInfo(registerTableName) + if not RegisterMapInfo: + GameWorld.ErrLog("找不到该服务器对应跨服分区: registerType=%s,registerTableName=%s" % (registerType, registerTableName)) + return + mapID, copyMapID, posX, posY = RegisterMapInfo + dataMapID = mapID + + if not mapID: return #跨服前更新自己所属服务器组ID PlayerControl.UpdPlayerServerGroupID(curPlayer) - mapID, dataMapID, copyMapID, posX, posY = mapPosInfo + if registerType in ChConfig.RegisterEnter_CrossServerMapIDList: + prepareEnterCrossServer = ChPyNetSendPack.tagMCPrepareEnterCrossServer() + prepareEnterCrossServer.DataMapID = registerType + NetPackCommon.SendFakePack(curPlayer, prepareEnterCrossServer) + curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, registerType) #curPlayer.SendMergeRegisterPlayer(mapID, dataMapID, copyMapID, posX, posY) curPlayer.SendMergeRegisterPlayerAfterChange(CrossRealmPlayer.GetCrossPlayerName(curPlayer), mapID, dataMapID, copyMapID, posX, posY) - GameWorld.Log(" 发送跨服玩家数据注册: actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s" - % (actionType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID) + GameWorld.Log(" 发送跨服玩家数据注册: registerType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s" + % (registerType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID) + return + +def GetCurServerGroupIDRegisterMapInfo(tableName): + ipyDataMgr = IpyGameDataPY.IPY_Data() + if not hasattr(ipyDataMgr, "Get%sCount" % tableName): + return + + serverGroupID = GameWorld.GetServerGroupID() + for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()): + ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i) + serverGroupIDList = ipyData.GetServerGroupIDList() + for serverGroupIDInfo in serverGroupIDList: + if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \ + or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID): + return ipyData.GetMapID(), ipyData.GetCopyMapID(), ipyData.GetPosX(), ipyData.GetPosY() return ## 跨服赛报名结果(上传数据) @@ -76,19 +116,28 @@ def GameServer_MergeRegisterResult(index, tick): registerResult = IPY_GameWorld.IPY_GMMergeRegisterPlayerResult() curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + registerType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType) + curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, 0) playerID = curPlayer.GetPlayerID() result = registerResult.GetResult() + GameWorld.Log("GameServer_MergeRegisterResult registerType=%s,result=%s" % (registerType, result), playerID) if not result: errorMsg = registerResult.GetErrorMsg() GameWorld.Log("CrossRealmReg result Error:%s" % errorMsg, playerID) + NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCEnterCrossServerError()) + return + + if registerType in ChConfig.RegisterEnter_CrossServerMapIDList: + CrossRealmPlayer.DoEnterCrossRealm(curPlayer) + PlayerControl.SetCrossRealmState(curPlayer, 1) + NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCStartEnterCrossServer()) return #newAccount = registerResult.GetAccount() #newName = registerResult.GetPwd() - msgList = str([]) + msgList = str([registerType]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossRealmReg", msgList, len(msgList)) - GameWorld.Log("GameServer_MergeRegisterResult msgList=%s" % msgList, playerID) return -- Gitblit v1.8.0