| | |
| | | import ShareDefine |
| | | import DataRecordPack |
| | | import PlayerCompensation |
| | | import PlayerDBGSEvent |
| | | import PlayerBillboard |
| | | import IpyGameDataPY |
| | | import GameWorld |
| | |
| | | |
| | | def OnActStart(actNum): |
| | | ## 活动开启 |
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ActBossTrialAward % actNum, 0) |
| | | PlayerBillboard.ClearBillboardByIndex(ShareDefine.Def_BT_BossTrialSubmit) |
| | | PlayerBillboard.ClearBillboardByIndex(ShareDefine.Def_BT_BossTrialSubmitFamily) |
| | | |
| | |
| | | |
| | | 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 |
| | | |
| | |
| | | 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) |
| | |
| | | |
| | | 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 |
| | | |
| | |
| | | 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() |
| | |
| | | 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) |
| | |
| | | |
| | | 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): |
| | |
| | | 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): |
| | |
| | | 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 |
| | | |