From 16b4ad964fd72b3077f610755d8f848d0ffcc047 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期三, 23 一月 2019 11:13:13 +0800 Subject: [PATCH] 5959 子 【开发】【1.5.100】增加诛仙神技 / 【后端】【1.5.100】诛仙神技 - 配置触发 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 105 insertions(+), 3 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py index 9692a16..8291317 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py @@ -20,7 +20,12 @@ import PlayerControl import IPY_GameServer import CrossRealmPlayer +import GameWorldBoss import CrossRealmPK +import PlayerQuery +import PlayerTalk +import CrossBoss +import ChConfig import GMShell import traceback @@ -40,13 +45,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) @@ -59,6 +64,9 @@ elif msgType == ShareDefine.ClientServerMsg_PKBillboard: CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData) + elif msgType == ShareDefine.ClientServerMsg_ChatCrossWorld: + PlayerTalk.ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick) + elif msgType == ShareDefine.ClientServerMsg_GMCMD: GMShell.ClientServerMsg_GMCMD(msgData, tick) @@ -67,6 +75,16 @@ elif msgType == ShareDefine.ClientServerMsg_ViewPlayerCache: CrossRealmPlayer.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData) + + elif msgType == ShareDefine.ClientServerMsg_QueryNPCInfo: + PlayerQuery.ClientServerMsg_QueryNPCInfo(serverGroupID, msgData) + + elif msgType == ShareDefine.ClientServerMsg_SetPlayerAttrValue: + MapServer_CrossSetPlayerAttrValue(msgData) + + # 需要发送到地图服务器处理的 + elif msgType in [ShareDefine.ClientServerMsg_Reborn, ShareDefine.ClientServerMsg_CollectNPC]: + MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID) else: GameWorld.ErrLog("没有该信息类型逻辑处理!") @@ -84,6 +102,31 @@ 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 + +def MapServer_CrossSetPlayerAttrValue(msgData): + for playerID, setAttrInfoList in msgData.items(): + player = GameWorld.GetPlayerManager().FindPlayerByID(playerID) + if not player: + return + msgInfo = str(setAttrInfoList) + player.MapServer_QueryPlayerResult(0, 0, "CrossSetPlayerAttrValue", msgInfo, len(msgInfo)) return ## ================================================================================================ @@ -113,7 +156,7 @@ ## 子服收到跨服服务器信息 dataPack = IPY_GameServer.IPY_MGBroadcastMergeClient() dataMsg = dataPack.GetData() - GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg) + #GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg) try: msgDict = eval(dataMsg) @@ -125,6 +168,9 @@ elif msgType == ShareDefine.CrossServerMsg_Notify: PlayerControl.CrossServerMsg_Notify(msgData) + + elif msgType == ShareDefine.CrossServerMsg_ChatCrossWorld: + PlayerTalk.CrossServerMsg_ChatCrossWorld(msgData) elif msgType == ShareDefine.CrossServerMsg_ViewPlayerCacheRet: CrossRealmPlayer.CrossServerMsg_ViewPlayerCacheRet(msgData, tick) @@ -150,6 +196,28 @@ 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 == ShareDefine.CrossServerMsg_NPCInfoRet: + PlayerQuery.CrossServerMsg_NPCInfoRet(msgData, tick) + + # 需要发送到地图服务器处理的 + elif msgType in [ShareDefine.CrossServerMsg_RebornRet, ShareDefine.CrossServerMsg_CollectNPCOK]: + MapServer_ClientServerReceiveMsg(msgType, msgData) + elif msgType == ShareDefine.CrossServerMsg_CrossServerState: CrossRealmPlayer.CrossServerMsg_CrossServerState(msgData) @@ -163,6 +231,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 为连接成功; 其他为失败,失败会延迟通知 @@ -170,12 +252,19 @@ ## 子服收到跨服服务器信息 dataPack = IPY_GameServer.IPY_LGCrossLoginResult() result = dataPack.GetResult() + 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("通知跨服主服务器链接成功, 可接收最新跨服活动状态及数据...") @@ -184,4 +273,17 @@ 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