From 6641154f22dbfafdd14f047f7a2491a9bbeae723 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 27 十月 2025 14:10:43 +0800
Subject: [PATCH] 16 卡牌服务端(优化榜单,增加更新时间字段;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py                     |   26 ++++++--------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py |   12 +++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py                                |    7 +++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBBillboard.py                  |    7 +++++--
 4 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py
index 52484e8..3696a03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py
@@ -1768,6 +1768,7 @@
         ('CmpValue', ctypes.c_ulong),
         ('CmpValue2', ctypes.c_ulong),
         ('CmpValue3', ctypes.c_ulong),
+        ('Time', ctypes.c_ulong),
         ('DataLen', ctypes.c_ushort),
         ('UserData', ctypes.c_char_p),
         ('ADOResult', ctypes.c_ulong),
@@ -1797,6 +1798,7 @@
         self.CmpValue = 0
         self.CmpValue2 = 0
         self.CmpValue3 = 0
+        self.Time = 0
         self.DataLen = 0
         self.UserData = ''
 
@@ -1825,6 +1827,7 @@
         self.CmpValue, pos = CommFunc.ReadDWORD(buf, pos)
         self.CmpValue2, pos = CommFunc.ReadDWORD(buf, pos)
         self.CmpValue3, pos = CommFunc.ReadDWORD(buf, pos)
+        self.Time, pos = CommFunc.ReadDWORD(buf, pos)
         self.DataLen, pos = CommFunc.ReadWORD(buf, pos)
         tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen)
         self.UserData = ctypes.c_char_p(tmp)
@@ -1851,6 +1854,7 @@
         buf = CommFunc.WriteDWORD(buf, self.CmpValue)
         buf = CommFunc.WriteDWORD(buf, self.CmpValue2)
         buf = CommFunc.WriteDWORD(buf, self.CmpValue3)
+        buf = CommFunc.WriteDWORD(buf, self.Time)
         buf = CommFunc.WriteWORD(buf, self.DataLen)
         buf = CommFunc.WriteString(buf, self.DataLen, self.UserData)
         return buf
@@ -1865,6 +1869,7 @@
         length += sizeof(ctypes.c_char) * 33
         length += sizeof(ctypes.c_char) * 65
         length += sizeof(ctypes.c_ubyte)
+        length += sizeof(ctypes.c_ulong)
         length += sizeof(ctypes.c_ulong)
         length += sizeof(ctypes.c_ulong)
         length += sizeof(ctypes.c_ulong)
@@ -1901,6 +1906,7 @@
             CmpValue = %s,
             CmpValue2 = %s,
             CmpValue3 = %s,
+            Time = %s,
             DataLen = %s,
             UserData = %s,
             ADOResult = %s,
@@ -1924,6 +1930,7 @@
                 self.CmpValue,
                 self.CmpValue2,
                 self.CmpValue3,
+                self.Time,
                 self.DataLen,
                 self.UserData,
                 self.ADOResult,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBBillboard.py
index 66cd2fa..910a016 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBBillboard.py
@@ -70,6 +70,8 @@
     def SetCmpValue2(self, cmpValue2): self.__dbData.CmpValue2 = cmpValue2
     def GetCmpValue3(self): return self.__dbData.CmpValue3
     def SetCmpValue3(self, cmpValue3): self.__dbData.CmpValue3 = cmpValue3
+    def GetTime(self): return self.__dbData.Time
+    def SetTime(self, updTime): self.__dbData.Time = updTime
     def GetUserData(self): return self.__dbData.UserData
     def SetUserData(self, userData):
         if not isinstance(userData, str):
@@ -105,6 +107,7 @@
         copyData.SetCmpValue(self.GetCmpValue())
         copyData.SetCmpValue2(self.GetCmpValue2())
         copyData.SetCmpValue3(self.GetCmpValue3())
+        copyData.SetTime(self.GetTime())
         return copyData
     
 class Billboard():
@@ -140,7 +143,7 @@
     def SortData(self):
         GameWorld.DebugLog("榜单排序: billboardType=%s,groupValue1=%s,groupValue2=%s,dataCount=%s" 
                       % (self.__billboardType, self.__groupValue1, self.__groupValue2, len(self.__billboardList)))
