From 6ed61789e103419c7fdc95102f44111d5db57c99 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 11 三月 2021 10:50:16 +0800 Subject: [PATCH] 4970 【主干】【gt_1.100.4】【BT】【BT2】【BTZF】服务器报错(接收子服玩家数据读取空数据报错防范) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py | 86 +++++++++++++++++++++++++++++++++++++------ 1 files changed, 74 insertions(+), 12 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py index 1cfe194..4352872 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py @@ -20,6 +20,9 @@ import PlayerControl import IPY_GameServer import CrossRealmPlayer +import PlayerCompensation +import CrossActionControl +import CrossBillboard import GameWorldBoss import CrossRealmPK import PlayerQuery @@ -52,7 +55,6 @@ def OnCrossServerReceiveMsg(recvMsg, tick): ## 跨服服务器收到信息处理 try: - GameWorld.Log("收到OnCrossServerReceiveMsg" ) if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK): GameWorld.Log("服务器未启动好,不处理子服信息!") return @@ -67,6 +69,9 @@ if msgType == ShareDefine.ClientServerMsg_PKMatch: CrossRealmPK.ClientServerMsg_PKMatch(serverGroupID, msgData, tick) + elif msgType == ShareDefine.ClientServerMsg_PKRobotOver: + CrossRealmPK.ClientServerMsg_PKRobotOver(serverGroupID, msgData, tick) + elif msgType == ShareDefine.ClientServerMsg_PKCancel: CrossRealmPK.ClientServerMsg_PKCancel(msgData, tick) @@ -75,7 +80,16 @@ elif msgType == ShareDefine.ClientServerMsg_PKBillboard: CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData) - + + elif msgType == ShareDefine.ClientServerMsg_QueryBillboard: + CrossBillboard.ClientServerMsg_QueryBillboard(serverGroupID, msgData) + + elif msgType == ShareDefine.ClientServerMsg_UpdateBillboard: + CrossBillboard.ClientServerMsg_UpdateBillboard(serverGroupID, msgData) + + elif msgType == ShareDefine.ClientServerMsg_MailContent: + PlayerCompensation.ClientServerMsg_MailContent(serverGroupID, msgData, tick) + elif msgType == ShareDefine.ClientServerMsg_ChatCrossWorld: PlayerTalk.ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick) @@ -92,10 +106,13 @@ PlayerQuery.ClientServerMsg_QueryNPCInfo(serverGroupID, msgData) elif msgType == ShareDefine.ClientServerMsg_EnterFB: - PlayerFB.ClientServerMsg_EnterFB(serverGroupID, msgData) + PlayerFB.ClientServerMsg_EnterFB(serverGroupID, msgData, tick) elif msgType == ShareDefine.ClientServerMsg_SetPlayerAttrValue: MapServer_CrossSetPlayerAttrValue(msgData) + + elif msgType == ShareDefine.ClientServerMsg_AddBuff: + MapServer_CrossAddBuff(msgData) # 需要发送到地图服务器处理的 elif msgType in [ShareDefine.ClientServerMsg_Reborn, ShareDefine.ClientServerMsg_CollectNPC]: @@ -105,9 +122,7 @@ GameWorld.ErrLog("没有该信息类型逻辑处理!") except: - GameWorld.ErrLog("OnCrossServerReceiveMsg:%s; except:%s" % (cPickle.loads(recvMsg), traceback.format_exc())) - if GameWorld.GetGameWorld().GetDebugLevel(): - raise BaseException(str(traceback.format_exc())) + GameWorld.RaiseException("跨服服务器接收信息处理报错 \r\n%s" % str(traceback.format_exc())) return def ClientServerMsg_ServerInitOK(serverGroupID, tick): @@ -129,6 +144,8 @@ CrossRealmPlayer.Sync_CrossCommInitDataToClientServer(serverGroupID) CrossRealmPK.Sync_CrossPKInitDataToClientServer(tick, serverGroupID) CrossBoss.Sync_CrossBossInitDataToClientServer(serverGroupID) + CrossActionControl.Sync_CrossActInfoToClientServer(serverGroupID) + PlayerCompensation.Sync_CrossMailPlayerIDToClientServer(serverGroupID) return def MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID): @@ -155,6 +172,20 @@ player.MapServer_QueryPlayerResult(0, 0, "CrossSetPlayerAttrValue", msgInfo, len(msgInfo)) return +def MapServer_CrossAddBuff(msgData): + ## 收到子服信息,添加buff + tagPlayerID = msgData.get("PlayerID") + if not tagPlayerID: + return + tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) + if not tagPlayer: + return + buffID = msgData.get("buffID") + if not buffID: + return + sendMsg = str(buffID) + tagPlayer.MapServer_QueryPlayerResult(0, 0, 'AddBuff', sendMsg, len(sendMsg)) + return ## ================================================================================================ def SendMsgToClientServer(msgType, dataMsg, serverGroupIDList=[]): @@ -189,7 +220,6 @@ dataMsg = dataPack.GetData() try: - GameWorld.Log("收到OnClientServerReceiveMsg" ) if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK): GameWorld.Log("服务器未启动好,不处理跨服信息!") return @@ -232,11 +262,17 @@ elif msgType == ShareDefine.CrossServerMsg_PKSyncBillboard: CrossRealmPK.CrossServerMsg_PKSyncBillboard(msgData) + elif msgType == ShareDefine.CrossServerMsg_SyncBillboard: + CrossBillboard.CrossServerMsg_SyncBillboard(msgData, tick) + elif msgType == ShareDefine.CrossServerMsg_CrossBossInfo: CrossBoss.CrossServerMsg_CrossBossInfo(msgData) elif msgType == ShareDefine.CrossServerMsg_CrossBossState: CrossBoss.CrossServerMsg_CrossBossState(msgData) + + elif msgType == ShareDefine.CrossServerMsg_CrossActInfo: + CrossActionControl.CrossServerMsg_CrossActInfo(msgData) elif msgType == ShareDefine.CrossServerMsg_PutInItem: CrossRealmPlayer.CrossServerMsg_PutInItem(msgData) @@ -253,8 +289,21 @@ elif msgType == ShareDefine.CrossServerMsg_EnterFBRet: PlayerFB.CrossServerMsg_EnterFBRet(msgData, tick) + elif msgType == ShareDefine.CrossServerMsg_SendMail: + PlayerCompensation.CrossServerMsg_SendMail(msgData) + + elif msgType == ShareDefine.CrossServerMsg_MailPlayerIDList: + PlayerCompensation.CrossServerMsg_MailPlayerIDList(msgData) + + elif msgType == ShareDefine.CrossServerMsg_MailContent: + PlayerCompensation.CrossServerMsg_MailContent(msgData) + + elif msgType == ShareDefine.CrossServerMsg_FBPlayerCount: + PlayerFB.CrossServerMsg_FBPlayerCount(msgData) + # 需要发送到地图服务器处理的 - elif msgType in [ShareDefine.CrossServerMsg_RebornRet, ShareDefine.CrossServerMsg_CollectNPCOK]: + elif msgType in [ShareDefine.CrossServerMsg_RebornRet, ShareDefine.CrossServerMsg_CollectNPCOK, ShareDefine.CrossServerMsg_FBEnd, + ShareDefine.CrossServerMsg_NPCAttackCount]: MapServer_ClientServerReceiveMsg(msgType, msgData) elif msgType == ShareDefine.CrossServerMsg_CrossServerState: @@ -264,15 +313,28 @@ GameWorld.ErrLog("没有该信息类型逻辑处理!") except: - GameWorld.ErrLog("OnClientServerReceiveMsg:%s; except:%s" % (cPickle.loads(dataMsg), traceback.format_exc())) - if GameWorld.GetGameWorld().GetDebugLevel(): - raise BaseException(str(traceback.format_exc())) - + GameWorld.RaiseException("子服服务器接收信息处理报错\r\n%s" % str(traceback.format_exc())) return def MapServer_ClientServerReceiveMsg(msgType, msgData): ## 收到跨服服务器信息,需要发送到地图服务器处理 + if msgType in [ShareDefine.CrossServerMsg_FBEnd]: + curServerGroupID = GameWorld.GetServerGroupID() + for tagPlayerID, msgInfo in msgData.items(): + if not msgInfo: + continue + serverGroupID = msgInfo[0] + if curServerGroupID != serverGroupID: + continue + tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) + if not tagPlayer: + continue + msgInfo = str([msgType, msgInfo[1:]]) + tagPlayer.MapServer_QueryPlayerResult(0, 0, "ClientServerReceiveMsg", msgInfo, len(msgInfo)) + + return + if not isinstance(msgData, dict): return tagPlayerID = msgData.get("PlayerID") -- Gitblit v1.8.0