From b23a62c196f9ccd6833f02ff780f7fffd07e2ae1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 25 六月 2024 15:27:04 +0800 Subject: [PATCH] 10185 【越南】【港台】【主干】BOSS凭证修改(优化凭证榜单奖励结算;优化榜单备份;) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py | 188 ++++++++++++++++++++++++---------------------- 1 files changed, 97 insertions(+), 91 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py index f19b272..6b9f197 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py @@ -50,10 +50,19 @@ if not cfgID: return BillboardType = ShareDefine.Def_BT_BossTrialSubmit - billBoard = GameWorld.GetBillboard().FindBillboard(BillboardType) + templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) + __OnEndAward_Personal(templateID, BillboardType) + + DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID}) + PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitBak, BillboardType) + PlayerBillboard.ClearBillboardByIndex(BillboardType) + GameWorld.Log("=================================================================================") + return + +def __OnEndAward_Personal(templateID, billboardType): + billBoard = GameWorld.GetBillboard().FindBillboard(billboardType) if not billBoard: return - templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) if not templateID: GameWorld.Log("本次活动没有个人榜奖励!") return @@ -87,10 +96,6 @@ PlayerCompensation.SendMailByKey("BossTrialMail10", [playerID], awardItemList, [rank]) - DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID}) - PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitBak, BillboardType) - PlayerBillboard.ClearBillboardByIndex(BillboardType) - GameWorld.Log("=================================================================================") return def OnGiveFamilyOrderAwawrd(actNum, ipyData, dayIndex): @@ -100,11 +105,19 @@ if not cfgID: return BillboardType = ShareDefine.Def_BT_BossTrialSubmitFamily - billBoard = GameWorld.GetBillboard().FindBillboard(BillboardType) + 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): + billBoard = GameWorld.GetBillboard().FindBillboard(billboardType) if not billBoard: return - templateIDList = ipyData.GetFamilyTemplateIDList() - templateID = GameWorld.GetTemplateIDByList(templateIDList, dayIndex) if not templateID: GameWorld.Log("本次活动没有仙盟榜奖励!") return @@ -140,6 +153,7 @@ familyActionData = GetFamilyBossTrialSubmitActionData(familyID, False) if not familyActionData: + GameWorld.ErrLog("该仙盟没有提交凭证ActionData! familyID=%s" % familyID) continue awardState = GetFamilyAwardState(familyActionData) awardIndex = 0 # 本服奖励状态索引 @@ -170,10 +184,6 @@ GameWorld.Log("发放boss历练活动仙盟榜单奖励本服: familyID=%s,名次=%s,总提交个数=%s,updAwardState=%s,awardMemIDList=%s,memSubCountDict=%s" % (familyID, familyRank, cmpValue, updAwardState, awardMemIDList, memSubCountDict)) - 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 MapServer_BossTrial(curPlayer, msgList): @@ -322,6 +332,7 @@ familyActionData = GetFamilyBossTrialSubmitActionData(familyID, False) if not familyActionData: + GameWorld.ErrLog("该仙盟没有提交凭证ActionData! familyID=%s" % familyID) continue awardState = GetFamilyAwardState(familyActionData) awardIndex = 1 #跨服奖励状态索引 @@ -408,11 +419,8 @@ PersonalTemplateID = ipyData.GetPersonalTemplateID() FamilyTemplateID = ipyData.GetFamilyTemplateID() - if PersonalTemplateID: - __GiveCrossOrderAwardPersonal(cfgID, zoneID, PersonalTemplateID) - - if FamilyTemplateID: - __GiveCrossOrderAwardFamily(cfgID, zoneID, FamilyTemplateID) + __GiveCrossOrderAwardPersonal(cfgID, zoneID, PersonalTemplateID, ShareDefine.Def_CBT_BossTrialSubmit) + __GiveCrossOrderAwardFamily(cfgID, zoneID, FamilyTemplateID, ShareDefine.Def_CBT_BossTrialSubmitFamily) # 如果有新活动,处理新活动 if not state: @@ -429,110 +437,108 @@ return -def __GiveCrossOrderAwardPersonal(cfgID, zoneID, templateID): +def __GiveCrossOrderAwardPersonal(cfgID, zoneID, templateID, billboardType): groupValue1 = zoneID - billboardType = ShareDefine.Def_CBT_BossTrialSubmit + #billboardType = ShareDefine.Def_CBT_BossTrialSubmit #榜单类型改为参数传入,异常情况下可特殊处理用备份榜单发奖励 billboardMgr = PyDataManager.GetCrossBillboardManager() billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1) billboardDataCount = billboardObj.GetCount() if not billboardDataCount: - GameWorld.Log("跨服Boss凭证个人排行数据为空! billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s" % (billboardType, cfgID, zoneID, templateID)) + GameWorld.Log("跨服Boss凭证个人排行数据为空! billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s" % (billboardType, zoneID, cfgID, templateID)) return # 结算时排序并保存榜单数据流向 billboardObj.SortData() - GameWorld.Log("结算跨服Boss凭证个人排行奖励: billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s,billboardDataCount=%s" - % (billboardType, cfgID, zoneID, templateID, billboardDataCount)) + GameWorld.Log("结算跨服Boss凭证个人排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s" + % (billboardType, zoneID, cfgID, templateID, billboardDataCount)) orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID) - if not orderIpyDataList: - return - - rankPre = 0 - billboardIndex = 0 - for ipyData in orderIpyDataList: - rank = ipyData.GetRank() - awardItemList = ipyData.GetAwardItemList() - orderCountTotal = rank - rankPre # 奖励名次数量 - rankPre = rank - orderCount = 0 - - for index in xrange(billboardIndex, billboardDataCount): - if orderCount >= orderCountTotal: - break + if orderIpyDataList: + rankPre = 0 + billboardIndex = 0 + for ipyData in orderIpyDataList: + rank = ipyData.GetRank() + awardItemList = ipyData.GetAwardItemList() + orderCountTotal = rank - rankPre # 奖励名次数量 + rankPre = rank + orderCount = 0 - billboardData = billboardObj.At(index) - playerID = billboardData.ID - name2 = billboardData.Name2 - cmpValue = billboardData.CmpValue - - playerRank = index + 1 - GameWorld.Log(" 发放boss历练个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" - % (rank, playerID, cmpValue, awardItemList, name2)) - PlayerCompensation.SendMailByKey("BossTrialCrossPlayer", [playerID], awardItemList, [playerRank], crossMail=True) - - orderCount += 1 - billboardIndex += 1 - + for index in xrange(billboardIndex, billboardDataCount): + if orderCount >= orderCountTotal: + break + + billboardData = billboardObj.At(index) + playerID = billboardData.ID + name2 = billboardData.Name2 + cmpValue = billboardData.CmpValue + + playerRank = index + 1 + GameWorld.Log(" 发放boss历练个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" + % (rank, playerID, cmpValue, awardItemList, name2)) + PlayerCompensation.SendMailByKey("BossTrialCrossPlayer", [playerID], awardItemList, [playerRank], crossMail=True) + + orderCount += 1 + billboardIndex += 1 + # 结算完备份、清除榜单数据 - CrossBillboard.CopyBillboard(billboardType, ShareDefine.Def_CBT_BossTrialSubmitBak) - billboardObj.ClearData() + if billboardType == ShareDefine.Def_CBT_BossTrialSubmit: + CrossBillboard.CopyBillboardEx(billboardType, ShareDefine.Def_CBT_BossTrialSubmitBak, groupValue1) + billboardObj.ClearData() return -def __GiveCrossOrderAwardFamily(cfgID, zoneID, templateID): +def __GiveCrossOrderAwardFamily(cfgID, zoneID, templateID, billboardType): groupValue1 = zoneID - billboardType = ShareDefine.Def_CBT_BossTrialSubmitFamily + #billboardType = ShareDefine.Def_CBT_BossTrialSubmitFamily billboardMgr = PyDataManager.GetCrossBillboardManager() billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1) billboardDataCount = billboardObj.GetCount() if not billboardDataCount: - GameWorld.Log("跨服Boss凭证仙盟排行数据为空! billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s" % (billboardType, cfgID, zoneID, templateID)) + GameWorld.Log("跨服Boss凭证仙盟排行数据为空! billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s" % (billboardType, zoneID, cfgID, templateID)) return # 结算时排序并保存榜单数据流向 billboardObj.SortData() - GameWorld.Log("结算跨服Boss凭证仙盟排行奖励: billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s,billboardDataCount=%s" - % (billboardType, cfgID, zoneID, templateID, billboardDataCount)) + GameWorld.Log("结算跨服Boss凭证仙盟排行奖励: billboardType=%s,zoneID=%s,cfgID=%s,templateID=%s,billboardDataCount=%s" + % (billboardType, zoneID, cfgID, templateID, billboardDataCount)) orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID) - if not orderIpyDataList: - return - - awardFamilyList = [] - rankPre = 0 - billboardIndex = 0 - for ipyData in orderIpyDataList: - rank = ipyData.GetRank() - leaderAwardItemList = ipyData.GetAwardItemList() - memAwardItemList = ipyData.GetMemAwardItemList() - orderCountTotal = rank - rankPre # 奖励名次数量 - rankPre = rank - orderCount = 0 + if orderIpyDataList: + awardFamilyList = [] + rankPre = 0 + billboardIndex = 0 + for ipyData in orderIpyDataList: + rank = ipyData.GetRank() + leaderAwardItemList = ipyData.GetAwardItemList() + memAwardItemList = ipyData.GetMemAwardItemList() + orderCountTotal = rank - rankPre # 奖励名次数量 + rankPre = rank + orderCount = 0 + + for index in xrange(billboardIndex, billboardDataCount): + if orderCount >= orderCountTotal: + break + + billboardData = billboardObj.At(index) + familyID = billboardData.ID + familySubmitTotal = billboardData.CmpValue + + familyRank = index + 1 + GameWorld.Log(" familyID=%s,名次=%s,总提交个数=%s" % (familyID, familyRank, familySubmitTotal)) + awardFamilyList.append([familyID, familyRank, familySubmitTotal, leaderAwardItemList, memAwardItemList]) + orderCount += 1 + billboardIndex += 1 + + # 广播子服发放奖励 + sendMsg = {"cfgID":cfgID, "zoneID":zoneID, "templateID":templateID, "awardFamilyList":awardFamilyList} + CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossTrialFamilyAward, sendMsg) - for index in xrange(billboardIndex, billboardDataCount): - if orderCount >= orderCountTotal: - break - - billboardData = billboardObj.At(index) - familyID = billboardData.ID - familySubmitTotal = billboardData.CmpValue - - familyRank = index + 1 - GameWorld.Log(" familyID=%s,名次=%s,总提交个数=%s" % (familyID, familyRank, familySubmitTotal)) - awardFamilyList.append([familyID, familyRank, familySubmitTotal, leaderAwardItemList, memAwardItemList]) - orderCount += 1 - billboardIndex += 1 - - # 广播子服发放奖励 - sendMsg = {"cfgID":cfgID, "zoneID":zoneID, "templateID":templateID, "awardFamilyList":awardFamilyList} - CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossTrialFamilyAward, sendMsg) - # 结算完备份、清除榜单数据 - CrossBillboard.CopyBillboard(billboardType, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak) - billboardObj.ClearData() + if billboardType == ShareDefine.Def_CBT_BossTrialSubmitFamily: + CrossBillboard.CopyBillboardEx(billboardType, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, groupValue1) + billboardObj.ClearData() return -- Gitblit v1.8.0