From c935e395677066540f106cb06feb2f8134f9ce0d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 14 十月 2022 19:22:27 +0800 Subject: [PATCH] 9731 【越南】【主干】【BT7】转职业(修改扣除转职业消耗道具记录流向类型) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py | 105 ++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 77 insertions(+), 28 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py index 9709ed7..b857004 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py @@ -21,36 +21,35 @@ import GameWorld import PlayerControl import NetPackCommon +import GameWorldArena import ChPyNetSendPack import PlayerFBHelpBattle +import CrossChampionship +import CrossBattlefield import PyGameDataStruct import IpyGameDataPY import PyDataManager import ChConfig import json +import time -ViewCacheMgr = GameWorld.GameWorldData.GetPlayerViewCacheMgr() - - -# 优先取缓存数据,后取可保存数据 -def GetItemData(curCache): - result = curCache.GetItemDataNoSave() - if not result: - return curCache.GetItemData() - - return result - -def GetPlusData(curCache): - result = curCache.GetPlusDataNoSave() - if not result: - return curCache.GetPlusData() - - return result +def DoOnDayEx(): + DelOutofTimeViewCacheData() + return def IsSaveDBViewCache(playerID, playerLV): ## 是否保存基本的缓存数据 if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID): + return True + + if GameWorldArena.IsArenaBattlePlayer(playerID): + return True + + if CrossBattlefield.IsBattlefieldCallPlayer(playerID): + return True + + if CrossChampionship.IsChampionshipPlayer(playerID): return True SaveDBLimitLV = IpyGameDataPY.GetFuncCfg("PlayerViewCache", 1) @@ -62,6 +61,18 @@ def IsSaveAllViewCache(playerID): ## 是否保存所有缓存数据 + + if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID): + return True + + if GameWorldArena.IsArenaBattlePlayer(playerID): + return True + + if CrossBattlefield.IsBattlefieldCallPlayer(playerID): + return True + + if CrossChampionship.IsChampionshipPlayer(playerID): + return True NeedCheckBillBoardType = IpyGameDataPY.GetFuncEvalCfg("PlayerViewCache", 2) #校验玩家是否上排行榜 @@ -75,16 +86,36 @@ return False +def DelOutofTimeViewCacheData(): + ## 删除过期的查看缓存数据 + + curTime = int(time.time()) + MaxTime = IpyGameDataPY.GetFuncCfg("PlayerViewCache", 3) * 3600 * 24 + + pyViewCacheMgr = PyDataManager.GetPlayerViewCachePyManager() + playerViewCachePyDict = pyViewCacheMgr.playerViewCachePyDict + for playerID, viewCache in playerViewCachePyDict.items(): + + passTime = curTime - viewCache.OffTime + if passTime < MaxTime: + continue + if IsSaveAllViewCache(playerID): + continue + playerViewCachePyDict.pop(playerID) + + return + def DeleteViewCache(playerID): ## 删除玩家缓存 pyViewCacheMgr = PyDataManager.GetPlayerViewCachePyManager() playerViewCachePyDict = pyViewCacheMgr.playerViewCachePyDict - playerViewCachePyDict.pop(playerID) + playerViewCachePyDict.pop(playerID, None) GameWorld.DebugLog("删除查看缓存!", playerID) return -def FindViewCache(playerID, isAddNew=False): +def FindViewCache(playerID, isAddNew=False, newPropData={}): ## 查找玩家缓存 + # @param newPropData: 新数据初始PropData {}, key: LV,RealmLV,Job,VIPLV,Name,FamilyID,FamilyName,FightPower curCache = None pyViewCacheMgr = PyDataManager.GetPlayerViewCachePyManager() playerViewCachePyDict = pyViewCacheMgr.playerViewCachePyDict @@ -93,8 +124,19 @@ elif isAddNew: curCache = PyGameDataStruct.tagPlayerViewCachePy() curCache.PlayerID = playerID + if newPropData: + curCache.PropData = json.dumps(newPropData, ensure_ascii=False).replace(" ", "") + curCache.PropDataSize = len(curCache.PropData) playerViewCachePyDict[playerID] = curCache return curCache + +def GetCachePropDataDict(curCache): + ## 获取缓存基础属性字典信息 + if not hasattr(curCache, "PropDataDict"): + curCache.PropDataDict = {} + if not curCache.PropDataDict and curCache.PropData: + curCache.PropDataDict = eval(curCache.PropData) + return curCache.PropDataDict #//04 01 地图同步玩家缓存数据到GameServer#tagMGUpdatePlayerCache # @@ -140,6 +182,7 @@ curCache.GeTuiID = curPlayer.GetGeTuiClientID() curCache.GeTuiIDSize = len(curCache.GeTuiID) + curCache.PropDataDict = {} # 每次更新数据时,重置字典缓存,下次获取时重新eval缓存 curCache.PropData = curPackData.PropData curCache.PropDataSize = curPackData.PropDataSize curCache.PlusData = curPackData.PlusData @@ -165,8 +208,7 @@ #GameWorld.DebugLog(" %s" % curCache.outputString()) # 同步更新助战信息 if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID): - #PropDataDict = json.loads(curCache.PropData) - PropDataDict = eval(curCache.PropData) + PropDataDict = GetCachePropDataDict(curCache) fightPower = PropDataDict.get("FightPower", 0) familyID = PropDataDict.get("FamilyID", 0) playerName = PropDataDict.get("Name", "") @@ -190,13 +232,17 @@ if not curCache: PlayerControl.NotifyCode(curPlayer, "ViewPlayer_OffLine") return - + Sync_PlayerCache(curPlayer, curCache, equipClassLV) + return + +def Sync_PlayerCache(curPlayer, curCache, equipClassLV=0): + ## 同步玩家缓存 if equipClassLV: itemData = "" if hasattr(curCache, "ItemDataSize%s" % equipClassLV): itemData = getattr(curCache, "ItemData%s" % equipClassLV) sendPack = ChPyNetSendPack.tagSCPlayerEquipCacheResult() - sendPack.PlayerID = findPlayerID + sendPack.PlayerID = curCache.PlayerID sendPack.EquipClassLV = equipClassLV sendPack.ItemData = itemData sendPack.ItemDataSize = len(sendPack.ItemData) @@ -205,13 +251,12 @@ #回包客户端 sendPack = ChPyNetSendPack.tagSCQueryPlayerCacheResult() - sendPack.PlayerID = findPlayerID + sendPack.PlayerID = curCache.PlayerID sendPack.PropData = curCache.PropData sendPack.PropDataSize = len(sendPack.PropData) sendPack.PlusData = curCache.PlusData sendPack.PlusDataSize = len(sendPack.PlusData) NetPackCommon.SendFakePack(curPlayer, sendPack) - #GameWorld.DebugLog('ViewCache### OnMGQueryPlayerCache out') return #=============================================================================== @@ -239,14 +284,18 @@ answerPack.OnlineType = ChConfig.Def_Offline answerPack.ServerGroupID = 0 else: - cacheDict = eval(curCache.PropData) + cacheDict = GetCachePropDataDict(curCache) answerPack.PlayerID = clientPack.PlayerID answerPack.PlayerName = cacheDict["Name"] answerPack.Job = cacheDict["Job"] answerPack.LV = cacheDict["LV"] answerPack.RealmLV = cacheDict["RealmLV"] answerPack.OnlineType = ChConfig.Def_Offline - answerPack.ServerGroupID = cacheDict.get("ServerGroupID", 0) + + if GameWorld.IsCrossServer(): + answerPack.ServerGroupID = cacheDict.get("ServerGroupID", 0) + else: + answerPack.ServerGroupID = GameWorld.GetServerGroupID() else: answerPack.PlayerID = clientPack.PlayerID answerPack.PlayerName = tagPlayer.GetName() @@ -266,7 +315,7 @@ curCache = FindViewCache(playerID) if not curCache: return - PropData = eval(curCache.PropData) + PropData = GetCachePropDataDict(curCache) PropData["FamilyID"] = familyID PropData["FamilyName"] = familyName PropData = json.dumps(PropData, ensure_ascii=False).replace(" ", "") -- Gitblit v1.8.0