hxp
2026-03-02 7dfa5fbeb21542ca15f61d5979caaacccab63450
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -106,7 +106,7 @@
#    
#    return True
def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, autoSort=False, **kwargs):
def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, autoSort=False, groupValue1=0, **kwargs):
    ## 更新玩家排行榜
    
    #if not cmpValue and not cmpValue2 and not cmpValue3:
@@ -123,7 +123,6 @@
    kwargs["value5"] = curPlayer.GetModelMark()
    kwargs["value6"] = curPlayer.GetEquipShowSwitch()
    
    groupValue1 = 0
    UpdateBillboard(bType, groupValue1, playerID, playerName, playerOpInfo, playerJob, value1, value2, 
                    cmpValue, cmpValue2, cmpValue3, autoSort=autoSort, **kwargs)
    return
@@ -389,9 +388,37 @@
    clientPack.ViewIDDataCnt = len(clientPack.ViewIDDataList)
    return clientPack
def DoGiveBillboardAwardByMail(billboardType, funcName, billboardAwardDict, mailKey):
def SetOrderRuleListByActTempID(billboardType, templateID, groupValue1=0, groupValue2=0):
    ## 根据活动榜单模版更新排名规则
    orderRuleList = []
    orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBillboardAward", templateID)
    if orderIpyDataList:
        for ipyData in orderIpyDataList:
            orderRuleList.append([ipyData.GetRankB(), ipyData.GetNeedValue()])
    billboardMgr = DBDataMgr.GetBillboardMgr()
    billBoard = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
    billBoard.SetOrderRuleList(orderRuleList)
    return
def DoGiveBillboardAwardByActTempID(billboardType, funcName, templateID, mailKey, groupValue1=0, groupValue2=0, isClearData=False):
    ## 根据活动榜单模版结算排名奖励,邮件发放
    # @param funcName: 自定义的功能名称
    billboardAwardDict = {}
    orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBillboardAward", templateID)
    if orderIpyDataList:
        for ipyData in orderIpyDataList:
            billboardAwardDict[str(ipyData.GetRankB())] = ipyData.GetAwardItemList()
    DoGiveBillboardAwardByMail(billboardType, funcName, billboardAwardDict, mailKey, groupValue1, groupValue2, isClearData)
    return
def DoGiveBillboardAwardByMail(billboardType, funcName, billboardAwardDict, mailKey, groupValue1=0, groupValue2=0, isClearData=False):
    ## 结算排行奖励邮件发放
    GameWorld.Log("=== %s结算排行奖励! === " % (funcName))
    # @param funcName: 自定义的功能名称
    # @param billboardAwardDict: {"名次":[[itemID,itemCnt], ...], ...}
    # @param mailKey: 邮件模版key
    GameWorld.Log("----- %s 结算排行奖励! -----" % (funcName))
    if not billboardAwardDict:
        return
    orderList = [int(orderStr) for orderStr in billboardAwardDict.keys()]
@@ -399,10 +426,11 @@
    GameWorld.Log("    奖励名次列表: %s" % orderList)
    
    billboardMgr = DBDataMgr.GetBillboardMgr()
    billBoard = billboardMgr.GetBillboard(billboardType)
    billBoard = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
    if not billBoard:
        return
    billBoard.SortDelayDo()
    idOrderDict = billBoard.GetIDOrderDict()
    
    awardOrder = orderList[0]
    orderPlayerIDDict = {}
@@ -412,15 +440,19 @@
        billBoardData = billBoard.At(index)
        if not billBoardData:
            continue
        order = index + 1
        playerID = billBoardData.GetID()
        order = idOrderDict.get(playerID, index + 1)
        
        if order > awardOrder:
        endAward = False # 发奖是否结束
        while order > awardOrder:
            nextOrderIndex = orderList.index(awardOrder) + 1
            if nextOrderIndex >= len(orderList):
                endAward = True
                break
            awardOrder = orderList[nextOrderIndex]
        playerID = billBoardData.GetID()
        if endAward:
            break
        if playerID < ShareDefine.RealPlayerIDStart:
            # 非真人不处理
            continue
@@ -432,5 +464,7 @@
        PlayerMail.SendMailByKey(mailKey, playerID, awardList, paramList)
        
    GameWorld.Log("    奖励玩家名次信息: %s" % orderPlayerIDDict)
    GameWorld.Log("===================================================")
    if isClearData:
        billBoard.ClearData("Award")
    GameWorld.Log("---------------------------------------------------")
    return