| | |
| | | import IpyGameDataPY
|
| | | import PlayerHorse
|
| | | import ChEquip
|
| | | import FBCommon
|
| | | import BossHurtMng
|
| | | import ItemCommon
|
| | | import PyGameData
|
| | | import PlayerTJG
|
| | |
| | | #GameWorld.DebugLog("packData=%s %s %s" % (type(packData), len(packData), packData), playerID)
|
| | | return packData
|
| | |
|
| | | def UpdPackDataSyncState(curPlayer, msgData):
|
| | | ## 更新打包数据同步状态,这里只更新状态即可,具体同步由定时同步处理
|
| | | syncState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PackDataSyncState)
|
| | | updSyncState = syncState
|
| | | if msgData.get("PackData"):
|
| | | updSyncState = GameWorld.SetBitValue(updSyncState, 0, 1)
|
| | | if msgData.get("PackDataCross"):
|
| | | updSyncState = GameWorld.SetBitValue(updSyncState, 1, 1)
|
| | | if msgData.get("ViewCacheCross"):
|
| | | updSyncState = GameWorld.SetBitValue(updSyncState, 2, 1)
|
| | | if syncState == updSyncState:
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PackDataSyncState, updSyncState)
|
| | | GameWorld.DebugLog("更新打包数据同步状态: msgData=%s,syncState=%s,updSyncState=%s" |
| | | % (msgData, syncState, updSyncState), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def SetPackDataSyncState(curPlayer): UpdPackDataSyncState(curPlayer, {"PackData":1})
|
| | | def SetPackDataCrossSyncState(curPlayer): UpdPackDataSyncState(curPlayer, {"PackDataCross":1})
|
| | | def SetViewCacheCrossSyncState(curPlayer): UpdPackDataSyncState(curPlayer, {"ViewCacheCross":1})
|
| | |
|
| | | ##更新玩家当前详细信息到GameServer
|
| | | # @param curPlayer, tick
|
| | | # @return None
|
| | | def UpdateGameServerPlayerCache(curPlayer, tick, IsLogouting=False, forcePackData=False, packMsg=None):
|
| | | def UpdateGameServerPlayerCache(curPlayer, tick, IsLogouting=False, forcePackData=False, packMsg=None, isOnlyViewCache=False):
|
| | | if PlayerTJG.GetIsTJG(curPlayer):
|
| | | # 脱机不处理
|
| | | return
|
| | | curPlayer.SetDict(Def_Process_Tick, tick)
|
| | | PackDataSyncState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PackDataSyncState)
|
| | | isAllEquip = False
|
| | | # 需要同步跨服缓存 且 还没同步装备的
|
| | | if PackDataSyncState&pow(2, 2) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipViewCacheState) != 2:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipViewCacheState, 2)
|
| | | isAllEquip = True
|
| | | GameWorld.DebugLog("本次登录首次同步跨服缓存,全装备同步", curPlayer.GetPlayerID())
|
| | | |
| | | if forcePackData:
|
| | | SetPackDataSyncState(curPlayer)
|
| | | SetPackDataCrossSyncState(curPlayer)
|
| | | |
| | | #获取当前玩家缓存数据
|
| | | PropData, PlusData = GetPlayerPropPlusCache(curPlayer)
|
| | | itemDataDict = __GetPlayerItemDataCache(curPlayer)
|
| | | itemDataDict = __GetPlayerItemDataCache(curPlayer, isAllEquip)
|
| | |
|
| | | #同步发送到GameServer
|
| | | sendPack = ChMapToGamePyPack.tagMGUpdatePlayerCache()
|
| | |
| | | setattr(sendPack, "ItemData%s" % classLV, itemData)
|
| | | setattr(sendPack, "ItemDataSize%s" % classLV, len(itemData))
|
| | | # 打包数据相关
|
| | | sendPack.PackDataSyncState = 11 if forcePackData else curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PackDataSyncState)
|
| | | sendPack.PackData = GetSyncPlayerPackData(curPlayer, forcePackData)
|
| | | sendPack.PackDataSyncState = PackDataSyncState
|
| | | sendPack.PackData = "" if isOnlyViewCache else GetSyncPlayerPackData(curPlayer, forcePackData)
|
| | | sendPack.PackDataLen = len(sendPack.PackData)
|
| | | sendPack.PackMsg = str(packMsg) if packMsg else "{}"
|
| | | sendPack.PackMsgLen = len(sendPack.PackMsg)
|
| | | #GameWorld.DebugLog("同步缓存: %s" % sendPack.OutputString())
|
| | | GameWorld.DebugLog("同步缓存: logout=%s,forcePackData=%s,isOnlyViewCache=%s,PackDataSyncState=%s,isAllEquip=%s,classList=%s" |
| | | % (IsLogouting, forcePackData, isOnlyViewCache, PackDataSyncState, isAllEquip, itemDataDict.keys()), curPlayer.GetPlayerID())
|
| | | NetPackCommon.SendPyPackToGameServer(sendPack)
|
| | | return
|
| | |
|
| | | def __GetPlayerItemDataCache(curPlayer):
|
| | | def __GetPlayerItemDataCache(curPlayer, isAllEquip=False):
|
| | | ## 装备及装备位养成缓存,由于装备位比较多,所以按阶同步,重登第一次同步所有阶
|
| | | |
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipViewCacheState):
|
| | | if not isAllEquip and not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipViewCacheState):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipViewCacheState, 1)
|
| | | isAllEquip = True
|
| | | |
| | | if isAllEquip:
|
| | | needSyncClassLVList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1)
|
| | | else:
|
| | | playerID = curPlayer.GetPlayerID()
|