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