hch
2019-03-13 23b3fbb321e68c78fa4ceda608de44ea1a8fd585
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
@@ -32,7 +32,6 @@
import ChConfig
import time
import cPickle
import json
ViewCacheMgr = GameWorld.GameWorldData.GetPlayerViewCacheMgr()
@@ -56,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, \
@@ -86,7 +87,7 @@
    
    # 同步更新助战信息
    if PlayerFBHelpBattle.IsInHelpBattleCheckInList(PlayerID):
        PropDataDict = cPickle.loads(PropData)
        PropDataDict = eval(PropData)
        fightPower = PropDataDict.get("FightPower", 0)
        familyID = PropDataDict.get("FamilyID", 0)
        playerName = PropDataDict.get("Name", "")
@@ -107,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
## 根据规则判定是否需要继续保存离线玩家数据
@@ -180,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
@@ -215,11 +217,11 @@
        sendPack.PlusDataSize = len(sendPack.PlusData)
    else:
        #成功回包 缓存数据
        sendPack.PropData = json.dumps(cPickle.loads(curCache.GetPropData()), ensure_ascii=False)
        sendPack.PropData = curCache.GetPropData()
        sendPack.PropDataSize = len(sendPack.PropData)
        sendPack.ItemData = json.dumps(cPickle.loads(GetItemData(curCache)), ensure_ascii=False)
        sendPack.ItemData = GetItemData(curCache)
        sendPack.ItemDataSize = len(sendPack.ItemData)
        sendPack.PlusData = json.dumps(cPickle.loads(GetPlusData(curCache)), ensure_ascii=False)
        sendPack.PlusData = GetPlusData(curCache)
        sendPack.PlusDataSize = len(sendPack.PlusData)
        
    NetPackCommon.SendFakePack(curPlayer, sendPack)
@@ -237,7 +239,7 @@
        return
    
    playerEquipList = []
    equipItemList = cPickle.loads(itemData)
    equipItemList = eval(itemData)
    for equipItemDict in equipItemList:
        equipIndex = equipItemDict["ItemIndex"]
        if equipIndex not in ShareDefine.RoleEquipType:
@@ -277,7 +279,7 @@
            answerPack.OnlineType = ChConfig.Def_Offline
            answerPack.ServerGroupID = 0
        else:
            cacheDict = cPickle.loads(curCache.GetPropData())
            cacheDict = eval(curCache.GetPropData())
    
            answerPack.PlayerID = clientPack.PlayerID
            answerPack.PlayerName = cacheDict["Name"]
@@ -306,12 +308,12 @@
    curCache = ViewCacheMgr.FindCache(playerID)
    if not curCache:
        return
    PropData = cPickle.loads(curCache.GetPropData())
    PropData = eval(curCache.GetPropData())
    PropData["FamilyID"] = familyID
    PropData["FamilyName"] = familyName
    playerLV = PropData["LV"]
    
    PropData = cPickle.dumps(PropData, 2)
    PropData = json.dumps(PropData, ensure_ascii=False)
    ItemData = GetItemData(curCache)
    PlusData = GetPlusData(curCache)
    UpdatePlayerCache(playerID, PropData, ItemData, PlusData, True if playerLV > 150 else False)