From 388823edfe6308cba6f76ca6dc4f20022c5cb2be Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 30 六月 2025 19:03:50 +0800 Subject: [PATCH] 10431 【英文】看广告获得限时代金券 --- ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py | 68 +++++++++++++++++++++++++++++---- 1 files changed, 59 insertions(+), 9 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py b/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py index c57ad42..e354686 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py @@ -17,7 +17,7 @@ # @change: "2014-12-23 15:30" xmnathan GameServer增加根据LineNO发送Py自定义包接口 # @change: "2015-10-22 23:00" hxp 增加Recv_MergerChildToCenter #------------------------------------------------------------------------------- -"""Version = 2015-10-22 23:00""" +#"""Version = 2015-10-22 23:00""" #------------------------------------------------------------------------------- #---导入--- import IPY_GameServer @@ -29,7 +29,10 @@ import ChPyNetSendPack import traceback import ChMapToGamePyPack -import MergeChildMsg +import CrossRealmMsg +import PlayerControl +import ChPlayer +import ShareDefine #------------------------------------------------------------------------------- #---全局变量--- @@ -95,9 +98,13 @@ # Log("ReadPyPackTable: moudle: %s"%dir(moudle)) for index in range(regCnt): + if not config.get(section, "PacketCMD_%s"%(index + 1)): + continue cmd = config.get(section, "PacketCMD_%s"%(index + 1)) subCmd = config.get(section, "PacketSubCMD_%s"%(index + 1)) callFunc = config.get(section, "PacketCallFunc_%s"%(index + 1)) + if not cmd or not subCmd or not callFunc: + continue cmd = int(cmd, 16) subCmd = int(subCmd, 16) @@ -204,8 +211,7 @@ curPackHeadRegDict["CallFunc"](index, curPackData, tick) except Exception: - Log("python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc()) - #raise Exception("python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc()) + GameWorld.RaiseException("python自定义封包解析失败\r\n%s" % traceback.format_exc()) return @@ -219,7 +225,52 @@ innerPackData = clientPack.GetBuffer() curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData) +def SendPackByPlayer(clientPack, curPlayer=None): + ## 发送封包,当curPlayer为None时则发送全服玩家 + if not curPlayer: + # 全服广播在线玩家 + playerManager = GameWorld.GetPlayerManager() + for i in xrange(playerManager.GetActivePlayerCount()): + curPlayer = playerManager.GetActivePlayerAt(i) + if curPlayer == None: + continue + if PlayerControl.GetIsTJG(curPlayer): + continue + SendFakePack(curPlayer, clientPack) + else: + if PlayerControl.GetIsTJG(curPlayer): + return + SendFakePack(curPlayer, clientPack) + return +def SendFakePackByCross(onlinePlayerIDDict, clientPack): + '''由跨服服务器直接给子服在线玩家发送封包,适用于接受的玩家封包数据一致的 + @param onlinePlayerIDDict: 在线玩家GroupID字典 {playerID:groupID, ...} + 功能自行通过 onlineMgr = ChPlayer.GetOnlinePlayerMgr() 过滤 + onlineMgr.GetOLPlayerServerGroupID(playerID) 获取ServerGroupID + ''' + if not onlinePlayerIDDict: + return + innerPackData = clientPack.GetBuffer() + dataMsg = {"playerIDList":onlinePlayerIDDict.keys(), "innerPackData":innerPackData} + CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_SendFakePack, dataMsg, onlinePlayerIDDict.values()) + return + +def CrossServerMsg_SendFakePack(msgData): + ## 子服收到由跨服直接发送给玩家的封包 + playerIDList = msgData["playerIDList"] + innerPackData = msgData["innerPackData"] + + playerManager = GameWorld.GetPlayerManager() + for playerID in playerIDList: + curPlayer = playerManager.FindPlayerByID(playerID) + if curPlayer == None: + continue + if PlayerControl.GetIsTJG(curPlayer): + continue + curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData) + + return #------------------------------------------------------------------------------- #---Py封包注册信息 PyPackTable = ReadPyPackTable("PyNetPack") @@ -276,9 +327,7 @@ curPackHeadRegDict["CallFunc"](routeIndex, mapID, curPackData, tick) #Log("RecvMapPyPack: CallFunc curPackHead = %s"%curPackHead) except Exception: - Log("RecvMapPyPack python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc()) - if GameWorld.GetGameWorld().GetDebugLevel(): - raise Exception("RecGamePyPack python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc()) + GameWorld.RaiseException("RecvMapPyPack python自定义封包解析失败\r\n%s" % traceback.format_exc()) return #------------------------------------------------------------------------------- @@ -297,11 +346,12 @@ def Recv_MergerChildToCenter(index, tick): try: packData = IPY_GameServer.IPY_MGMergerChildToCenter().GetData() - Log("收到跨服子服自定义封包消息:\r\n%s" % packData) + # 不要输出具体封包内容,可能会因为内容导致日志输出报错 + Log("收到跨服子服自定义封包消息:长度=%s" % len(packData)) #以下添加后续处理函数 #... #... - MergeChildMsg.Recv_MergerChildToCenterProcess(packData, tick) + CrossRealmMsg.OnCrossServerReceiveMsg(packData, tick) except Exception: Log("跨服子服自定义封包消息处理失败") return -- Gitblit v1.8.0