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