From 021437fc736fafdb8608933ebe095b93cfb9b8ed Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 11 七月 2024 19:31:05 +0800 Subject: [PATCH] 10192 【越南】【主干】【港台】【砍树】上线增加膜拜主动推送(修改为可膜拜自己;) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py | 132 +++++++++++++++++++++++++++++++++---------- 1 files changed, 101 insertions(+), 31 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py index 9709ed7..ce034af 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py @@ -19,38 +19,46 @@ #--------------------------------------------------------------------- import GameWorld +import GameWorship import PlayerControl import NetPackCommon +import GameWorldArena import ChPyNetSendPack import PlayerFBHelpBattle +import GameWorldSkyTower +import CrossChampionship +import CrossBattlefield import PyGameDataStruct import IpyGameDataPY import PyDataManager +import ShareDefine 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 + + if GameWorship.IsWorshipPlayer(playerID): + return True + + if GameWorldSkyTower.IsSkyTowerPassPlayer(playerID): return True SaveDBLimitLV = IpyGameDataPY.GetFuncCfg("PlayerViewCache", 1) @@ -63,6 +71,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) #校验玩家是否上排行榜 billboardMgr = GameWorld.GetBillboard() @@ -73,18 +93,48 @@ 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(): + ## 删除过期的查看缓存数据 + + 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 +143,21 @@ 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 curCache: + return {} + 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 # @@ -112,8 +175,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 @@ -140,6 +203,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 @@ -149,7 +213,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 = "" @@ -165,8 +229,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 +253,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 +272,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 +305,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 +336,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