From 11c9a3b5846401523e4dafc17f2a074a712730da Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 11 三月 2026 18:27:10 +0800
Subject: [PATCH] 526 【挑战】PVP群英榜-后端(本服群英榜;优化机器人表支持按功能加载不同的机器人;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py |   53 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py
index eda747d..cf018cb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Billboard.py
@@ -26,16 +26,13 @@
         GameWorld.DebugAnswer(curPlayer, errInfo)
     GameWorld.DebugAnswer(curPlayer, "新增榜单假数据: Billboard 类型 分组值1 分组值2 条数 比较值1可选参数(比较值2 常规值1~5)")
     GameWorld.DebugAnswer(curPlayer, "删除榜单假数据: Billboard 类型 分组值1 分组值2")
-    GameWorld.DebugAnswer(curPlayer, "榜单类型:0-战力,1-龙魂,2-灵瑶,4-等级,5-坐骑,6-灵宠,7-符印,8-脱机,9-境界,19-助战")
-    GameWorld.DebugAnswer(curPlayer, "开服活动榜类型:11-强化,12-坐骑,13-宝石,14-冲级,15-境界,16-战力,18-符印,20-神兵,21-充值,22-灵宠,24-灵根,25-升星,26-洗练")
-    GameWorld.DebugAnswer(curPlayer, "运营活动榜类型:17-仙界盛典,23-仙界盛典2,33-boss凭证,36-boss凭证仙盟,38-仙匣,39-古宝,40-骑宠")
-    GameWorld.DebugAnswer(curPlayer, "魅力榜单类型:30-总榜,31-周榜,32-日榜")
-    GameWorld.DebugAnswer(curPlayer, "运营活动榜类型:150-充值(分组值1配置ID)")
-    GameWorld.DebugAnswer(curPlayer, "运营活动榜类型:158-boss凭证,160-凭证仙盟,162-仙匣,163-古宝,164-骑宠")
-    GameWorld.DebugAnswer(curPlayer, "古神战场榜类型:151-参与榜,152-召集榜,153-积分榜")
-    GameWorld.DebugAnswer(curPlayer, "逐鹿万界榜类型:156-单场榜,157-周榜")
-    GameWorld.DebugAnswer(curPlayer, "跨服竞技场榜单:165,分组值1-分区,分组值2-赛季,value2-段位")
+    GameWorld.DebugAnswer(curPlayer, "输出排行榜数据: Billboard p 类型 [分组值1 值2 从x名 到x名]")
     GameWorld.DebugAnswer(curPlayer, "注:如果没有特殊说明,本服榜单分组值均为0,跨服榜单分组值1为分区ID,分组2为0")
+    
+    for billboardType in ShareDefine.BillboardTypeAllList:
+        bName = ShareDefine.BillboardNameDict.get(billboardType, billboardType)
+        GameWorld.DebugAnswer(curPlayer, "(%s) %s" % (billboardType, bName))
+        
     return
 
 ## 执行逻辑
@@ -55,7 +52,7 @@
         return
     
     billboardIndex = value
-    if billboardIndex >= ShareDefine.BillboardTypeAllList:
+    if billboardIndex not in ShareDefine.BillboardTypeAllList:
         __Help(curPlayer, "榜单类型不存在!")
         return
     
@@ -92,9 +89,11 @@
     billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
     curDataCount = billboardObj.GetCount()
     maxDataCount = billboardObj.GetMaxCount()
-    
+    isLayerMode = billboardObj.IsOrderRuleByLayer()
+    if isLayerMode:
+        cmpValue1 = min(cmpValue1, maxDataCount)
     count = min(count, maxDataCount - curDataCount)
-    FakeName = GameWorld.GbkToCode("假名字")
+    FakeName = GameWorld.GbkToCode("主公")
     
     for i in xrange(count):
         dataPlayerID = curDataCount + 1 + i
@@ -106,9 +105,12 @@
         name1 = dataPlayerName
         cmpValue = dataCmpValue1
         cmpValue2 = dataCmpValue2
-        PlayerBillboard.UpdateBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, 
-                                        cmpValue, cmpValue2, cmpValue3, groupValue2, id2, False, 
-                                        value3=value3, value4=value4, value5=value5)
+        if isLayerMode:
+            PlayerBillboard.UpdateBillboardLayer(dataID, billboardType, cmpValue, groupValue1, False)
+        else:
+            PlayerBillboard.UpdateBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, 
+                                            cmpValue, cmpValue2, cmpValue3, groupValue2, id2, False, 
+                                            value3=value3, value4=value4, value5=value5)
         
     billboardObj.SortData()
     
