| | |
| | | import ShareDefine
|
| | | import IpyGameDataPY
|
| | | import CrossRealmMsg
|
| | | import PlayerViewCache
|
| | | import PyGameDataStruct
|
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | |
| | |
|
| | | import operator
|
| | | import time
|
| | | import json
|
| | |
|
| | | class CrossBillboardManager(object):
|
| | | ## 跨服排行榜管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效
|
| | |
| | | for key in self.__billboardDict.keys():
|
| | | if key[0] == billboardType:
|
| | | self.__billboardDict.pop(key)
|
| | | return
|
| | | |
| | | def ClearBillboard(self, billboardType, groupValue1=None, groupValue2=None):
|
| | | '''清除某个类型的榜单所有数据,可指定过滤groupValue,有流向记录
|
| | | @param groupValue1: 不为None时验证 groupValue1 是否相同
|
| | | @param groupValue2: 不为None时验证 groupValue2 是否相同
|
| | | 如果groupValue1 groupValue2 都传入None,相当于清空 billboardType 类型的所有榜单数据
|
| | | '''
|
| | | clearList = []
|
| | | for bType, gValue1, gValue2 in self.__billboardDict.keys():
|
| | | if bType != billboardType:
|
| | | continue
|
| | | if groupValue1 != None and groupValue1 != gValue1:
|
| | | continue
|
| | | if groupValue2 != None and groupValue2 != gValue2:
|
| | | continue
|
| | | key = (bType, gValue1, gValue2)
|
| | | clearList.append(key)
|
| | | |
| | | for bType, gValue1, gValue2 in clearList:
|
| | | self.GetCrossBillboard(bType, gValue1, gValue2).ClearData()
|
| | | return
|
| | |
|
| | | # 保存数据 存数据库和realtimebackup
|
| | |
| | | def CopyBillboardOnDay():
|
| | | billboardMgr = PyDataManager.GetCrossBillboardManager()
|
| | | for billboardType in ShareDefine.CrossBillboardTypeList:
|
| | | if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak]:
|
| | | if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, ShareDefine.Def_CBT_CrossRealmPK]:
|
| | | continue
|
| | | groupList = billboardMgr.GetBillboardGroupList(billboardType)
|
| | | for billboardType, groupValue1, groupValue2 in groupList:
|
| | |
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE Type; //榜单类型
|
| | | # BYTE GroupValue1; // 分组值1
|
| | | # BYTE GroupValue2; // 分组值2,与分组值1组合归为同组榜单数据
|
| | | # DWORD GroupValue1; // 分组值1
|
| | | # DWORD GroupValue2; // 分组值2,与分组值1组合归为同组榜单数据
|
| | | # DWORD StartIndex; //查看的起始名次索引, 默认0
|
| | | # BYTE WatchCnt; //查看条数,默认20,最大不超过100
|
| | | # DWORD WatchID; //查看指定ID名次前后,如玩家ID、家族ID等
|
| | |
| | | id2=id2, autoSort=autoSort, value3=value3, value4=value4, value5=value5)
|
| | | return
|
| | |
|
| | | def UpdCrossBillboardPlayer(bType, playerID, groupValue1, cmpValue, cmpValue2=0, value1=0, value2=0, groupValue2=0, autoSort=True, **kwargs):
|
| | | ## 通用的更新跨服玩家榜,GameServer直接调用
|
| | | playerInfo = PlayerViewCache.GetShotCacheDict(playerID, "AccID", "ServerID", "Face", "FacePic")
|
| | | name1 = playerInfo.get("Name", "")
|
| | | name2 = playerInfo.get("AccID", "")
|
| | | type2 = playerInfo.get("Job", 1)
|
| | | if not value1:
|
| | | value1 = playerInfo.get("RealmLV", 1)
|
| | | value3 = playerInfo.get("Face", 0)
|
| | | value4 = playerInfo.get("FacePic", 0)
|
| | | value5 = playerInfo.get("ServerID", 0)
|
| | | UpdCrossBillboard(bType, groupValue1, playerID, name1, name2, type2, value1, value2, cmpValue, cmpValue2, |
| | | 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,
|
| | | **kwargs):
|
| | |
| | | billboardData.Value6 = kwargs.get("value6", 0)
|
| | | billboardData.Value7 = kwargs.get("value7", 0)
|
| | | billboardData.Value8 = kwargs.get("value8", 0)
|
| | | billboardData.UserData = kwargs.get("userData", "") |
| | | userData = kwargs.get("userData", "")
|
| | | if userData and not isinstance(userData, str):
|
| | | if isinstance(userData, dict) or isinstance(userData, list):
|
| | | userData = json.dumps(userData, ensure_ascii=False)
|
| | | userData = userData.replace(" ", "")
|
| | | billboardData.UserData = userData |
| | | billboardData.DataLen = len(billboardData.UserData)
|
| | | billboardData.CmpValue = cmpValue
|
| | | billboardData.CmpValue2 = cmpValue2
|