From 8ae000433e6306d93d94160c1fb5bec42f768222 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 22 七月 2024 17:53:12 +0800
Subject: [PATCH] 10223 【越南】【砍树】【主干】【港台】秘境寻宝(秘境榜单数据备份优化;优化本服跨服榜备份数据规则,后台查询本服跨服历史榜统一逻辑;)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py     |   11 ++-
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py        |    4 +
 ServerPython/CoreServerGroup/GameServer/Script/DataRecordPack.py                |   83 ++++++++++-----------------
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActXianXiaMJ.py     |    5 +
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py |   37 ++++++++----
 5 files changed, 67 insertions(+), 73 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/DataRecordPack.py b/ServerPython/CoreServerGroup/GameServer/Script/DataRecordPack.py
index 0d2dc6a..9e36539 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/DataRecordPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/DataRecordPack.py
@@ -233,13 +233,6 @@
     SendEventPack("GameMapOnLinePlayerCnt", dataDict)
     return
 
-## 每天记录排行榜数据
-#  @param billboardType: 排行榜类型
-#  @return: None
-def DR_BillboardDataByDay(billboardType):
-    DR_BillboardData(billboardType, "BillboardDataByDay")
-    return
-
 ## 记录排行榜数据
 #  @param billboardType: 排行榜类型
 #  @return: None
@@ -248,42 +241,42 @@
     if not billBoard:
         #找不到排行榜
         return
+    dataCount = billBoard.GetCount()
+    if not dataCount:
+        return
     
-    for index in range(0, billBoard.GetCount()):
+    serverTime = GameWorld.GetServerTime()
+    timeStr = "%02d%02d%02d%s" % (serverTime.hour, serverTime.minute, serverTime.second, str(serverTime.microsecond)[:3])
+    eventTypeStr = "Billboard_%s_%s_%s" % (billboardType, eventName, timeStr)
+    
+    dataDict = {"BillboardType":billboardType, "DataCount":dataCount, "addDataDict":addDataDict}
+    SendEventPack(eventTypeStr, dataDict)
+    
+    for index in range(0, dataCount):
         billBoardData = billBoard.At(index)
         if not billBoardData:
             continue
