From 794d31c3d9615701ef8f04a199417737ddf60bd7 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期五, 11 一月 2019 09:59:57 +0800 Subject: [PATCH] 5762 子 【开发】【1.5】新增300级后的成长基金 / 【后端】【1.5】新增300级后的成长基金 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py | 121 +++++++++++++++++++++++++++++++++++++-- 1 files changed, 113 insertions(+), 8 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py index b5b217c..f0c731d 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py @@ -20,7 +20,10 @@ import PlayerControl import IPY_GameServer import CrossRealmPlayer +import GameWorldBoss import CrossRealmPK +import CrossBoss +import ChConfig import GMShell import traceback @@ -40,13 +43,13 @@ def OnCrossServerReceiveMsg(recvMsg, tick): ## 跨服服务器收到信息处理 try: - GameWorld.Log("OnCrossServerReceiveMsg: %s" % recvMsg) + #GameWorld.Log("OnCrossServerReceiveMsg: %s" % recvMsg) msgDict = eval(recvMsg) msgType = msgDict.get("MsgType", -1) msgData = msgDict.get("Data", "") serverGroupID = msgDict.get("ServerGroupID", 0) - + if msgType == ShareDefine.ClientServerMsg_PKMatch: CrossRealmPK.ClientServerMsg_PKMatch(serverGroupID, msgData, tick) @@ -55,12 +58,22 @@ elif msgType == ShareDefine.ClientServerMsg_PKPrepareOK: CrossRealmPK.ClientServerMsg_PKPrepareOK(msgData, tick) + + elif msgType == ShareDefine.ClientServerMsg_PKBillboard: + CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData) elif msgType == ShareDefine.ClientServerMsg_GMCMD: GMShell.ClientServerMsg_GMCMD(msgData, tick) elif msgType == ShareDefine.ClientServerMsg_ServerInitOK: ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick) + + elif msgType == ShareDefine.ClientServerMsg_ViewPlayerCache: + CrossRealmPlayer.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData) + + # 需要发送到地图服务器处理的 + elif msgType in [ShareDefine.ClientServerMsg_Reborn]: + MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID) else: GameWorld.ErrLog("没有该信息类型逻辑处理!") @@ -72,11 +85,28 @@ return def ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick): - ''' 收到子服启动成功通知 + ''' 收到子服连接成功通知 当子服启动成功后,可同步一次跨服服务器活动状态及活动数据给子服 ''' - GameWorld.Log("收到跨服子服启动成功通知!") + GameWorld.Log("收到跨服子服连接成功通知!") + CrossRealmPlayer.ClientServerMsg_ServerInitOK(serverGroupID) CrossRealmPK.ClientServerMsg_ServerInitOK(serverGroupID, tick) + CrossBoss.ClientServerMsg_ServerInitOK(serverGroupID) + return + +def MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID): + ## 收到子服信息,需要发送到地图服务器处理 + + if not isinstance(msgData, dict): + return + tagPlayerID = msgData.get("PlayerID") + if not tagPlayerID: + return + tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) + if not tagPlayer: + return + msgInfo = str([msgType, msgData, serverGroupID]) + tagPlayer.MapServer_QueryPlayerResult(0, 0, "CrossServerReceiveMsg", msgInfo, len(msgInfo)) return ## ================================================================================================ @@ -106,7 +136,7 @@ ## 子服收到跨服服务器信息 dataPack = IPY_GameServer.IPY_MGBroadcastMergeClient() dataMsg = dataPack.GetData() - GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg) + #GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg) try: msgDict = eval(dataMsg) @@ -118,6 +148,9 @@ elif msgType == ShareDefine.CrossServerMsg_Notify: PlayerControl.CrossServerMsg_Notify(msgData) + + elif msgType == ShareDefine.CrossServerMsg_ViewPlayerCacheRet: + CrossRealmPlayer.CrossServerMsg_ViewPlayerCacheRet(msgData, tick) elif msgType == ShareDefine.CrossServerMsg_PKMatchReqRet: CrossRealmPK.CrossServerMsg_PKMatchReqRet(msgData) @@ -134,6 +167,34 @@ elif msgType == ShareDefine.CrossServerMsg_PKOverInfo: CrossRealmPK.CrossServerMsg_PKOverInfo(msgData) + elif msgType == ShareDefine.CrossServerMsg_PKSeasonInfo: + CrossRealmPK.CrossServerMsg_PKSeasonInfo(msgData) + + elif msgType == ShareDefine.CrossServerMsg_PKSyncBillboard: + CrossRealmPK.CrossServerMsg_PKSyncBillboard(msgData) + + elif msgType == ShareDefine.CrossServerMsg_CrossBossInfo: + CrossBoss.CrossServerMsg_CrossBossInfo(msgData) + + elif msgType == ShareDefine.CrossServerMsg_CrossBossState: + CrossBoss.CrossServerMsg_CrossBossState(msgData) + + elif msgType == ShareDefine.CrossServerMsg_PutInItem: + CrossRealmPlayer.CrossServerMsg_PutInItem(msgData) + + elif msgType == ShareDefine.CrossServerMsg_GiveMoney: + CrossRealmPlayer.CrossServerMsg_GiveMoney(msgData) + + elif msgType == ShareDefine.CrossServerMsg_DropGoodItem: + GameWorldBoss.CrossServerMsg_DropGoodItem(msgData, tick) + + # 需要发送到地图服务器处理的 + elif msgType in [ShareDefine.CrossServerMsg_RebornRet]: + MapServer_ClientServerReceiveMsg(msgType, msgData) + + elif msgType == ShareDefine.CrossServerMsg_CrossServerState: + CrossRealmPlayer.CrossServerMsg_CrossServerState(msgData) + else: GameWorld.ErrLog("没有该信息类型逻辑处理!") @@ -144,6 +205,20 @@ return +def MapServer_ClientServerReceiveMsg(msgType, msgData): + ## 收到跨服服务器信息,需要发送到地图服务器处理 + + if not isinstance(msgData, dict): + return + tagPlayerID = msgData.get("PlayerID") + if not tagPlayerID: + return + tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) + if not tagPlayer: + return + msgInfo = str([msgType, msgData]) + tagPlayer.MapServer_QueryPlayerResult(0, 0, "ClientServerReceiveMsg", msgInfo, len(msgInfo)) + return # 连接跨服服务器状态 # 1 为连接成功; 其他为失败,失败会延迟通知 @@ -151,8 +226,38 @@ ## 子服收到跨服服务器信息 dataPack = IPY_GameServer.IPY_LGCrossLoginResult() result = dataPack.GetResult() - if result == 1: - GameWorld.Log("OnConnCorossServer conn success!!!") - else: + connState = 1 if result == 1 else 0 + GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerConnState, connState) + + if result != 1: GameWorld.Log("--OnClientServerReceiveMsg disconn") + CrossRealmPlayer.CrossServerMsg_CrossServerState({"isOpen":0}) + return + + GameWorld.Log("OnConnCorossServer conn success!!!") + if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit): + GameWorld.Log(" 服务器还未启动好,暂不处理! 等服务器启动好后再处理!") + return + + serverGroupID = GameWorld.GetServerGroupID() + if GameWorld.IsCrossRealmOpen() and not GameWorld.IsCrossServer(): + GameWorld.Log("通知跨服主服务器链接成功, 可接收最新跨服活动状态及数据...") + dataMsg = {"ServerGroupID":serverGroupID} + SendMsgToCrossServer(ShareDefine.ClientServerMsg_ServerInitOK, dataMsg) + + return + +def OnGameServerInitOK(): + ## 子服启动成功 + if GameWorld.IsCrossServer(): + return + + serverGroupID = GameWorld.GetServerGroupID() + if GameWorld.IsCrossRealmOpen() and not GameWorld.IsCrossServer(): + GameWorld.Log("通知跨服主服务器启动成功, 可接收最新跨服活动状态及数据...") + dataMsg = {"ServerGroupID":serverGroupID} + SendMsgToCrossServer(ShareDefine.ClientServerMsg_ServerInitOK, dataMsg) + return + + \ No newline at end of file -- Gitblit v1.8.0