From 6a875d29696c5625a779a379b0de523b2383d7ef Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 28 十一月 2024 16:41:11 +0800 Subject: [PATCH] 10312 【越南】【英文】【bt】【砍树】查看跨服玩家数据向对应子服查询 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 43 insertions(+), 10 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py index 468be9f..769946e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py @@ -29,8 +29,6 @@ import IpyGameDataPY import PlayerHorse import ChEquip -import FBCommon -import BossHurtMng import ItemCommon import PyGameData import PlayerTJG @@ -81,18 +79,50 @@ #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() @@ -108,20 +138,23 @@ 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() -- Gitblit v1.8.0