| | |
| | | import operator
|
| | | import time
|
| | |
|
| | | Def_CrossBillboard_MaxDataCount = 100 # 跨服榜单数据最大条数暂固定最大为100条,如有需要调整需针对实际情况进行评估(如数据同步、同步封包等)
|
| | | Def_CrossBillboard_MaxDataCount = 200 # 跨服榜单数据最大条数暂固定最大为100条,如有需要调整需针对实际情况进行评估(如数据同步、同步封包等)
|
| | |
|
| | | class CrossBillboardManager(object):
|
| | | ## 跨服排行榜管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效
|
| | |
| | | "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
|
| | |
|
| | |
| | | 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()
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | 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)
|
| | |
| | | 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)
|
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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
|
| | |
| | | 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.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:
|