From bb6cd0bde854e5998022a0bce4fdc8bf554be3a6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 19 七月 2024 14:03:00 +0800
Subject: [PATCH] 5541 【越南】批量使用宝箱获得道具超过65535
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py | 171 +++++++++++++++++++++++++++++++++++----------------------
1 files changed, 105 insertions(+), 66 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
index 6b9f197..d79e287 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
@@ -18,6 +18,7 @@
import ShareDefine
import DataRecordPack
import PlayerCompensation
+import PlayerDBGSEvent
import PlayerBillboard
import IpyGameDataPY
import GameWorld
@@ -29,6 +30,7 @@
def OnActStart(actNum):
## 活动开启
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAward % actNum, 0)
PlayerBillboard.ClearBillboardByIndex(ShareDefine.Def_BT_BossTrialSubmit)
PlayerBillboard.ClearBillboardByIndex(ShareDefine.Def_BT_BossTrialSubmitFamily)
@@ -43,19 +45,43 @@
def OnActEnd(actNum, ipyData, dayIndex):
## 活动结束
- OnGiveFamilyOrderAwawrd(actNum, ipyData, dayIndex)
cfgID = ipyData.GetCfgID() if ipyData else 0
- # 发放排行奖励
- GameWorld.Log("=== boss历练活动结束!发放本服个人榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
- if not cfgID:
- return
- BillboardType = ShareDefine.Def_BT_BossTrialSubmit
- templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex)
- __OnEndAward_Personal(templateID, BillboardType)
+ GameWorld.Log("=== boss历练活动结束! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
- DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID})
- PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitBak, BillboardType)
- PlayerBillboard.ClearBillboardByIndex(BillboardType)
+ __OnEndAward(actNum, ipyData, dayIndex) # 兼容活动没有配置参与时间段的在活动结束补触发结算奖励
+
+ DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_BossTrialSubmitFamily, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
+ PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitFamilyBak, ShareDefine.Def_BT_BossTrialSubmitFamily)
+
+ DataRecordPack.DR_BillboardData(ShareDefine.Def_BT_BossTrialSubmit, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex})
+ PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitBak, ShareDefine.Def_BT_BossTrialSubmit)
+ GameWorld.Log("=================================================================================")
+ return
+
+def OnActJoinEnd(actNum, ipyData, dayIndex):
+ ## 活动参与结束
+ __OnEndAward(actNum, ipyData, dayIndex)
+ return
+
+def __OnEndAward(actNum, ipyData, dayIndex):
+ ## 结算奖励
+ if not ipyData:
+ return
+ cfgID = ipyData.GetCfgID()
+ awardState = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAward % actNum)
+ if awardState:
+ #已经结算过该活动
+ GameWorld.Log("boss历练活动已经结算过奖励了! actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
+ return
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAward % actNum, 1)
+
+ GameWorld.Log("=== 本服boss历练活动发放榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
+
+ familyTemplateID = GameWorld.GetTemplateIDByList(ipyData.GetFamilyTemplateIDList(), dayIndex)
+ __OnEndAward_Family(familyTemplateID, ShareDefine.Def_BT_BossTrialSubmitFamily)
+
+ templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex)
+ __OnEndAward_Personal(templateID, ShareDefine.Def_BT_BossTrialSubmit)
GameWorld.Log("=================================================================================")
return
@@ -74,7 +100,7 @@
for tempIpyData in tempIpyDataList:
rankAwardDict[tempIpyData.GetRank()] = tempIpyData.GetAwardItemList()
- GameWorld.Log(" templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict))
+ GameWorld.Log("结算个人榜单奖励: templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict))
billBoard.Sort()
for index in xrange(billBoard.GetCount()):
billBoardData = billBoard.At(index)
@@ -98,30 +124,14 @@
return
-def OnGiveFamilyOrderAwawrd(actNum, ipyData, dayIndex):
- cfgID = ipyData.GetCfgID() if ipyData else 0
- # 发放排行奖励
- GameWorld.Log("=== boss历练活动结束!发放本服仙盟榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
- if not cfgID:
- return
- BillboardType = ShareDefine.Def_BT_BossTrialSubmitFamily
- templateID = GameWorld.GetTemplateIDByList(ipyData.GetFamilyTemplateIDList(), dayIndex)
- __OnEndAward_Family(templateID, BillboardType)
-
- DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID})
- PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitFamilyBak, BillboardType)
- PlayerBillboard.ClearBillboardByIndex(BillboardType)
- GameWorld.Log("=================================================================================")
- return
-
-def __OnEndAward_Family(templateID, billboardType):
+def __OnEndAward_Family(familyTemplateID, billboardType):
billBoard = GameWorld.GetBillboard().FindBillboard(billboardType)
if not billBoard:
return
- if not templateID:
+ if not familyTemplateID:
GameWorld.Log("本次活动没有仙盟榜奖励!")
return
- tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID)
+ tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", familyTemplateID)
if not tempIpyDataList:
return
@@ -129,7 +139,7 @@
for tempIpyData in tempIpyDataList:
rankAwardDict[tempIpyData.GetRank()] = [tempIpyData.GetAwardItemList(), tempIpyData.GetMemAwardItemList()]
- GameWorld.Log(" templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict))
+ GameWorld.Log("结算仙盟榜单奖励: familyTemplateID=%s,rankAwardDict=%s" % (familyTemplateID, rankAwardDict))
billBoard.Sort()
familyManager = GameWorld.GetFamilyManager()
@@ -379,7 +389,7 @@
if not actInfo or not actInfo[ShareDefine.ActKey_State]:
GameWorld.ErrLog("跨服boss历练非活动中,无法提交! cfgID=%s, zoneID=%s" % (cfgID, zoneID))
return
- if not actInfo[ShareDefine.ActKey_StateJoin]:
+ if actInfo[ShareDefine.ActKey_StateJoin] != ShareDefine.ActStateJoin_Start:
GameWorld.ErrLog("跨服boss历练非可参与状态,无法提交! cfgID=%s, zoneID=%s" % (cfgID, zoneID))
return
ipyData = IpyGameDataPY.GetIpyGameData("CrossActBossTrial", cfgID)
@@ -407,34 +417,69 @@
return
-def OnCrossActIDChange(cfgID, state):
- ## 活动ID变更
+def OnCrossActIDChange(cfgID, zoneID, ipyData, state):
+ ## 跨服活动ID变更
+ if state:
+ OnCrossActStart(cfgID, zoneID, ipyData)
+ else:
+ OnCrossActEnd(cfgID, zoneID, ipyData)
+ return
+
+def OnCrossActStart(cfgID, zoneID, ipyData):
+ ## 跨服活动开启
- # 先结算活动
- zoneID = 0
- ipyData = IpyGameDataPY.GetIpyGameData("CrossActBossTrial", cfgID)
- if ipyData:
- zoneID = ipyData.GetZoneID()
-
- PersonalTemplateID = ipyData.GetPersonalTemplateID()
- FamilyTemplateID = ipyData.GetFamilyTemplateID()
-
- __GiveCrossOrderAwardPersonal(cfgID, zoneID, PersonalTemplateID, ShareDefine.Def_CBT_BossTrialSubmit)
- __GiveCrossOrderAwardFamily(cfgID, zoneID, FamilyTemplateID, ShareDefine.Def_CBT_BossTrialSubmitFamily)
-
- # 如果有新活动,处理新活动
- if not state:
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAwardC % zoneID, 0)
+
+ groupValue1 = zoneID
+ billboardMgr = PyDataManager.GetCrossBillboardManager()
+ billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmit, groupValue1)
+ billboardObj.ClearData() # 新活动重置榜单数据
+
+ billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmitFamily, groupValue1)
+ billboardObj.ClearData() # 新活动重置榜单数据
+ return
+
+def OnCrossActEnd(cfgID, zoneID, ipyData):
+ ## 跨服活动结束
+
+ groupValue1 = zoneID
+ GameWorld.Log("=== 跨服boss历练活动结束! === cfgID=%s,zoneID=%s" % (cfgID, zoneID))
+ __OnCrossEndAward(cfgID, zoneID, ipyData)
+
+ # 备份、清除榜单数据
+ billboardMgr = PyDataManager.GetCrossBillboardManager()
+ billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmit, groupValue1)
+ CrossBillboard.CopyBillboardEx(ShareDefine.Def_CBT_BossTrialSubmit, ShareDefine.Def_CBT_BossTrialSubmitBak, groupValue1)
+ billboardObj.ClearData()
+
+ billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmitFamily, groupValue1)
+ CrossBillboard.CopyBillboardEx(ShareDefine.Def_CBT_BossTrialSubmitFamily, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, groupValue1)
+ billboardObj.ClearData()
+ GameWorld.Log("=================================================================================")
+ return
+
+def OnCrossActJoinEnd(cfgID, zoneID, ipyData):
+ ## 跨服活动参与结束
+ __OnCrossEndAward(cfgID, zoneID, ipyData)
+ return
+
+def __OnCrossEndAward(cfgID, zoneID, ipyData):
+ ## 结算跨服奖励
+ awardState = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAwardC % zoneID)
+ if awardState:
+ #已经结算过该活动
+ GameWorld.Log("跨服boss历练活动已经结算过奖励了! cfgID=%s,zoneID=%s" % (cfgID, zoneID))
return
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAwardC % zoneID, 1)
- if zoneID:
- groupValue1 = zoneID
- billboardMgr = PyDataManager.GetCrossBillboardManager()
- billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmit, groupValue1)
- billboardObj.ClearData() # 新活动重置榜单数据
-
- billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmitFamily, groupValue1)
- billboardObj.ClearData() # 新活动重置榜单数据
-
+ GameWorld.Log("=== 跨服boss历练活动发放榜单奖励! === cfgID=%s,zoneID=%s" % (cfgID, zoneID))
+
+ PersonalTemplateID = ipyData.GetPersonalTemplateID()
+ FamilyTemplateID = ipyData.GetFamilyTemplateID()
+
+ __GiveCrossOrderAwardPersonal(cfgID, zoneID, PersonalTemplateID, ShareDefine.Def_CBT_BossTrialSubmit)
+ __GiveCrossOrderAwardFamily(cfgID, zoneID, FamilyTemplateID, ShareDefine.Def_CBT_BossTrialSubmitFamily)
+ GameWorld.Log("=================================================================================")
return
def __GiveCrossOrderAwardPersonal(cfgID, zoneID, templateID, billboardType):
@@ -450,6 +495,7 @@
# 结算时排序并保存榜单数据流向
billboardObj.SortData()
+ billboardObj.SaveDRData()
GameWorld.Log("结算跨服Boss凭证个人排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s"
% (billboardType, zoneID, cfgID, templateID, billboardDataCount))
@@ -482,10 +528,6 @@
orderCount += 1
billboardIndex += 1
- # 结算完备份、清除榜单数据
- if billboardType == ShareDefine.Def_CBT_BossTrialSubmit:
- CrossBillboard.CopyBillboardEx(billboardType, ShareDefine.Def_CBT_BossTrialSubmitBak, groupValue1)
- billboardObj.ClearData()
return
def __GiveCrossOrderAwardFamily(cfgID, zoneID, templateID, billboardType):
@@ -501,6 +543,7 @@
# 结算时排序并保存榜单数据流向
billboardObj.SortData()
+ billboardObj.SaveDRData()
GameWorld.Log("结算跨服Boss凭证仙盟排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s"
% (billboardType, zoneID, cfgID, templateID, billboardDataCount))
@@ -536,9 +579,5 @@
sendMsg = {"cfgID":cfgID, "zoneID":zoneID, "templateID":templateID, "awardFamilyList":awardFamilyList}
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossTrialFamilyAward, sendMsg)
- # 结算完备份、清除榜单数据
- if billboardType == ShareDefine.Def_CBT_BossTrialSubmitFamily:
- CrossBillboard.CopyBillboardEx(billboardType, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, groupValue1)
- billboardObj.ClearData()
return
--
Gitblit v1.8.0