#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package PlayerPackData # # @todo:Íæ¼Ò´ò°üÊý¾Ý # @author hxp # @date 2024-10-17 # @version 1.0 # # ÏêϸÃèÊö: Íæ¼Ò´ò°üÊý¾Ý # # Ó¦Óó¡¾°£ºÖ÷ÒªÓÃÓÚPKÀ๦ÄÜ£¬Óë¾µÏñPK # 1. ¼È¶¨¹¦ÄÜÀàÐÍ£º # ÈçÆ¥Å侺¼¼³¡µÈ£¬ÕâÖÖÒ»°ãÐèÒªÏȱ¨Ãû»òµÇ¼ÇµÈ£¬»òÕßÒѾ­ÔÚ»ý·ÖÅÅÐаñÉ쵀 # ËùÒÔ´ò°üÊý¾Ý±íÒ»°ã»á±£´æÍæ¼Ò´ò°üÊý¾ÝÖ±µ½»î¶¯½áËã½áÊø # ±¨Ãû¡¢µÇ¼Ç¡¢Í¬²½£º ÕâÖÖÒ»°ãÊÇͨ¹ýÍæ¼ÒÖ÷¶¯×ÔÖ÷·¢ÆðµÄÐÐΪ # ÅÅÐаñ£ºÕâÖÖÏ൱ÓÚ±»¶¯Ê½±¨Ãû£¬¼´Ê×´ÎÉϰñ´¥·¢À­È¡Êý¾Ý # 2. ϵͳ×Ô¶¯PK¹¦ÄÜÀࣺ # Èç¸ù¾Ýij¸ö×ʸñ¹æÔò£¬ÏµÍ³×Ô¶¯Éú³Én¸öÍæ¼ÒËæ»úÆ¥ÅäPKµÄ¹¦ÄÜ£¬Íæ¼ÒÁ½Á½¾µÏñϵͳ×Ô¶¯¶Ô´ò½ú¼¶¼Ó»ý·Ö¾ö³öÃû´ÎµÈ # ÕâÖÖΪ±»¶¯Ê½£¬¼´Ä¿±êÍæ¼Ò¿ÉÄܲ»´æÔÚ´ò°üÊý¾Ý±íÖУ¬ÐèҪȡÀ­È¡ # 3. ËæÒâPKÀàÐÍ£º # ÈçÇдèһϣ¬Íæ¼Ò¿ÉÒÔÔÚÈÎÒⳡ¾°¶ÔÈÎÒâ±¾·þ»ò¿ç·þÍæ¼Ò·¢ÆðÇд裬ÓëÆä¾µÏñ½øÐÐÒ»³¡ÓÑÒêPK£¬´¿ÓéÀÖ # ÕâÖÖΪ±»¶¯Ê½£¬¼´Ä¿±êÍæ¼Ò¿ÉÄܲ»´æÔÚ´ò°üÊý¾Ý±íÖУ¬ÐèҪȡÀ­È¡ # # ÓÉÓÚ´ò°üÊý¾Ý½Ï´ó£¬Ó°Ï쿪¹Ø·þ¼°±¸µµµÄËÙ¶È£¬»¹»áµ¼ÖÂÄÚ´æ²»×㣬¹Ê¸ÄΪdbÖ±½Ó¹ÜÀí´ò°üÊý¾Ý»ñÈ¡¼°Èë¿â # GameServer½ö±£Áôµ¥´ÎÆô¶¯ºóÓÐͬ²½/»ñÈ¡µÄÍæ¼ÒÊý¾Ý£¬Ò»°ã±ÈdbÉÙ£¬Ö»±£Áô´ò°üÊý¾ÝÐÅÏ¢£¬Íæ¼Ò»ù±¾ÐÅÏ¢¸ÄΪ´ÓViewCahceÖлñÈ¡ #------------------------------------------------------------------------------- #"""Version = 2024-10-17 15:00""" #------------------------------------------------------------------------------- import GameWorld import PyDataManager import PlayerViewCache import PyGameDataStruct import CrossRealmMsg import PlayerControl import ShareDefine import PyGameData import ChConfig import base64 Def_CahceCountMax = 100 # ×î´ó»º´æ¸öÊý£¬×¢£ºGameServer»º²»»º´æÕâ¸öÊý¾Ý¶¼ÎÞËùν£¨¸ÄΪÔÚdb»º´æ£©£¬±£ÁôÔ­È¡Êý¾ÝÂß¼­²»±ä£¬ÔÝʱ»º´æ¸öxÌõ£¬·½±ã±¾·þµÄÖ±½ÓÈ¡ TempDBPlayer = PyGameDataStruct.tagDBPlayer() def GetDBPlayerByPackData(packData): ## ¸ù¾Ý curPlayer.GetPackData() ´ò°ü·µ»ØµÄÊý¾Ý»ñÈ¡DBPlayerÊý¾Ý TempDBPlayer.clear() if packData: TempDBPlayer.readData(base64.b64decode(packData)) return TempDBPlayer class DBPlayerPackDataManager(): ## Íæ¼Ò´ò°üÊý¾Ý¹ÜÀí - ÕâÀï½ö¹ÜÀí±¾´ÎÆô¶¯ºóµÄÈÈÊý¾Ý»º´æ£¬²»Èë¿â def __init__(self): self.Clear() return def Clear(self): self.__packDataDcit = {} # {playerID:packData, ...} self.__packDataPlayerIDList = [] # [playerID, ...] # ÏÞÖÆ»º´æÊý£¬ÏȽøÏȳö return def IsPlayerIn(self, playerID): return playerID in self.__packDataDcit def GetCount(self): return len(self.__packDataDcit) def GetPlayerPackdata(self, playerID): if playerID not in self.__packDataDcit: return "" # »Ö¸´Êý¾ÝÈÈ¶È if playerID in self.__packDataPlayerIDList: self.__packDataPlayerIDList.remove(playerID) self.__packDataPlayerIDList.append(playerID) GameWorld.DebugLog("»ñÈ¡´ò°üÊý¾Ý»º´æÊý¸üÐÂ: %s,%s" % (len(self.__packDataPlayerIDList), self.__packDataPlayerIDList)) return self.__packDataDcit[playerID] def UpdPlayerPackData(self, playerID, packData): if not packData: return self.__packDataDcit[playerID] = packData if playerID in self.__packDataPlayerIDList: # Ìí¼ÓÈȶȣ¬Öظ´¸üеIJ»Ó°ÏìÈÈ¶È self.__packDataPlayerIDList.append(playerID) if len(self.__packDataPlayerIDList) > Def_CahceCountMax: delPlayerID = self.__packDataPlayerIDList.pop(0) if delPlayerID in self.__packDataDcit: del self.__packDataDcit[delPlayerID] GameWorld.DebugLog("ɾ³ý´ò°üÊý¾Ý»º´æ: delPlayerID=%s" % delPlayerID) GameWorld.DebugLog("Ìí¼Ó´ò°üÊý¾Ý»º´æÊý¸üÐÂ: %s,%s" % (len(self.__packDataPlayerIDList), self.__packDataPlayerIDList)) return def IsPackDataPlayer(playerID): return PyDataManager.GetDBPlayerPackDataManager().IsPlayerIn(playerID) def OnPlayerLogin(curPlayer): ## ±¾·þµÇ¼Âß¼­ playerID = curPlayer.GetPlayerID() packDataMgr = PyDataManager.GetDBPlayerPackDataManager() if packDataMgr.IsPlayerIn(playerID): QueryPlayerResult_PlayerMirror(curPlayer, "PackDataSyncState", {"PackData":1}) return def SetNeedPackData(playerIDList): ## ÉèÖÃÐèÒª´ò°üÊý¾ÝµÄÍæ¼ÒIDÁÐ±í£¬Èç¹ûûÓÐÊý¾Ý£¬Ôò»áÖ÷¶¯È¥À­È¡Êý¾Ý£¬¿ç·þ±¾·þͨÓà if not playerIDList: return pullPlayerIDList = [] packDataMgr = PyDataManager.GetDBPlayerPackDataManager() for playerID in playerIDList: if packDataMgr.IsPlayerIn(playerID): continue pullPlayerIDList.append(playerID) if not pullPlayerIDList: return OnPullPlayerPackData(pullPlayerIDList) return def OnPullPlayerPackData(pullPlayerIDList, msgInfo=None): '''ÇëÇóÀ­È¡Íæ¼ÒÊý¾Ý£¬¸Ãº¯Êý½öÔÚ´ò°üÊý¾Ý±íÖв»´æÔÚÍæ¼ÒÊý¾Ýʱ²ÅÐèÒªµ÷Ó㬿ç·þ±¾·þͨÓà 1. ¿ç·þÀ­×Ó·þÍæ¼ÒÊý¾Ý: Ö±½ÓÍÆË͸ø×Ó·þÀ­¶ÔÓ¦Íæ¼ÒÊý¾Ý£¬À­È¡µ½Êý¾Ýºóͬʱ´æÈë´ò°üÊý¾Ý±íÖÐ 2. ×Ó·þÀ­ÆäËû×Ó·þÍæ¼ÒÊý¾Ý£ºÖ±½ÓÍÆË͸ø¿ç·þ·þÎñÆ÷À­È¡ 3. ×Ó·þÀ­±¾·þÍæ¼ÒÊý¾Ý a.Èç¹ûÊÇ¿ç·þ·þÎñÆ÷ÇëÇóµÄ£¬ÓÅÏÈÈ¡´ò°üÊý¾Ý±íÖÐÊý¾Ý£¬ÓÐÔò·µ»Ø£¬Ã»ÓÐÔò¼ÌÐøÍùÏÂ×ß b.Íæ¼ÒÔÚÏßʱ´ÓµØÍ¼À­È¡£¬À­È¡µ½Êý¾Ýºóͬʱ´æÈë´ò°üÊý¾Ý±íÖÐ c.Íæ¼ÒÀëÏßʱ´ÓdbÀ­È¡£¬À­È¡µ½Êý¾Ýºóͬʱ´æÈë´ò°üÊý¾Ý±íÖÐ @param msgInfo: ¹¦ÄÜÀ­È¡Íæ¼ÒÊý¾Ýʱ×Ô¶¨ÒåµÄ¹¦ÄÜÐÅÏ¢£¬Í¸´«²ÎÊý ''' if msgInfo == None: msgInfo = {} GameWorld.DebugLog("À­È¡Íæ¼Ò´ò°üÊý¾Ý: %s, %s" % (pullPlayerIDList, msgInfo)) # pullFrom 0-¿ç·þÀ­×Ó·þ£» >0-×Ó·þͨ¹ý¿ç·þÀ­×Ó·þ if GameWorld.IsCrossServer(): PlayerViewCache.SetNeedViewCache(pullPlayerIDList) # À­´ò°üÊý¾ÝµÄʱºòĬÈÏÐèÒª»º´æÊý¾Ý # ¹ã²¥¸ø×Ó·þÀ­Êý¾Ý msgInfo["pullFrom"] = 0 dataMsg = {"pullPlayerIDList":pullPlayerIDList, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PullPlayerPackData, dataMsg) else: msgInfo["pullFrom"] = GameWorld.GetServerGroupID() otherServerPlayerIDList = [] # ÆäËû·þÍæ¼ÒID for playerID in pullPlayerIDList: if PlayerControl.GetDBPlayerAccIDByID(playerID): DoPullPlayerPackData(playerID, msgInfo) # À­±¾·þ else: otherServerPlayerIDList.append(playerID) # À­ÆäËû·þÍæ¼Ò£¬Í¨¹ý¿ç·þÀ­ if otherServerPlayerIDList: dataMsg = {"pullPlayerIDList":otherServerPlayerIDList, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PullOtherPlayerPackData, dataMsg) return def DoPullPlayerPackData(playerID, msgInfo): ## ×Ó·þÖ´ÐÐÀ­È¡±¾·þij¸öÍæ¼ÒÊý¾Ý£¬Ö»´¦ÀíÊôÓÚ±¾·þµÄÍæ¼Ò # @param pullFrom: 0-¿ç·þÀ­£» >0-×Ó·þÀ­ if not PlayerControl.GetDBPlayerAccIDByID(playerID): # ·Ç±¾·þÍæ¼Ò return curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if not curPlayer: GameWorld.DebugLog("Íæ¼Ò²»ÔÚÏߵĵ÷Óôò°üdbÊý¾Ý! playerID=%s" % (playerID), playerID) data = str(msgInfo) GameWorld.GetGameWorld().SendDBLogic(ChConfig.gstDBLogic_PlayerPackDataReq, playerID, data, len(data)) return GameWorld.DebugLog("Íæ¼ÒÔÚÏߵķ¢¸øµØÍ¼´ò°üÊý¾Ý! playerID=%s" % (playerID), playerID) # ÔÚÏßµÄת·¢¸øµØÍ¼ QueryPlayerResult_PlayerMirror(curPlayer, "PullPlayerPackData", msgInfo) return def ReuestPlayerPackDataRet(msgInfo, packMirrorID=0, packData=""): '''ÇëÇóÍæ¼Ò´ò°üÊý¾Ý»ã×Ü£¬ÈçͬʱÇëÇó¶à¸öµÄ»°»áÖðÒ»½øÐлã×ÜÕûºÏ£¬Ö±µ½ËùÓÐÇëÇóµÄÍæ¼ÒÊý¾Ý¾ùÓкóÔÙͳһִÐÐÖ®ºóµÄÂß¼­ ''' requestID = msgInfo.get("requestID") # ¿ÉÒÔÊÇÍæ¼ÒID£¬»òÕßÊÇϵͳ×Ô¶¨ÒåµÄÇëÇóID if requestID not in PyGameData.g_requestPlayerPackDataInfo: GameWorld.DebugLog("²»´æÔÚ¸Ã[Íæ¼Ò´ò°üÊý¾Ý]ÇëÇó! requestID=%s,packMirrorID=%s,%s" % (requestID, packMirrorID, msgInfo)) return recInfo = PyGameData.g_requestPlayerPackDataInfo[requestID] # ¼Ç¼µÄ»ã×ÜÐÅÏ¢ recMsgInfo = recInfo.get("msgInfo", {}) packDataDict = recInfo.get("packDataDict", {}) if msgInfo.get("requestTime") != recMsgInfo.get("requestTime"): # ÒòΪÇëÇóµÄÊý¾ÝÓÐÒ»¶¨µÄÑÓ³Ù£¬ÊÕµ½»Øµ÷»ã×ܺó¿ÉÄÜÒѾ­²»ÊÇ֮ǰÇëÇóµÄÁË£¬ÑéÖ¤²»Í¨¹ýÔò²»´¦Àí # ÔÝÒÔÇëÇóʱ¼ä´Á×÷ΪÑéÖ¤ÒÀ¾Ý¼´¿É£¬Í¬Ò»ÃëÄÚ²»¿ÉÖØ¸´·¢ÆðÇëÇó£¬ËùÒÔµ¥ÃëÄÚÒ»¶¨ÊÇΨһµÄ return mirrorIDList = msgInfo["mirrorIDList"] if packMirrorID: if packMirrorID not in mirrorIDList: # ²»ÔÚÐèÒªµÄÇëÇóIDÀï²»´¦Àí£¬Ò»°ã²»¿ÉÄÜ£¬½ö×÷Ϊ·À·¶ÑéÖ¤ return if packMirrorID not in packDataDict: packDataDict[packMirrorID] = packData for mirrorID in mirrorIDList: if mirrorID not in packDataDict: GameWorld.DebugLog("»¹ÓÐÄ¿±êÍæ¼ÒûÓÐÊý¾Ý£¬ÉԵȺó´¦Àí! requestID=%s,mirrorID=%s,mirrorIDList=%s,packIDList=%s" % (requestID, mirrorID, mirrorIDList, packDataDict.keys())) return GameWorld.DebugLog("»ã×ÜÍæ¼Ò´ò°üÊý¾ÝÍê±Ï: requestID=%s,packMirrorID=%s, %s" % (requestID, packMirrorID, msgInfo)) PyGameData.g_requestPlayerPackDataInfo.pop(requestID, None) # »ã×ÜÍê±Ï£¬Çå³ý»ã×ÜÐÅÏ¢ msgType = msgInfo.get("msgType") # ¾µÏñÕ½¶· if msgType == "MirrorBattle": sceneMapID = msgInfo.get("sceneMapID", 0) playerID = msgInfo.get("playerID", 0) routeIndex = -1 # # Íæ¼Ò·¢ÆðµÄ # if playerID: # playerID = msgInfo["playerID"] # curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) # if not curPlayer: # return # sceneMapID = GameWorld.GetQueryPlayerMapID(curPlayer) # routeIndex = curPlayer.GetRouteServerIndex() # else: # routeIndex = -1 sendMsg = str([msgInfo, packDataDict]) GameWorld.DebugLog("MapServer_QueryPlayer sceneMapID=%s,len=%s" % (sceneMapID, len(sendMsg)), playerID) GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, playerID, sceneMapID, "PlayerMirror", sendMsg, len(sendMsg), routeIndex) # ÆäËû¹¦ÄÜ¿ÉÔÙÀ©Õ¹ else: pass return def ClientServerMsg_PlayerPackData(serverGroupID, msgData): ## ÊÕµ½×Ó·þͬ²½µÄÍæ¼Ò´ò°üÊý¾Ý playerID = msgData["playerID"] packData = msgData["packData"] PyDataManager.GetDBPlayerPackDataManager().UpdPlayerPackData(playerID, packData) msgInfo = msgData.get("msgInfo", {}) if not msgInfo: return pullFrom = msgInfo.get("pullFrom") # ¿ç·þ×ÔÉíÐèÒªµÄ if pullFrom == 0: ReuestPlayerPackDataRet(msgInfo, playerID, packData) # ÆäËû×Ó·þ·¢ÆðµÄ£¬ÍƸøÄ¿±ê×Ó·þ elif pullFrom > 0: tagServerGroupID = pullFrom dataMsg = {"playerID":playerID, "packData":packData, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PushPlayerPackData, dataMsg, [tagServerGroupID]) return def ClientServerMsg_PullOtherPlayerPackData(serverGroupID, msgData): ## ÊÕµ½×Ó·þÇëÇóÀ­È¡Íæ¼Ò´ò°üÊý¾Ý msgInfo = msgData["msgInfo"] pullPlayerIDList = msgData["pullPlayerIDList"] dbPackDataIDList = msgData.get("dbPackDataIDList", []) # db±ê¼ÇµÄÓдò°üÊý¾ÝµÄÍæ¼ÒID otherServerPlayerIDList = [] packDataMgr = PyDataManager.GetDBPlayerPackDataManager() for playerID in pullPlayerIDList: packData = packDataMgr.GetPlayerPackdata(playerID) # ÒѾ­ÓеÄÊý¾ÝÏÈÍÆËÍ»ØÈ¥ if packData or playerID in dbPackDataIDList: GameWorld.DebugLog("¿ç·þGameServer»òdbÓлº´æÍæ¼Ò´ò°üÊý¾Ý£¬Ö±½ÓÍÆ¸ø×Ó·þ! playerID=%s" % playerID) dataMsg = {"playerID":playerID, "packData":packData, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PushPlayerPackData, dataMsg, [serverGroupID]) else: otherServerPlayerIDList.append(playerID) # »¹Ã»ÓÐÊý¾ÝµÄ£¬¹ã²¥¸øÆäËû×Ó·þÀ­Êý¾Ý if otherServerPlayerIDList: PlayerViewCache.SetNeedViewCache(otherServerPlayerIDList) # À­´ò°üÊý¾ÝµÄʱºòĬÈÏÐèÒª»º´æÊý¾Ý dataMsg = {"pullPlayerIDList":otherServerPlayerIDList, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PullPlayerPackData, dataMsg) return ##------------------------------------------------------------------------------------------------- def CrossServerMsg_PlayerPackDataState(msgData): ## ÊÕµ½¿ç·þ·þÎñÆ÷Íæ¼Ò´ò°üÊý¾Ý״̬ͬ²½ playerID = msgData["playerID"] curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if not curPlayer: return QueryPlayerResult_PlayerMirror(curPlayer, "PackDataSyncState", msgData) return def CrossServerMsg_PullPlayerPackData(msgData): ## ÊÕµ½¿ç·þ·þÎñÆ÷À­È¡Íæ¼Ò´ò°üÊý¾Ý msgInfo = msgData["msgInfo"] pullPlayerIDList = msgData["pullPlayerIDList"] packDataMgr = PyDataManager.GetDBPlayerPackDataManager() for playerID in pullPlayerIDList: packData = packDataMgr.GetPlayerPackdata(playerID) if packData: GameWorld.DebugLog("±¾·þÓлº´æÍæ¼Ò´ò°üÊý¾Ý£¬Ö±½ÓÍÆ¸ø¿ç·þ! playerID=%s" % playerID) dataMsg = {"playerID":playerID, "packData":packData, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PlayerPackData, dataMsg) else: DoPullPlayerPackData(playerID, msgInfo) return def CrossServerMsg_PushPlayerPackData(msgData): ## ÊÕµ½¿ç·þ·þÎñÆ÷ÍÆË͵ÄÍæ¼Ò´ò°üÊý¾Ý playerID = msgData["playerID"] packData = msgData["packData"] msgInfo = msgData["msgInfo"] ReuestPlayerPackDataRet(msgInfo, playerID, packData) return def QueryPlayerResult_PlayerMirror(curPlayer, msgType, msgData=None): sysMsg = str([msgType, msgData]) curPlayer.MapServer_QueryPlayerResult(0, 0, "PlayerMirror", sysMsg, len(sysMsg)) return def OnMGUpdatePlayerPackData(curPlayer, curPackData, msgInfo): ## µØÍ¼Í¬²½¸üеÄÍæ¼Ò´ò°üÊý¾Ý if GameWorld.IsCrossServer(): return playerID = curPackData.PlayerID packDataSyncState = curPackData.PackDataSyncState packData = curPackData.PackData if not packDataSyncState or not packData: return # ±¾·þÐèÒª£¬ÏȸüÐÂÊý¾Ý£»¿ç·þÐèÒªÔòҲĬÈϱ¾·þÐèÒª if packDataSyncState&pow(2, 0) or packDataSyncState&pow(2, 1): PyDataManager.GetDBPlayerPackDataManager().UpdPlayerPackData(playerID, packData) GameWorld.GetGameWorld().SendDBLogic(ChConfig.gstDBLogic_PlayerPackDataUpd, playerID, packData, len(packData)) # ¿ç·þÐèÒª£¬Í¬²½¸ø¿ç·þ£¬ÓÉ¿ç·þ·þÎñÆ÷ÔÙ½øÒ»²½´¦Àí if packDataSyncState&pow(2, 1): dataMsg = {"playerID":playerID, "packData":packData, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PlayerPackData, dataMsg) # ±¾·þÐèÒªµÄ¹¦ÄÜ pullFrom = msgInfo.get("pullFrom") if pullFrom > 0 and pullFrom == GameWorld.GetServerGroupID(): ReuestPlayerPackDataRet(msgInfo, playerID, packData) return def OnDBPlayerPackData(playerID, packData, msgInfo): ## ÊÕµ½db´ò°üÍæ¼ÒÊý¾Ý»Øµ÷ GameWorld.DebugLog("ÊÕµ½db´ò°üÍæ¼ÒÊý¾Ý»Øµ÷: playerID=%s, %s" % (playerID, msgInfo)) pullFrom = msgInfo.get("pullFrom") # ¿ç·þÐèÒª£¬Í¬²½¸ø¿ç·þ£¬ÓÉ¿ç·þ·þÎñÆ÷ÔÙ½øÒ»²½´¦Àí if pullFrom == 0 or (pullFrom > 0 and pullFrom != GameWorld.GetServerGroupID()): dataMsg = {"playerID":playerID, "packData":packData, "msgInfo":msgInfo} CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PlayerPackData, dataMsg) return PyDataManager.GetDBPlayerPackDataManager().UpdPlayerPackData(playerID, packData) # ±¾·þÐèÒª£¬»ã×ܽá¹û ReuestPlayerPackDataRet(msgInfo, playerID, packData) return def OnMGReuestPlayerPackData(msgInfo): ## µØÍ¼ÇëÇóÐèÒªÍæ¼Ò´ò°üÊý¾ÝÐÅÏ¢ #"msgType":"MirrorBattle", "msgData":msgData, "mirrorIDList":mirrorIDList, "requestTime":requestTime, "requestID":playerID, "playerID":playerID packDataDict = {} pullPlayerIDList = [] packDataMgr = PyDataManager.GetDBPlayerPackDataManager() requestID = msgInfo["requestID"] mirrorIDList = msgInfo["mirrorIDList"] for mirrorID in mirrorIDList: packData = packDataMgr.GetPlayerPackdata(mirrorID) if packData: packDataDict[mirrorID] = packData continue pullPlayerIDList.append(mirrorID) # ÿ´ÎÇëÇóÖ±½Ó¸²¸Ç£¬ÓɵØÍ¼¿ØÖÆÇëÇóÏÞÖÆ PyGameData.g_requestPlayerPackDataInfo[requestID] = {"msgInfo":msgInfo, "packDataDict":packDataDict} # »¹ÓÐÍæ¼ÒûÓлº´æ´ò°üÊý¾Ý£¬ÐèÒªÏÈÍêÈ«À­È¡ºóÔÙͬ²½¸øµØÍ¼ if pullPlayerIDList: OnPullPlayerPackData(pullPlayerIDList, msgInfo) return ReuestPlayerPackDataRet(msgInfo) return