From 4d0b16c36a6088988eb4d8cd6fbba0c572b4c5bb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 19 二月 2020 16:17:10 +0800
Subject: [PATCH] 8374 【后端】【主干】通知客户端攻击封包增加专精技能(技能升级表增加专精技能编号字段)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py | 75 ++++++++++++++++++++++++-------------
1 files changed, 48 insertions(+), 27 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
index 9709ed7..87ef793 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
@@ -29,24 +29,11 @@
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):
## 是否保存基本的缓存数据
@@ -75,11 +62,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
@@ -95,6 +101,14 @@
curCache.PlayerID = playerID
playerViewCachePyDict[playerID] = curCache
return curCache
+
+def GetCachePropDataDict(curCache):
+ ## 获取缓存基础属性字典信息
+ if not hasattr(curCache, "PropDataDict"):
+ curCache.PropDataDict = {}
+ if not curCache.PropDataDict:
+ curCache.PropDataDict = eval(curCache.PropData)
+ return curCache.PropDataDict
#//04 01 地图同步玩家缓存数据到GameServer#tagMGUpdatePlayerCache
#
@@ -140,6 +154,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 +180,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 +204,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 +223,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 +256,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 +287,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