-        self.__billboardList.sort(key=lambda b: (b.GetCmpValue(), b.GetCmpValue2(), b.GetCmpValue3()), reverse=True)
+        self.__billboardList.sort(key=lambda b: (b.GetCmpValue(), b.GetCmpValue2(), b.GetCmpValue3(), -b.GetTime()), reverse=True)
         self.__idOrderDict = {} # 排序后重置,下次查询时更新并缓存
         self.__idIndexDict = {}
         self.__sortDelay = False
@@ -239,7 +242,7 @@
                         "Value5":bData.GetValue5(), "Value6":bData.GetValue6(),
                         "Value7":bData.GetValue7(), "Value8":bData.GetValue8(),
                         "CmpValue":bData.GetCmpValue(), "CmpValue2":bData.GetCmpValue2(), 
-                        "CmpValue3":bData.GetCmpValue3(), "UserData":bData.GetUserData()}
+                        "CmpValue3":bData.GetCmpValue3(), "Time":bData.GetTime(), "UserData":bData.GetUserData()}
             DataRecordPack.SendEventPack(eventTypeStr, dataDict)
             
         return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index f674bed..dfb9762 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -220,19 +220,12 @@
     cmpValueChange = isNewData or billboardData.GetCmpValue() != cmpValue or billboardData.GetCmpValue2() != cmpValue2 \
         or (cmpValue3 and billboardData.GetCmpValue3() != cmpValue3)
         
-    # 没设置值默认为时间time,先上榜的排前面
-    if cmpValue3 == 0:
-        # 时间权值仅在比较值变更的情况下才更新, 防止其他附属值更新时导致比较值相同的玩家名次间会变动的问题
-        if cmpValueChange:
-            calcTime = GameWorld.ChangeTimeStrToNum("2090-01-01 00:00:00")
-            cmpValue3 = max(0, calcTime - int(time.time())) # 比较值3如果没指定值则默认存当前更新的time
-        else:
-            cmpValue3 = billboardData.GetCmpValue3()
-            
     billboardData.SetCmpValue(cmpValue)
     billboardData.SetCmpValue2(cmpValue2)
     billboardData.SetCmpValue3(cmpValue3)
-    
+    if cmpValueChange or not billboardData.GetTime():
+        billboardData.SetTime(int(time.time()))
+        
     GameWorld.DebugLog("更新排行榜值: billboardType=%s,groupValue1=%s,groupValue2=%s,dataID=%s,cmpValueChange=%s,cmpValue=%s,cmpValue2=%s,cmpValue3=%s" 
                        % (billboardType, groupValue1, groupValue2, dataID, cmpValueChange,
                           cmpValue, cmpValue2, cmpValue3), dataID)
@@ -294,15 +287,6 @@
     cmpValueChange = isNewData or billboardData.GetCmpValue() != cmpValue or billboardData.GetCmpValue2() != cmpValue2 \
         or (cmpValue3 and billboardData.GetCmpValue3() != cmpValue3)
         
-    # 没设置值默认为时间time,先上榜的排前面
-    if cmpValue3 == 0:
-        # 时间权值仅在比较值变更的情况下才更新, 防止其他附属值更新时导致比较值相同的玩家名次间会变动的问题
-        if cmpValueChange:
-            calcTime = GameWorld.ChangeTimeStrToNum("2090-01-01 00:00:00")
-            cmpValue3 = max(0, calcTime - int(time.time())) # 比较值3如果没指定值则默认存当前更新的time
-        else:
-            cmpValue3 = billboardData.GetCmpValue3()
-            
     # 更新所有值
     billboardData.SetType(billboardType)
     billboardData.SetGroupValue1(groupValue1)
@@ -324,7 +308,9 @@
     billboardData.SetCmpValue(cmpValue)
     billboardData.SetCmpValue2(cmpValue2)
     billboardData.SetCmpValue3(cmpValue3)
