From 61bae8814450e86b1851cb892086b7081a675ff1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 25 六月 2024 16:08:13 +0800 Subject: [PATCH] 10185 【越南】【港台】【主干】BOSS凭证修改 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py | 108 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 94 insertions(+), 14 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py index 56014c3..aee6b1f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py @@ -28,8 +28,8 @@ import operator import time -Def_CrossBillboard_MaxDataCount = 100 # 跨服榜单数据最大条数暂固定最大为100条,如有需要调整需针对实际情况进行评估(如数据同步、同步封包等) - +Def_CrossBillboard_MaxDataCount = 200 # 跨服榜单数据最大条数暂固定最大为100条,如有需要调整需针对实际情况进行评估(如数据同步、同步封包等) + class CrossBillboardManager(object): ## 跨服排行榜管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效 @@ -171,8 +171,11 @@ "ID":billboardData.ID, "ID2":billboardData.ID2, "Name1":billboardData.Name1, "Name2":billboardData.Name2, "Value1":billboardData.Value1, "Value2":billboardData.Value2, + "Value3":billboardData.Value3, "Value4":billboardData.Value4, + "Value5":billboardData.Value5, "Value6":billboardData.Value6, + "Value7":billboardData.Value7, "Value8":billboardData.Value8, "CmpValue":billboardData.CmpValue, "CmpValue2":billboardData.CmpValue2, - "CmpValue3":billboardData.CmpValue3} + "CmpValue3":billboardData.CmpValue3, "UserData":billboardData.UserData} DataRecordPack.SendEventPack(eventTypeName, dataDict) return @@ -221,7 +224,7 @@ self.__billboardList = self.__billboardList[:len(syncBillboardList)] # 直接用本服以后的排行数据实例clear后覆盖更新,不足的创建新实例 self.__idOrderDict = {} for i, syncData in enumerate(syncBillboardList): - ID, ID2, Name1, Name2, Type2, Value1, Value2, CmpValue, CmpValue2, CmpValue3 = syncData + ID, ID2, Name1, Name2, Type2, Value1, Value2, CmpValue, CmpValue2, CmpValue3, Value3, Value4, Value5, Value6, Value7, Value8, UserData = syncData if i < len(self.__billboardList): billboardData = self.__billboardList[i] billboardData.clear() @@ -239,6 +242,14 @@ billboardData.Type2 = Type2 billboardData.Value1 = Value1 billboardData.Value2 = Value2 + billboardData.Value3 = Value3 + billboardData.Value4 = Value4 + billboardData.Value5 = Value5 + billboardData.Value6 = Value6 + billboardData.Value7 = Value7 + billboardData.Value8 = Value8 + billboardData.UserData = UserData + billboardData.DataLen = len(billboardData.UserData) billboardData.CmpValue = CmpValue billboardData.CmpValue2 = CmpValue2 billboardData.CmpValue3 = CmpValue3 @@ -282,6 +293,14 @@ tobillboardData.Type2 = frbillboardData.Type2 tobillboardData.Value1 = frbillboardData.Value1 tobillboardData.Value2 = frbillboardData.Value2 + tobillboardData.Value3 = frbillboardData.Value3 + tobillboardData.Value4 = frbillboardData.Value4 + tobillboardData.Value5 = frbillboardData.Value5 + tobillboardData.Value6 = frbillboardData.Value6 + tobillboardData.Value7 = frbillboardData.Value7 + tobillboardData.Value8 = frbillboardData.Value8 + tobillboardData.UserData = frbillboardData.UserData + tobillboardData.DataLen = len(tobillboardData.UserData) tobillboardData.CmpValue = frbillboardData.CmpValue tobillboardData.CmpValue2 = frbillboardData.CmpValue2 tobillboardData.CmpValue3 = frbillboardData.CmpValue3 @@ -357,10 +376,17 @@ Type2 = billboardData.Type2 Value1 = billboardData.Value1 Value2 = billboardData.Value2 + Value3 = billboardData.Value3 + Value4 = billboardData.Value4 + Value5 = billboardData.Value5 + Value6 = billboardData.Value6 + Value7 = billboardData.Value7 + Value8 = billboardData.Value8 + UserData = billboardData.UserData CmpValue = billboardData.CmpValue CmpValue2 = billboardData.CmpValue2 CmpValue3 = billboardData.CmpValue3 - syncBillboardList.append([ID, ID2, Name1, Name2, Type2, Value1, Value2, CmpValue, CmpValue2, CmpValue3]) + syncBillboardList.append([ID, ID2, Name1, Name2, Type2, Value1, Value2, CmpValue, CmpValue2, CmpValue3, Value3, Value4, Value5, Value6, Value7, Value8, UserData]) msgData["BillboardDataList"] = syncBillboardList CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_SyncBillboard, msgData, serverGroupIDList) @@ -419,9 +445,17 @@ billboardInfoData.Type2 = billboardData.Type2 billboardInfoData.Value1 = billboardData.Value1 billboardInfoData.Value2 = billboardData.Value2 + billboardInfoData.Value3 = billboardData.Value3 + billboardInfoData.Value4 = billboardData.Value4 + billboardInfoData.Value5 = billboardData.Value5 + billboardInfoData.Value6 = billboardData.Value6 + billboardInfoData.Value7 = billboardData.Value7 + billboardInfoData.Value8 = billboardData.Value8 billboardInfoData.CmpValue = billboardData.CmpValue billboardInfoData.CmpValue2 = billboardData.CmpValue2 billboardInfoData.CmpValue3 = billboardData.CmpValue3 + billboardInfoData.UserData = billboardData.UserData + billboardInfoData.DataLen = len(billboardInfoData.UserData) billboardInfo.CrossBillboardDataList.append(billboardInfoData) billboardInfo.BillboardCount = len(billboardInfo.CrossBillboardDataList) NetPackCommon.SendFakePack(curPlayer, billboardInfo) @@ -454,9 +488,16 @@ name2 = billInfoDict["Name2"] value1 = billInfoDict["Value1"] value2 = billInfoDict["Value2"] + value3 = billInfoDict.get("Value3", 0) + value4 = billInfoDict.get("Value4", 0) + value5 = billInfoDict.get("Value5", 0) + value6 = billInfoDict.get("Value6", 0) + value7 = billInfoDict.get("Value7", 0) + value8 = billInfoDict.get("Value8", 0) cmpValue = billInfoDict["CmpValue"] cmpValue2 = billInfoDict["CmpValue2"] cmpValue3 = billInfoDict["CmpValue3"] + userData = billInfoDict.get("UserData", "") billboardMgr = PyDataManager.GetCrossBillboardManager() billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2) @@ -465,8 +506,11 @@ if cmpValue == billboardData.CmpValue and cmpValue2 == billboardData.CmpValue2 \ and (not cmpValue3 or cmpValue3 == billboardData.CmpValue3) \ and value1 == billboardData.Value1 and value2 == billboardData.Value2 \ + and value3 == billboardData.Value3 and value4 == billboardData.Value4 \ + and value5 == billboardData.Value1 and value6 == billboardData.Value6 \ + and value7 == billboardData.Value1 and value8 == billboardData.Value8 \ and name1 == billboardData.Name1 and name2 == billboardData.Name2 \ - and type2 == billboardData.Type2 and id2 == billboardData.ID2: + and type2 == billboardData.Type2 and id2 == billboardData.ID2 and userData == billboardData.UserData: GameWorld.DebugLog(" 榜单值相同,不同步跨服服务器! ") return @@ -499,16 +543,46 @@ name2 = billInfoDict["Name2"] value1 = billInfoDict["Value1"] value2 = billInfoDict["Value2"] + value3 = billInfoDict.get("Value3", 0) + value4 = billInfoDict.get("Value4", 0) + value5 = billInfoDict.get("Value5", 0) + value6 = billInfoDict.get("Value6", 0) + value7 = billInfoDict.get("Value7", 0) + value8 = billInfoDict.get("Value8", 0) cmpValue = billInfoDict["CmpValue"] cmpValue2 = billInfoDict["CmpValue2"] cmpValue3 = billInfoDict["CmpValue3"] + userData = billInfoDict.get("UserData", "") + kwargs = {"value3":value3, "value4":value4, "value5":value5, "value6":value6, "value7":value7, "value8":value8, "userData":userData} UpdCrossBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, - cmpValue, cmpValue2, cmpValue3, groupValue2, id2) + cmpValue, cmpValue2, cmpValue3, groupValue2, id2, **kwargs) + return + +def UpdCrossBillboardFamily(bType, groupValue1, familyBillInfo, cmpValue, cmpValue2=0, autoSort=True): + ## 更新跨服仙盟榜单 + if not familyBillInfo: + return + if "id" not in familyBillInfo: + return + familyID = familyBillInfo["id"] + familyName = familyBillInfo["name"] + id2 = familyBillInfo["id2"] + name2 = familyBillInfo["name2"] + value1 = familyBillInfo["value1"] + value2 = familyBillInfo["value2"] + value3 = familyBillInfo["value3"] + value4 = familyBillInfo["value4"] + value5 = familyBillInfo["value5"] + type2 = 0 + + UpdCrossBillboard(bType, groupValue1, familyID, familyName, name2, type2, value1, value2, cmpValue, cmpValue2, + id2=id2, autoSort=autoSort, value3=value3, value4=value4, value5=value5) return def UpdCrossBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue, - cmpValue2=0, cmpValue3=0, groupValue2=0, id2=0, autoSort=True, noSortAndSync=False): + cmpValue2=0, cmpValue3=0, groupValue2=0, id2=0, autoSort=True, noSortAndSync=False, + **kwargs): ''' 更新跨服排行榜 @param billboardType: 排行榜索引类型,同个榜单类型可以有多个分组榜单数据,独立排序 @param groupValue1: 榜单分组1 @@ -551,17 +625,16 @@ if not billboardObj.AddBillboardData(billboardData): return + cmpValueChange = isNewData or billboardData.CmpValue != cmpValue or billboardData.CmpValue2 != cmpValue2 or billboardData.CmpValue3 != cmpValue3 # 没设置值默认为时间time,先上榜的排前面 if cmpValue3 == 0: # 时间权值仅在比较值变更的情况下才更新, 防止其他附属值更新时导致比较值相同的玩家名次间会变动的问题 - if isNewData or billboardData.CmpValue != cmpValue or billboardData.CmpValue2 != cmpValue2: + if cmpValueChange: calcTime = GameWorld.ChangeTimeStrToNum("2090-01-01 00:00:00") cmpValue3 = max(0, calcTime - int(time.time())) # 比较值3如果没指定值则默认存当前更新的time else: cmpValue3 = billboardData.CmpValue3 - cmpValueChange = billboardData.CmpValue != cmpValue or billboardData.CmpValue2 != cmpValue2 or billboardData.CmpValue3 != cmpValue3 - # 更新所有值 billboardData.GroupValue1 = groupValue1 billboardData.GroupValue2 = groupValue2 @@ -573,14 +646,21 @@ billboardData.Type2 = type2 billboardData.Value1 = value1 billboardData.Value2 = value2 + billboardData.Value3 = kwargs.get("value3", 0) + billboardData.Value4 = kwargs.get("value4", 0) + billboardData.Value5 = kwargs.get("value5", 0) + billboardData.Value6 = kwargs.get("value6", 0) + billboardData.Value7 = kwargs.get("value7", 0) + billboardData.Value8 = kwargs.get("value8", 0) + billboardData.UserData = kwargs.get("userData", "") + billboardData.DataLen = len(billboardData.UserData) billboardData.CmpValue = cmpValue billboardData.CmpValue2 = cmpValue2 billboardData.CmpValue3 = cmpValue3 - 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" + 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), dataID) - + type2, value1, value2, cmpValue, cmpValue2, cmpValue3, kwargs), dataID) if noSortAndSync: return True if autoSort and cmpValueChange: -- Gitblit v1.8.0