-        
-        objID = billBoardData.GetID()
-        objID2 = billBoardData.GetID2()
-        name1 = billBoardData.GetName1()
-        name2 = billBoardData.GetName2()
-        type2 = billBoardData.GetType2()
-        value1 = billBoardData.GetValue1()
-        value2 = billBoardData.GetValue2()
-        value3 = billBoardData.GetValue3()
-        value4 = billBoardData.GetValue4()
-        value5 = billBoardData.GetValue5()
-        value6 = billBoardData.GetValue6()
-        value7 = billBoardData.GetValue7()
-        value8 = billBoardData.GetValue8()
-        cmpValue = billBoardData.GetCmpValue()
-        cmpValue2 = billBoardData.GetCmpValue2()
-        cmpValue3 = billBoardData.GetCmpValue3()
-        userData = billBoardData.GetUserData()
-        
-        dataDict = {"BillboardType":billboardType,
-                    "Place":index,  "ObjID":objID, "ObjID2":objID2, "Name1":name1, 
-                    "Name2":name2,  "Type2":type2, "Value1":value1, "Value2":value2,
-                    "CmpValue":cmpValue, "CmpValue2":cmpValue2, "CmpValue3":cmpValue3, 
-                    "Value3":value3, "Value4":value4, "Value5":value5, "Value6":value6, 
-                    "Value7":value7, "Value8":value8, "UserData":userData
+        rank = index + 1
+        dataDict = {"Rank":rank,
+                    "ID":billBoardData.GetID(),
+                    "ID2":billBoardData.GetID2(),
+                    "Name1":billBoardData.GetName1(),
+                    "Name2":billBoardData.GetName2(),
+                    "Type2":billBoardData.GetType2(),
+                    "Value1":billBoardData.GetValue1(),
+                    "Value2":billBoardData.GetValue2(),
+                    "Value3":billBoardData.GetValue3(),
+                    "Value4":billBoardData.GetValue4(),
+                    "Value5":billBoardData.GetValue5(),
+                    "Value6":billBoardData.GetValue6(),
+                    "Value7":billBoardData.GetValue7(),
+                    "Value8":billBoardData.GetValue8(),
+                    "CmpValue":billBoardData.GetCmpValue(),
+                    "CmpValue2":billBoardData.GetCmpValue2(),
+                    "CmpValue3":billBoardData.GetCmpValue3(),
+                    "UserData":billBoardData.GetUserData(),
                     }
-        
-        dataDict.update(addDataDict)
-        
-        #发送封包
-        SendEventPack("%s_%s" % (eventName, billboardType), dataDict)
+        SendEventPack(eventTypeStr, dataDict)
     return
 
 ## GM执行命令操作
@@ -393,20 +386,6 @@
     #发送封包
     SendEventPack("ResetGameDataRecord", dataDict)
     return
-
-
-## 复制的排行榜记录
-#  @param Place: 名次
-#  @param playerID: 玩家ID
-#  @param playerName: 玩家名字
-#  @param playerLV: 玩家等级
-#  @param playerJob: 玩家职业
-#  @param totalPoint: 积分
-#  @return: None
-def DR_BillboardCopy(billboardType):
-    DR_BillboardData(billboardType, "BillboardCopy")
-    return
-
 
 ## 弹劾玩家家族职位变更
 #  @param familyID: 家族ID
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
index 4e12dba..ccb8aa3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
@@ -122,10 +122,10 @@
     def GetGroupValue2(self): return self.__groupValue2
     
     def ClearData(self):
-        GameWorld.Log("CrossBillboard ClearData billboardType=%s,groupValue1=%s,groupValue2=%s" 
-                      % (self.__billboardType, self.__groupValue1, self.__groupValue2))
+        GameWorld.Log("CrossBillboard ClearData billboardType=%s,groupValue1=%s,groupValue2=%s,dataCount=%s" 
+                      % (self.__billboardType, self.__groupValue1, self.__groupValue2, len(self.__billboardList)))
         if GameWorld.IsCrossServer():
-            self.SaveDRData()
+            self.SaveDRData("Clear")
         self.__billboardList = [] # [tagDBCrossBillboard, ...] 
         self.__idOrderDict = {} # {id:名次, ...}
         
@@ -169,16 +169,25 @@
         order = idOrderDict[findID]
         return order - 1
     
-    def SaveDRData(self):
+    def SaveDRData(self, eventName="", addDataDict={}):
         ## 记录流向数据
-        eventTypeName = "CrossBillboard_%s" % (self.__billboardType)
-        drDict = {"BillboardType":self.__billboardType, "GroupValue1":self.__groupValue1, "GroupValue2":self.__groupValue2, 
-                  "DataCount":len(self.__billboardList)}
-        DataRecordPack.SendEventPack(eventTypeName, drDict)
+        
+        dataCount = len(self.__billboardList)
+        if not dataCount:
+            return
+        
+        serverTime = GameWorld.GetServerTime()
+        timeStr = "%02d%02d%02d%s" % (serverTime.hour, serverTime.minute, serverTime.second, str(serverTime.microsecond)[:3])
+        eventTypeStr = "Billboard_%s_%s_%s_%s_%s" % (self.__billboardType, self.__groupValue1, self.__groupValue2, eventName, timeStr)
+        
+        dataDict = {"BillboardType":self.__billboardType, "DataCount":dataCount, "addDataDict":addDataDict,
+                    "GroupValue1":self.__groupValue1, "GroupValue2":self.__groupValue2}
+        DataRecordPack.SendEventPack(eventTypeStr, dataDict)
+        
         for index, billboardData in enumerate(self.__billboardList):
-            dataDict = {"BillboardType":billboardData.BillboardType, "GroupValue1":billboardData.GroupValue1, 
-                        "GroupValue2":billboardData.GroupValue2, "Type2":billboardData.Type2,
-                        "ID":billboardData.ID, "ID2":billboardData.ID2, "Place":index,  
+            rank = index + 1
+            dataDict = {"Type2":billboardData.Type2, "Rank":rank,
+                        "ID":billboardData.ID, "ID2":billboardData.ID2,  
                         "Name1":billboardData.Name1, "Name2":billboardData.Name2,
                         "Value1":billboardData.Value1, "Value2":billboardData.Value2,
                         "Value3":billboardData.Value3, "Value4":billboardData.Value4,
@@ -186,7 +195,7 @@
                         "Value7":billboardData.Value7, "Value8":billboardData.Value8,
                         "CmpValue":billboardData.CmpValue, "CmpValue2":billboardData.CmpValue2, 
                         "CmpValue3":billboardData.CmpValue3, "UserData":billboardData.UserData}
-            DataRecordPack.SendEventPack(eventTypeName, dataDict)
+            DataRecordPack.SendEventPack(eventTypeStr, dataDict)
         return
     
     def GetBillboardDataList(self): return self.__billboardList
@@ -273,10 +282,12 @@
 def CopyBillboardOnDay():
     billboardMgr = PyDataManager.GetCrossBillboardManager()
     for billboardType in ShareDefine.CrossBillboardTypeList:
+        if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak]:
+            continue
         groupList = billboardMgr.GetBillboardGroupList(billboardType)
         for billboardType, groupValue1, groupValue2 in groupList:
             billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
-            billboardObj.SaveDRData()
+            billboardObj.SaveDRData("OnDay")
     return
 
 def CopyBillboard(fromBillboardType, toBillboardType):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
index d79e287..b9d120c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
@@ -50,10 +50,7 @@
     
     __OnEndAward(actNum, ipyData, dayIndex) # 兼容活动没有配置参与时间段的在活动结束补触发结算奖励
     
-    DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_BossTrialSubmitFamily, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
     PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitFamilyBak, ShareDefine.Def_BT_BossTrialSubmitFamily)
