From d7f8d55a035e5351c6af9f6c49ec5339c844d903 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 04 十一月 2019 21:12:40 +0800
Subject: [PATCH] 8321 【主干】【后端】GM工具优化(非禁言状态时上线也通知)
---
ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py b/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
index a5c8d44..fe34525 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
@@ -42,6 +42,40 @@
GameWorld.Log("LoadPyGameData!!id = %s %s"%(id(pyGameDataMgr), len(gameBuffer)))
return pyGameDataMgr.LoadGameData(gameBuffer, pos)
+#玩家缓存管理,该类只做数据缓存存取,不写功能逻辑,防止重读脚本时功能逻辑脚本不生效
+class PlayerViewCachePyManager(object):
+
+ def __init__(self):
+ self.playerViewCachePyDict = {} # 玩家缓存 {playerID:tagPlayerViewCachePy, ...}
+ return
+
+ # 保存数据 存数据库和realtimebackup
+ def GetSaveData(self):
+ savaData = ""
+ cntData = ""
+ cnt = 0
+
+ for dbData in self.playerViewCachePyDict.values():
+ cnt += 1
+ savaData += dbData.getBuffer()
+
+ GameWorld.Log("Save PlayerViewCachePy count :%s" % cnt)
+ return CommFunc.WriteDWORD(cntData, cnt) + savaData
+
+ # 从数据库载入数据
+ def LoadPyGameData(self, datas, pos, dataslen):
+ cnt, pos = CommFunc.ReadDWORD(datas, pos)
+ GameWorld.Log("Load PlayerViewCachePy count :%s" % cnt)
+
+ for _ in xrange(cnt):
+ dbData = PyGameDataStruct.tagPlayerViewCachePy()
+ dbData.clear()
+ pos += dbData.readData(datas, pos, dataslen)
+
+ self.playerViewCachePyDict[dbData.PlayerID] = dbData
+
+ return pos
+
#拍卖记录管理,该类只做数据缓存存取,不写功能逻辑,防止重读脚本时功能逻辑脚本不生效
class AuctionRecordManager(object):
@@ -117,7 +151,9 @@
def __InitAuctionAttentionAttrEx(self, attentionData):
## 初始化拍卖关注实例附加属性
- setattr(attentionData, "AttentionItemIDList", [] if not attentionData.AttentionInfo else eval(attentionData.AttentionInfo))
+ setattr(attentionData, "AttentionItemIDList", [])
+ if attentionData.AttentionInfo.startswith("[") and attentionData.AttentionInfo.endswith("]"):
+ attentionData.AttentionItemIDList = eval(attentionData.AttentionInfo)
return
#拍卖物品数据缓存,该类只做数据缓存存取,不写功能逻辑,防止重读脚本时功能逻辑脚本不生效
@@ -129,11 +165,16 @@
self.worldAuctionItemList = [] # 全服拍品列表缓存 [tagDBAuctionItem, ...]
self.worldAuctionItemQueryDict = {} # 全服拍品过滤查询缓存,添加拍品时重置 {(job, (itemType, ...), itemClassLV, (itemID, ...)):[tagDBAuctionItem, ...], ...}
self.familyAuctionItemDict = {} # 仙盟拍品列表缓存,包含转移到全服的仙盟拍品 {familyID:[tagDBAuctionItem, ...], ...}
+ self.sysBuyoutItemByTimeList = [] # 系统一口价拍品按时间排序缓存 [tagDBAuctionItem, ...]
self.nowBiddingAuctionItemDict = {} # 玩家当前是最高竞价的拍品,含所有拍品 {playerID:[tagDBAuctionItem, ...], ...}
self.hisBiddingAuctionItemDict = {} # 玩家曾经参与过竞价的拍品,含所有拍品 {playerID:[tagDBAuctionItem, ...], ...}
self.myAuctionItemDict = {} # 玩家拍卖中的物品 ,不包含仙盟拍品,由前端界面自行整合数据 {playerID:[tagDBAuctionItem, ...], ...}
self.myAttentionItemDict = {} # 玩家关注中的物品 ,不包含仙盟拍品,由前端界面自行整合数据,只保存在线的玩家,离线清除,上线不同步,由前端查询 {playerID:[tagDBAuctionItem, ...], ...}
+
+ self.worldAuctionItemCountDict = {} # 全服拍品物品ID对应件数统计 {itemID:件数, ...}
+ self.worldAuctionJobEquipCountDict = {} # 全服拍品职业装备对应件数统计 {(职业,阶,颜色,是否套装):件数, ...}
+ self.worldAuctionReplenishTimeDict = {} # 全服拍品动态上架历史处理时间 {cfgID:time, ...}
return
# 保存数据 存数据库和realtimebackup
@@ -170,6 +211,7 @@
class PyGameDataManager(object):
def __init__(self):
+ self.PlayerViewCachePyManager = PlayerViewCachePyManager()
self.AuctionAttentionManager = AuctionAttentionManager()
self.AuctionRecordManager = AuctionRecordManager()
self.AuctionItemManager = AuctionItemManager()
@@ -190,6 +232,7 @@
def GetSaveData(self):
buff = ""
+ buff += self.PlayerViewCachePyManager.GetSaveData()
buff += self.AuctionAttentionManager.GetSaveData()
buff += self.AuctionRecordManager.GetSaveData()
buff += self.AuctionItemManager.GetSaveData()
@@ -209,6 +252,7 @@
return buff
def LoadGameData(self, gameBuffer, pos):
+ pos = self.PlayerViewCachePyManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
pos = self.AuctionAttentionManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
pos = self.AuctionRecordManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
pos = self.AuctionItemManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
@@ -235,6 +279,11 @@
PyGameData.g_pyGameDataManager = pyGameDataMgr
return pyGameDataMgr
+def GetPlayerViewCachePyManager():
+ # 拍卖记录表
+ pyGameDataMgr = GetPyGameDataManager()
+ return pyGameDataMgr.PlayerViewCachePyManager
+
def GetAuctionItemManager():
## 拍卖物品缓存数据管理
pyGameDataMgr = GetPyGameDataManager()
--
Gitblit v1.8.0