#!/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
|
|