ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
@@ -19,6 +19,7 @@
import ShareDefine
import IpyGameDataPY
import CrossRealmMsg
import PlayerViewCache
import PyGameDataStruct
import ChPyNetSendPack
import DataRecordPack
@@ -29,6 +30,7 @@
import operator
import time
import json
class CrossBillboardManager(object):
    ## 跨服排行榜管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效
@@ -66,6 +68,27 @@
        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
@@ -352,7 +375,7 @@
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:
@@ -450,8 +473,8 @@
#{
#    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等
@@ -771,6 +794,21 @@
                      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):
@@ -843,7 +881,12 @@
    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