From 40f2e314ff6df3d45e643419c6f155bb665b78dc Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 14 九月 2024 13:34:19 +0800
Subject: [PATCH] 10249 【越南】【砍树】【英文】仙宫(增加获得气运提示;)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerRecData.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 98 insertions(+), 9 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerRecData.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerRecData.py
index 683b67e..a471d0b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerRecData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerRecData.py
@@ -15,9 +15,14 @@
#"""Version = 2024-07-02 16:30"""
#-------------------------------------------------------------------------------
-import CommFunc
+import ChConfig
+import ShareDefine
+import PyDataManager
import PyGameDataStruct
+import ChPyNetSendPack
+import NetPackCommon
import GameWorld
+import CommFunc
import time
@@ -58,8 +63,8 @@
def GetUserData(self): return self.dbRecData.UserData
def SetUserData(self, userData):
if type(userData) != str:
- userData = str(userData).replace(" ", "")
- self.dbRecData.UserData = userData
+ userData = str(userData)
+ self.dbRecData.UserData = userData.replace(" ", "")
self.dbRecData.UserDataLen = len(self.dbRecData.UserData)
if self.evalUserData != None:
self.evalUserData = None
@@ -117,9 +122,12 @@
def DelRecDataByType(self, recType):
## 删除某个记录类型所有玩家记录
- GameWorld.DebugLog("删除所有玩家指定记录类型: recType=%s" % recType)
- self.recTypeDict.pop(recType, None)
- return
+ recDict = self.recTypeDict.pop(recType, {})
+ delCount = 0
+ for recList in recDict.values():
+ delCount += len(recList)
+ GameWorld.DebugLog("删除所有玩家指定记录类型: recType=%s,delCount=%s" % (recType, delCount))
+ return delCount
def DelRecDataByTypePlayer(self, recType, delPlayerID):
## 删除玩家某个类型记录
@@ -223,17 +231,22 @@
def GetPlayerRecDataList(self, recType, playerID):
## 获取玩家记录类型对应记录列表 [recData, ...]
if recType not in self.recTypeDict:
- return []
+ self.recTypeDict[recType] = {}
playerRecDataDict = self.recTypeDict[recType]
if playerID not in playerRecDataDict:
- return []
- return playerRecDataDict[playerID]
+ playerRecDataDict[playerID] = []
+ playerRecDataList = playerRecDataDict[playerID]
+ return playerRecDataList
def GetPlayerRecDataDict(self, recType):
## 获取记录类型对应所有玩家的记录字典 {playerID:[recData, ...], ...}
if recType not in self.recTypeDict:
return {}
return self.recTypeDict[recType]
+
+ def SortRecDataList(self, recDataList):
+ recDataList.sort(key=lambda r: (r.GetTime()), reverse=False)
+ return
# 保存数据 存数据库和realtimebackup
def GetSaveData(self):
@@ -269,3 +282,79 @@
return pos
PlayerRecDataTemp = PlayerRecData()
+
+def OnPlayerLogin(curPlayer):
+ playerID = curPlayer.GetPlayerID()
+ playerRecMgr = PyDataManager.GetDBPlayerRecDataManager()
+ for recType in ChConfig.Def_PlayerRecLoginNotifyList:
+ recDataList = playerRecMgr.GetPlayerRecDataList(recType, playerID)
+ if not recDataList:
+ continue
+ SyncPlayerRecInfo(curPlayer, recType, recDataList)
+ return
+
+def MapServer_AddPlayerRec(curPlayer, recType, valueList, userData="", notifyType=0):
+ '''
+ @todo: 添加玩家记录
+ @param recType: 通用记录类型, 对应 ShareDefine.Def_PlayerRecTypeList
+ @param valueList: 数值列表[value1, value2, ...], 按顺序, 支持value1 ~ value8
+ @param userData: 自定义字符信息
+ @param notifyType: 0-不通知; 1-通知单条; 2-通知全部
+ '''
+ playerID = curPlayer.GetPlayerID()
+ if recType not in ShareDefine.Def_PlayerRecTypeList:
+ GameWorld.ErrLog("玩家记录类型错误: recType=%s" % recType, playerID)
+ return
+
+ playerRecMgr = PyDataManager.GetDBPlayerRecDataManager()
+ recDataList = playerRecMgr.GetPlayerRecDataList(recType, playerID)
+ if recDataList and len(recDataList) >= ChConfig.Def_PlayerRecCountDict.get(recType, 50):
+ playerRecMgr.SortRecDataList(recDataList)
+ recDataList.pop(0) # 删除第一个
+
+ recData = playerRecMgr.AddPlayerRecData(recType, playerID)
+
+ for num, value in enumerate(valueList, 1):
+ if num > 8:
+ break
+ getattr(recData, "SetValue%s" % num)(min(ChConfig.Def_UpperLimit_DWord, value))
+
+ if userData:
+ recData.SetUserData(userData)
+
+ if notifyType == 1:
+ SyncPlayerRecInfo(curPlayer, recType, [recData])
+ elif notifyType == 2:
+ SyncPlayerRecInfo(curPlayer, recType, recDataList)
+
+ return recData
+
+def SyncPlayerRecInfo(curPlayer, recType, recDataList):
+ if not recDataList:
+ return
+
+ playerRecList = []
+ for recData in recDataList:
+ if not recData:
+ continue
+ rec = ChPyNetSendPack.tagGCPlayerRec()
+ rec.Time = recData.GetTime()
+ rec.Value1 = recData.GetValue1()
+ rec.Value2 = recData.GetValue2()
+ rec.Value3 = recData.GetValue3()
+ rec.Value4 = recData.GetValue4()
+ rec.Value5 = recData.GetValue5()
+ rec.Value6 = recData.GetValue6()
+ rec.Value7 = recData.GetValue7()
+ rec.Value8 = recData.GetValue8()
+ rec.UserData = recData.GetUserData()
+ rec.UserDataLen = len(rec.UserData)
+ playerRecList.append(rec)
+
+ clientPack = ChPyNetSendPack.tagGCPlayerRecInfo()
+ clientPack.Clear()
+ clientPack.Type = recType
+ clientPack.PlayerRecList = playerRecList
+ clientPack.Count = len(clientPack.PlayerRecList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
--
Gitblit v1.8.0