From 95c731d5e1a9aadb610ac9f6ecbc6b74b919ab60 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 28 二月 2026 17:05:35 +0800
Subject: [PATCH] 417 【武将】吞噬返还优化(固定额外返还一个本体遣散道具;优化吞噬星级溢出逻辑;)
---
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