ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
@@ -55,11 +55,13 @@
##更新缓存数据
#  @param PlayerID, PropData, ItemData, PlusData, isSaveDB
#  @return None
def UpdatePlayerCache(PlayerID, PropData, ItemData, PlusData, isSaveDB=False):
def UpdatePlayerCache(PlayerID, PropData, ItemData, PlusData, isSaveDB=False, packData=None):
    curCache = ViewCacheMgr.FindCache(PlayerID)
    if not curCache:
        curCache = ViewCacheMgr.AddNewCache(PlayerID) 
    curCache.SetUpdateTime(GameWorld.GetCurrentDataTimeStr())
    if packData:
        curCache.SetPlayerLV(packData.PlayerLV)
        curCache.SetOffTime(packData.OffTime)
    
    GameWorld.DebugLog('ViewCache### UpdatePlayerCache PlayerID %s, \
@@ -106,13 +108,15 @@
##玩家下线缓存数据
#  @param PlayerID, PlayerLV, PropData, ItemData, PlusData
#  @return None
def OnPlayerLogout(PlayerID, PlayerLV, PropData, ItemData, PlusData):
def OnPlayerLogout(curPackData):
    PlayerID = curPackData.PlayerID
    PlayerLV = curPackData.PlayerLV
    #不需要保存离线数据的,直接删除缓存数据
    if not IsNeedSaveLogoutPlayer(PlayerID, PlayerLV):
        ViewCacheMgr.DeleteCache(PlayerID)
        return
    #更新数据,并设置需要保存数据库
    UpdatePlayerCache(PlayerID, PropData, ItemData, PlusData, True)
    UpdatePlayerCache(PlayerID, curPackData.PropData, curPackData.ItemData, curPackData.PlusData, True, packData=curPackData)
    return
## 根据规则判定是否需要继续保存离线玩家数据
@@ -179,12 +183,11 @@
    PlayerID = curPackData.PlayerID
    PlayerLV = curPackData.PlayerLV
    if curPackData.IsLogouting:
        OnPlayerLogout(PlayerID, PlayerLV, \
                       curPackData.PropData, curPackData.ItemData, curPackData.PlusData)
        OnPlayerLogout(curPackData)
    else:
        # 此处保存设置为True是为安全防范,比如突然断电,宕机等情况 导致误以为不保存,故等级可设置高一点
        UpdatePlayerCache(PlayerID, curPackData.PropData, \
                          curPackData.ItemData, curPackData.PlusData, True if PlayerLV > 150 else False)
                          curPackData.ItemData, curPackData.PlusData, True if PlayerLV > 150 else False, packData=curPackData)
    GameWorld.DebugLog('ViewCache### OnMGUpdatePlayerCache out')
    return
@@ -274,6 +277,7 @@
            answerPack.LV = 1
            answerPack.RealmLV = 1
            answerPack.OnlineType = ChConfig.Def_Offline
            answerPack.ServerGroupID = 0
        else:
            cacheDict = eval(curCache.GetPropData())
    
@@ -283,6 +287,7 @@
            answerPack.LV = cacheDict["LV"]
            answerPack.RealmLV = cacheDict["RealmLV"]
            answerPack.OnlineType = ChConfig.Def_Offline
            answerPack.ServerGroupID = cacheDict.get("ServerGroupID", 0)
            
    else:
        answerPack.PlayerID = clientPack.PlayerID
@@ -292,6 +297,7 @@
        answerPack.RealmLV = tagPlayer.GetOfficialRank()
        answerPack.OnlineType = ChConfig.Def_Online
        answerPack.IsInTeam = tagPlayer.GetTeamID() > 0
        answerPack.ServerGroupID = PlayerControl.GetPlayerServerGroupID(tagPlayer)
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    NetPackCommon.SendFakePack(curPlayer, answerPack)
@@ -308,8 +314,8 @@
    playerLV = PropData["LV"]
    
    PropData = json.dumps(PropData, ensure_ascii=False)
    ItemData = curCache.GetItemData()
    PlusData = curCache.GetPlusData()
    ItemData = GetItemData(curCache)
    PlusData = GetPlusData(curCache)
    UpdatePlayerCache(playerID, PropData, ItemData, PlusData, True if playerLV > 150 else False)  
    return