From a9039a33299cc764fb4225a9d49b15d10414cfb8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 七月 2024 15:14:39 +0800
Subject: [PATCH] 10195 【香港】【越南】【主干】【砍树】新增消耗记录(代币获得、消耗记录;后台扣除货币支持扣代币;)

---
 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