From b7c75e875f535aa4443ac053529eccfbd07e3d17 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 19 二月 2021 18:50:53 +0800 Subject: [PATCH] 4935 【主干】【BT】【BT2】【BTZF】自动开服引起跨服boss报错bug --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 40 insertions(+), 2 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py index 40691df..2797827 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py @@ -21,6 +21,7 @@ import GameWorld import PlayerControl import NetPackCommon +import GameWorldArena import ChPyNetSendPack import PlayerFBHelpBattle import PyGameDataStruct @@ -29,10 +30,18 @@ import ChConfig import json +import time + +def DoOnDayEx(): + DelOutofTimeViewCacheData() + return def IsSaveDBViewCache(playerID, playerLV): ## 是否保存基本的缓存数据 if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID): + return True + + if GameWorldArena.IsArenaBattlePlayer(playerID): return True SaveDBLimitLV = IpyGameDataPY.GetFuncCfg("PlayerViewCache", 1) @@ -44,6 +53,12 @@ def IsSaveAllViewCache(playerID): ## 是否保存所有缓存数据 + + if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID): + return True + + if GameWorldArena.IsArenaBattlePlayer(playerID): + return True NeedCheckBillBoardType = IpyGameDataPY.GetFuncEvalCfg("PlayerViewCache", 2) #校验玩家是否上排行榜 @@ -57,11 +72,30 @@ return False +def DelOutofTimeViewCacheData(): + ## 删除过期的查看缓存数据 + + curTime = int(time.time()) + MaxTime = 30 * 3600 * 24 # 30天 + + 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 @@ -239,7 +273,11 @@ 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() -- Gitblit v1.8.0