ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
@@ -23,12 +23,15 @@
import NetPackCommon
import GameWorldArena
import ChPyNetSendPack
import ChGameToMapPyPack
import PlayerFBHelpBattle
import GameWorldSkyTower
import CrossChampionship
import CrossBattlefield
import PyGameDataStruct
import IpyGameDataPY
import PyDataManager
import ShareDefine
import ChConfig
import json
@@ -50,6 +53,9 @@
        return True
    
    if CrossChampionship.IsChampionshipPlayer(playerID):
        return True
    if GameWorldSkyTower.IsSkyTowerPassPlayer(playerID):
        return True
    
    SaveDBLimitLV = IpyGameDataPY.GetFuncCfg("PlayerViewCache", 1)
@@ -84,6 +90,16 @@
        if curBillboard.FindByID(playerID):
            return True
        
    #跨服榜单上的默认保留
    if GameWorld.IsCrossServer():
        billboardMgr = PyDataManager.GetCrossBillboardManager()
        for billboardType in ShareDefine.CrossBillboardTypeList:
            groupList = billboardMgr.GetBillboardGroupList(billboardType)
            for billboardType, groupValue1, groupValue2 in groupList:
                billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
                if billboardObj.FindByID(playerID):
                    return True
    return False
def DelOutofTimeViewCacheData():
@@ -154,8 +170,8 @@
#    WORD        ItemDataSize1;
#    char        ItemData1[ItemDataSize1];    //1阶装备数据
#    ...         ...
#    WORD        ItemDataSize15;
#    char        ItemData15[ItemDataSize15];
#    WORD        ItemDataSize20;
#    char        ItemData20[ItemDataSize20];
#};
def OnMGUpdatePlayerCache(routeIndex, mapID, curPackData, tick):
    playerID = curPackData.PlayerID
@@ -192,7 +208,7 @@
    #GameWorld.DebugLog("    更新Plus数据: size=%s, %s" % (curCache.PlusDataSize, curCache.PlusData), playerID)
    
    # 装备数据存储,不保存装备数据的话则清空
    for classLV in xrange(1, 15 + 1):
    for classLV in xrange(1, 20 + 1):
        if not isSaveAll:
            itemDataSize = 0
            itemData = ""
@@ -223,16 +239,36 @@
#    DWORD        PlayerID;        //玩家ID
#    DWORD        FindPlayerID;    //要查询的玩家ID
#    BYTE        EquipClassLV;    //大于0为查看指定境界阶装备信息,  0为查看默认信息
#    BYTE        CallMap;        //是否需要通知地图
#};
def OnMGQueryPlayerCache(routeIndex, mapID, curPackData, tick):
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)
    findPlayerID = curPackData.FindPlayerID
    equipClassLV = curPackData.EquipClassLV
    callMap = curPackData.CallMap
    curCache = FindViewCache(findPlayerID)
    if not curCache:
        PlayerControl.NotifyCode(curPlayer, "ViewPlayer_OffLine")
        if callMap:
            sendPack = ChGameToMapPyPack.tagGMPlayerCache()
            sendPack.PlayerID = curPlayer.GetPlayerID()
            sendPack.FindPlayerID = findPlayerID
            sendPack.PropData = ""
            sendPack.PropDataSize = len(sendPack.PropData)
            sendPack.PlusData = ""
            sendPack.PlusDataSize = len(sendPack.PlusData)
            NetPackCommon.SendPyPackToMapServer(routeIndex, mapID, sendPack)
        return
    Sync_PlayerCache(curPlayer, curCache, equipClassLV)
    if callMap:
        sendPack = ChGameToMapPyPack.tagGMPlayerCache()
        sendPack.PlayerID = curPlayer.GetPlayerID()
        sendPack.FindPlayerID = findPlayerID
        sendPack.PropData = curCache.PropData
        sendPack.PropDataSize = len(sendPack.PropData)
        sendPack.PlusData = curCache.PlusData
        sendPack.PlusDataSize = len(sendPack.PlusData)
        NetPackCommon.SendPyPackToMapServer(routeIndex, mapID, sendPack)
    return
def Sync_PlayerCache(curPlayer, curCache, equipClassLV=0):