From 5d79b486b2974522c2d1978dc90c3081827224e0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 26 二月 2026 15:46:46 +0800
Subject: [PATCH] 493 【活动内容】武将登场-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py |   54 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index 5c3416a..72fdac1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/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

--
Gitblit v1.8.0