From 17a6cf93c19a3a74bc38c06d85f7655c0266105a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 04 七月 2024 19:06:30 +0800
Subject: [PATCH] 10198 【香港】【越南】【主干】【砍树】【后端】BOSS凭证优化

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py |  167 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 101 insertions(+), 66 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
index 6b9f197..0480bd5 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,41 @@
 
 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):
+    ## 结算奖励
+    cfgID = ipyData.GetCfgID() if ipyData else 0
+    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 +98,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 +122,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 +137,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 +387,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 +415,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):
@@ -482,10 +525,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):
@@ -536,9 +575,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