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
@@ -82,18 +80,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()
@@ -109,20 +139,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()