-    
+    if cmpValueChange or not billboardData.GetTime():
+        billboardData.SetTime(int(time.time()))
+        
     GameWorld.DebugLog("更新排行榜值: billboardType=%s,groupValue1=%s,groupValue2=%s,dataID=%s,isNewData=%s,cmpValueChange=%s,type2=%s,value1=%s,value2=%s,cmpValue=%s,cmpValue2=%s,cmpValue3=%s,%s" 
                        % (billboardType, groupValue1, groupValue2, dataID, isNewData, cmpValueChange,
                           type2, value1, value2, cmpValue, cmpValue2, cmpValue3, kwargs), dataID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py
index d76dcac..3b09467 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py
@@ -26275,6 +26275,7 @@
         ('CmpValue', ctypes.c_ulong),
         ('CmpValue2', ctypes.c_ulong),
         ('CmpValue3', ctypes.c_ulong),
+        ('Time', ctypes.c_ulong),
         ('DataLen', ctypes.c_ushort),
         ('UserData', ctypes.c_char_p),
         ('ADOResult', ctypes.c_ulong),
@@ -26304,6 +26305,7 @@
         self.CmpValue = 0
         self.CmpValue2 = 0
         self.CmpValue3 = 0
+        self.Time = 0
         self.DataLen = 0
         self.UserData = ''
 
@@ -26335,6 +26337,7 @@
         self.CmpValue, pos = CommFunc.ReadDWORD(buf, pos)
         self.CmpValue2, pos = CommFunc.ReadDWORD(buf, pos)
         self.CmpValue3, pos = CommFunc.ReadDWORD(buf, pos)
+        self.Time, pos = CommFunc.ReadDWORD(buf, pos)
         self.DataLen, pos = CommFunc.ReadWORD(buf, pos)
         tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen)
         self.UserData = ctypes.c_char_p(tmp)
@@ -26361,6 +26364,7 @@
         buf = CommFunc.WriteDWORD(buf, self.CmpValue)
         buf = CommFunc.WriteDWORD(buf, self.CmpValue2)
         buf = CommFunc.WriteDWORD(buf, self.CmpValue3)
+        buf = CommFunc.WriteDWORD(buf, self.Time)
         buf = CommFunc.WriteWORD(buf, self.DataLen)
         buf = CommFunc.WriteString(buf, self.DataLen, self.UserData)
         return buf
@@ -26375,6 +26379,7 @@
         length += sizeof(ctypes.c_char) * 33
         length += sizeof(ctypes.c_char) * 65
         length += sizeof(ctypes.c_ubyte)
+        length += sizeof(ctypes.c_ulong)
         length += sizeof(ctypes.c_ulong)
         length += sizeof(ctypes.c_ulong)
         length += sizeof(ctypes.c_ulong)
@@ -26412,6 +26417,7 @@
         rec[u'CmpValue'] = self.CmpValue
         rec[u'CmpValue2'] = self.CmpValue2
         rec[u'CmpValue3'] = self.CmpValue3
+        rec[u'Time'] = self.Time
         rec[u'DataLen'] = self.DataLen
         rec[u'UserData'] = fix_incomingText(self.UserData)
         return rec
@@ -26437,6 +26443,7 @@
         self.CmpValue = rec.get(u'CmpValue', 0)
         self.CmpValue2 = rec.get(u'CmpValue2', 0)
         self.CmpValue3 = rec.get(u'CmpValue3', 0)
+        self.Time = rec.get(u'Time', 0)
         self.DataLen = rec.get(u'DataLen', 0)
         self.UserData = fix_outgoingText(rec.get(u'UserData', u''))
 
@@ -26493,6 +26500,7 @@
             CmpValue = %s,
             CmpValue2 = %s,
             CmpValue3 = %s,
+            Time = %s,
             DataLen = %s,
             UserData = %s,
             ADOResult = %s,
@@ -26516,6 +26524,7 @@
                 self.CmpValue,
                 self.CmpValue2,
                 self.CmpValue3,
+                self.Time,
                 self.DataLen,
                 self.UserData,
                 self.ADOResult,
@@ -26523,7 +26532,7 @@
         return output
 
     def dumpString(self):
-        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
+        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
                 self.GroupValue1,
                 self.GroupValue2,
                 self.BillboardType,
@@ -26543,6 +26552,7 @@
                 self.CmpValue,
                 self.CmpValue2,
                 self.CmpValue3,
+                self.Time,
                 self.DataLen,
                 self.UserData,
             )

--
Gitblit v1.8.0