-    
-    DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_BossTrialSubmit, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
     PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitBak, ShareDefine.Def_BT_BossTrialSubmit)
     GameWorld.Log("=================================================================================")
     return
@@ -82,6 +79,10 @@
     
     templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex)
     __OnEndAward_Personal(templateID, ShareDefine.Def_BT_BossTrialSubmit)
+    
+    # 流向备份     
+    DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_BossTrialSubmitFamily, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
+    DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_BossTrialSubmit, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
     GameWorld.Log("=================================================================================")
     return
 
@@ -495,7 +496,7 @@
     
     # 结算时排序并保存榜单数据流向
     billboardObj.SortData()
-    billboardObj.SaveDRData()
+    billboardObj.SaveDRData("BossTrial", {"cfgID":cfgID, "zoneID":zoneID})
     
     GameWorld.Log("结算跨服Boss凭证个人排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s" 
                   % (billboardType, zoneID, cfgID, templateID, billboardDataCount))
@@ -543,7 +544,7 @@
     
     # 结算时排序并保存榜单数据流向
     billboardObj.SortData()
-    billboardObj.SaveDRData()
+    billboardObj.SaveDRData("BossTrial", {"cfgID":cfgID, "zoneID":zoneID})
     
     GameWorld.Log("结算跨服Boss凭证仙盟排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s" 
                   % (billboardType, zoneID, cfgID, templateID, billboardDataCount))
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActXianXiaMJ.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActXianXiaMJ.py
index 2bbfd3e..ef75024 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActXianXiaMJ.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActXianXiaMJ.py
@@ -40,7 +40,6 @@
     
     __OnEndAward(actNum, ipyData, dayIndex) # 兼容活动没有配置参与时间段的在活动结束补触发结算奖励
     
-    DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_XianXiaMJScore, "XianXiaMJ", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
     GameWorld.Log("=================================================================================")
     return
 
@@ -64,6 +63,8 @@
     GameWorld.Log("=== 本服仙匣秘境活动发放榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
     
     __OnEndAward_Personal(ipyData.GetPersonalTemplateID(), ShareDefine.Def_BT_XianXiaMJScore)
+    
+    DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_XianXiaMJScore, "XXMJ", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
     GameWorld.Log("=================================================================================")
     return
 
@@ -258,7 +259,7 @@
     
     # 结算时排序并保存榜单数据流向
     billboardObj.SortData()
-    billboardObj.SaveDRData()
+    billboardObj.SaveDRData("XXMJ", {"cfgID":cfgID, "zoneID":zoneID})
     
     GameWorld.Log("结算跨服仙匣秘境个人排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s" 
                   % (billboardType, zoneID, cfgID, templateID, billboardDataCount))
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py
index 23476fe..7f8b6c1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py
@@ -43,9 +43,11 @@
 
 def NoteOssBillboardInfoByDay():
     ## 每天记录排行榜信息到oss中
+    if GameWorld.IsCrossServer():
+        return
     Def_NoteOssBillboardTypeList = IpyGameDataPY.GetFuncEvalCfg("BillboardSet", 1)
     for billboardType in Def_NoteOssBillboardTypeList:
-        DataRecordPack.DR_BillboardDataByDay(billboardType)
+        DataRecordPack.DR_BillboardData(billboardType, "OnDay")
     return
 
 def CopyBillboardOnDay():

--
Gitblit v1.8.0