From ee85c07264f0dbedb35c114e71b102dc2fc116f1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 25 一月 2021 18:27:45 +0800 Subject: [PATCH] 8710 【开发】【主干】【BT2】根据世界等级配置奖励(七日巡礼周狂欢支持按世界等级配置); --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 42 insertions(+), 14 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py index cdb60de..5d56d19 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py @@ -67,6 +67,7 @@ cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动ID playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动配置ID + playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动世界等级 # 活动ID 相同的话不处理 if actID == playerActID: GameWorld.DebugLog("周狂欢活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID()) @@ -75,14 +76,16 @@ return # 未领取的奖励邮件发放 if playerWeekPartyID: - __SendWeekPartyMail(curPlayer, playerWeekPartyID) + __SendWeekPartyMail(curPlayer, playerWeekPartyID, playerWorldLV) GameWorld.DebugLog('周狂欢活动重置!') curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty) - GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s" % (state, actID, cfgID, playerWeekPartyID), playerID) + worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0) + GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s,worldLV=%s" % (state, actID, cfgID, playerWeekPartyID, worldLV), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyWorldLV, worldLV, ChConfig.Def_PDictType_WeekParty) if state: CheckWeekPartyActionCnt(curPlayer, False) SyncWeekPartyInfo(curPlayer) @@ -90,8 +93,7 @@ return True - -def __SendWeekPartyMail(curPlayer, cfgID): +def __SendWeekPartyMail(curPlayer, cfgID, playerWorldLV): # 未领取的奖励邮件发放 actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID) if not actBossIpyData: @@ -112,10 +114,11 @@ canGotCnt = (curTimes - gotTimes) / singleTimes if not canGotCnt: continue - itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt) + itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt) GameWorld.AddDictValue(totalItemDict, itemDict) #积分奖励 - for day, awardDict in actBossIpyData.GetPointAward().items(): + pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), playerWorldLV) + for day, awardDict in pointAwardInfo.items(): pointList = awardDict.keys() pointList.sort() for i, point in enumerate(pointList): @@ -135,6 +138,8 @@ PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList) return +def __GetPointAwardInfo(cfgPointAwardInfo, worldLV): + return GameWorld.GetDictValueByRangeKey(cfgPointAwardInfo, worldLV, {}) def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True): '''增加周狂欢相关活动完成次数''' @@ -238,6 +243,22 @@ def GetWeekPartyActionAward(curPlayer, day, templateID): '''领取周狂欢活动奖励''' templateID = GameWorld.ToIntDef(templateID, 0) + actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {}) + state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0) + cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0) + if not state or not cfgID: + return + actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID) + if not actBossIpyData: + return + templateIDList = actBossIpyData.GetTemplateID() + if not templateIDList: + return + if day >= len(templateIDList): + return + dayTempIDList = templateIDList[day] + if templateID not in dayTempIDList: + return ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', templateID) if not ipyData: return @@ -248,7 +269,7 @@ return #给奖励 - awardDict = __GetAwardItem(curPlayer, ipyData) + awardDict = __GetAwardItem(curPlayer, ipyData, actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)) # 检查背包 needSpace = len(awardDict) packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) @@ -280,7 +301,8 @@ curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty) if curPoint < getPoint: return - pointAwardDict = actBossIpyData.GetPointAward().get(day, {}) + pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)) + pointAwardDict = pointAwardInfo.get(day, {}) pointList = pointAwardDict.keys() pointList.sort() if getPoint not in pointList: @@ -304,9 +326,9 @@ return -def __GetAwardItem(curPlayer, ipyData, times=1): +def __GetAwardItem(curPlayer, ipyData, worldLV, times=1): awardDict = {} - awardItemList = __GetAwardItemListByJob(curPlayer, ipyData) + awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV) for itemID, itemCnt, isbind in awardItemList: if not itemID or not itemCnt: continue @@ -314,10 +336,15 @@ return awardDict -def __GetAwardItemListByJob(curPlayer, ipyData): +def __GetAwardItemListByJob(curPlayer, rewardItemInfo, worldLV): ## 根据职业获取对应奖励 - rewardItemInfo = ipyData.GetReward() + if not rewardItemInfo: + return [] if isinstance(rewardItemInfo, dict): + keyList = rewardItemInfo.keys() + # 配世界等级范围的 + if isinstance(keyList[0], tuple) and len(keyList[0]) == 2: + return __GetAwardItemListByJob(curPlayer, GameWorld.GetDictValueByRangeKey(rewardItemInfo, worldLV), worldLV) return rewardItemInfo.get(curPlayer.GetJob(), []) return rewardItemInfo @@ -379,7 +406,8 @@ templateIDList = actBossIpyData.GetTemplateID() if not templateIDList: return - pointAwardDict = actBossIpyData.GetPointAward() + worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0) + pointAwardDict = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV) openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 actInfo = ChPyNetSendPack.tagMCWeekPartyInfo() actInfo.Clear() @@ -423,7 +451,7 @@ tInfo.SingleTimes = ipyData.GetSingleTimes() tInfo.Point = ipyData.GetPoint() tInfo.ItemInfo = [] - awardItemList = __GetAwardItemListByJob(curPlayer, ipyData) + awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV) for itemID, itemCnt, isBind in awardItemList: awardItem = ChPyNetSendPack.tagMCWeekPartyItem() awardItem.ItemID = itemID -- Gitblit v1.8.0