@@ -146,7 +148,7 @@
     return billTypeSign
 
 def __logFackData(curPlayer, gmList):
-    ## 输出排行榜数据: Billboard p 类型 分组值1 分组值2
+    ## 输出排行榜数据: Billboard p 类型 分组值1 分组值2 名次A 到B
     if len(gmList) <= 1:
         GameWorld.DebugAnswer(curPlayer, "榜单数据条数总览")
         billboardMgr = DBDataMgr.GetBillboardMgr()
@@ -158,13 +160,16 @@
                 maxDataCount = billboardObj.GetMaxCount()
                 if not curDataCount:
                     continue
+                bName = ShareDefine.BillboardNameDict.get(bType, bType)
                 billTypeSign = __GetBillTypeSign(bType, groupValue1, groupValue2)
-                GameWorld.DebugAnswer(curPlayer, "榜单数据(%s)条数: %s/%s" % (billTypeSign, curDataCount, maxDataCount))
+                GameWorld.DebugAnswer(curPlayer, "%s(%s)条数: %s/%s" % (bName, billTypeSign, curDataCount, maxDataCount))
         return
     
     billboardType = gmList[1]
     groupValue1 = gmList[2] if len(gmList) > 2 else 0
     groupValue2 = gmList[3] if len(gmList) > 3 else 0
+    fromRank = gmList[4] if len(gmList) > 4 else 0
+    toRank = gmList[5] if len(gmList) > 5 else 0
     billboardMgr = DBDataMgr.GetBillboardMgr()
     billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
     billboardObj.SortDelayDo()
@@ -172,16 +177,24 @@
     maxDataCount = billboardObj.GetMaxCount()
     idOrderDict = billboardObj.GetIDOrderDict()
     
+    printDebugCnt = 0
     billTypeSign = __GetBillTypeSign(billboardType, groupValue1, groupValue2)
-    GameWorld.DebugAnswer(curPlayer, "榜单数据(%s)条数: %s/%s 详见日志" % (billTypeSign, curDataCount, maxDataCount))
+    bName = ShareDefine.BillboardNameDict.get(billboardType, billboardType)
+    GameWorld.DebugAnswer(curPlayer, "%s(%s)条数: %s/%s 详见日志" % (bName, billTypeSign, curDataCount, maxDataCount))
     for index in range(curDataCount):
         bbData = billboardObj.At(index)
         dataID = bbData.GetID()
         rank = idOrderDict.get(dataID, 0)
+        if (fromRank and rank < fromRank) or (toRank and rank > toRank):
+            continue
         
+        cmpValues = [bbData.GetCmpValue(), bbData.GetCmpValue2(), bbData.GetCmpValue3()]
         valueList = [getattr(bbData, "GetValue%s" % num)() for num in range(1, 9)]
-        GameWorld.DebugLog("%s,rank=%s,ID=%s,CmpValue=%s,CmpValue2=%s,Value=%s" 
-                           % (index, rank, dataID, bbData.GetCmpValue(), bbData.GetCmpValue2(), valueList), curPlayer.GetPlayerID())
+        if printDebugCnt < 20:
+            printDebugCnt += 1
+            GameWorld.DebugAnswer(curPlayer, "名次:%s,ID:%s,榜值:%s" % (rank, dataID, cmpValues))
+        GameWorld.DebugLog("%s,rank=%s,ID=%s,CmpValues=%s,Value=%s" 
+                           % (index, rank, dataID, cmpValues, valueList), curPlayer.GetPlayerID())
         
     return
 

--
Gitblit v1.8.0