From c2e1f296920744e243ea087d3194973f62dbcf8c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 17 四月 2019 09:53:48 +0800 Subject: [PATCH] 6459 【后端】【2.0】缥缈仙域开发单(修复过天重置采集次数报错) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py | 70 ++++++++++++++++++++++++++-------- 1 files changed, 53 insertions(+), 17 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py index e9dc42f..5044233 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py @@ -28,6 +28,15 @@ import GameWorld import ChConfig +def GetTemplateID(cfgID, dayIndex): + if cfgID == None or dayIndex == None: + return 0 + ipyData = IpyGameDataPY.GetIpyGameData("ActCostRebate", cfgID) + if not ipyData: + return 0 + templateIDList = ipyData.GetTemplateIDList() + templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex] + return templateID def OnPlayerLogin(curPlayer): isReset = __CheckPlayerCostRebateAction(curPlayer) @@ -64,18 +73,20 @@ if costRebateID == playerCostRebateID: #GameWorld.DebugLog("消费返利活动ID不变,不处理!", curPlayer.GetPlayerID()) return - - templateID = actCostRebateInfo.get(ShareDefine.ActKey_TemplateID, 0) + actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0) + playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV) + templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0)) playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateTemplateID) GameWorld.DebugLog("消费返利重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s" % (costRebateID, playerCostRebateID, state, templateID, playerTemplateID), playerID) # 未领取的奖励邮件发放 - __SendCostRebateMail(curPlayer, playerTemplateID) + __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID, costRebateID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID, templateID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateWorldLV, actWorldLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, 0) @@ -83,7 +94,7 @@ Sync_CostRebateInfo(curPlayer) return True -def __SendCostRebateMail(curPlayer, playerTemplateID): +def __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV): # 未领取的奖励邮件发放 if not playerTemplateID: @@ -96,7 +107,7 @@ ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", playerTemplateID) if not ipyDataList: return - + job = curPlayer.GetJob() playerID = curPlayer.GetPlayerID() batchPlayerIDList, batchAddItemList, batchParamList = [], [], [] awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord) @@ -111,7 +122,7 @@ continue awardRecord |= pow(2, awardIndex) - awardItemList = ipyData.GetAwardItemList() + awardItemList = __GetItemList(ipyData.GetAwardItemList(), job, playerWorldLV) batchPlayerIDList.append([playerID]) batchAddItemList.append(awardItemList) batchParamList.append([needCostGold]) @@ -121,6 +132,23 @@ PlayerControl.SendMailBatch("ConsumptionRebateMail", batchPlayerIDList, batchAddItemList, batchParamList) return + + +def __GetItemList(itemDict, job, worldLV): + #{世界等级范围:[(物品ID,个数,是否绑定), ...]},若物品ID要区分职业则配{世界等级范围:[({职业:物品ID,..},个数,是否绑定), ...]} + itemList = [] + itemInfoList = GameWorld.GetDictValueByRangeKey(itemDict, worldLV, []) + for itemInfo in itemInfoList: + if type(itemInfo[0]) == dict: + itemID = itemInfo[0].get(job) + if not itemID: + GameWorld.ErrLog('累计充值奖励未配置该职业itemDict=%s,job=%s'%(itemDict, job)) + continue + else: + itemID = itemInfo[0] + itemList.append([itemID, itemInfo[1], itemInfo[2]]) + return itemList + def AddCostRebateGold(curPlayer, costType, costGold, infoDict): if costGold <= 0: @@ -135,7 +163,7 @@ return actID = actCostRebateInfo.get(ShareDefine.ActKey_ID) - templateID = actCostRebateInfo.get(ShareDefine.ActKey_TemplateID) + templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0)) if not actID or not templateID: GameWorld.ErrLog("消费返利活动数据异常!actID=%s,templateID=%s" % (actID, templateID), curPlayer.GetPlayerID()) return @@ -158,7 +186,7 @@ actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}) costRebateID = actCostRebateInfo.get(ShareDefine.ActKey_ID, 0) state = actCostRebateInfo.get(ShareDefine.ActKey_State, 0) - templateID = actCostRebateInfo.get(ShareDefine.ActKey_TemplateID, 0) + templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0)) if not state or not templateID: GameWorld.DebugLog("没有消费返利活动,无法领奖!state=%s,templateID=%s" % (state, templateID), playerID) return @@ -187,7 +215,8 @@ return needCostGold = awardIpyData.GetNeedCostGold() - awardItemList = awardIpyData.GetAwardItemList() + actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0) + awardItemList = __GetItemList(awardIpyData.GetAwardItemList(), curPlayer.GetJob(), actWorldLV) curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold) if curCostGold < needCostGold: @@ -209,7 +238,7 @@ PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needCostGold]) for itemID, itemCount, isBind in awardItemList: - ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem]) + ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem]) addDataDict = {"TemplateID":templateID, "NeedCostGold":needCostGold, "AwardIndex":awardIndex, "ItemList":str(awardItemList)} @@ -233,15 +262,22 @@ if not actCostRebateInfo.get(ShareDefine.ActKey_State): return - templateIDList = actCostRebateInfo.get(ShareDefine.ActKey_TemplateIDList) - if not templateIDList: + cfgID = actCostRebateInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActCostRebate", cfgID) + if not ipyData: return + templateIDList = ipyData.GetTemplateIDList() + if not templateIDList: + return + job = curPlayer.GetJob() + actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0) + openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 actInfo = ChPyNetSendPack.tagMCCostRebateInfo() - actInfo.StartDate = actCostRebateInfo.get(ShareDefine.ActKey_StartDate, "") - actInfo.EndtDate = actCostRebateInfo.get(ShareDefine.ActKey_EndDate, "") - actInfo.LimitLV = actCostRebateInfo.get(ShareDefine.ActKey_LVLimit, 0) - actInfo.IsDayReset = actCostRebateInfo.get(ShareDefine.ActKey_IsDayReset, 0) + actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay) + actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay) + actInfo.LimitLV = ipyData.GetLVLimit() + actInfo.IsDayReset = ipyData.GetIsDayReset() actInfo.AwardDayInfo = [] for templateID in templateIDList: ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", templateID) @@ -255,7 +291,7 @@ awardInfo.AwardIndex = ipyData.GetAwardIndex() awardInfo.NeedGold = ipyData.GetNeedCostGold() awardInfo.AwardItem = [] - for itemID, itemCount, isBind in ipyData.GetAwardItemList(): + for itemID, itemCount, isBind in __GetItemList(ipyData.GetAwardItemList(), job, actWorldLV): awardItem = ChPyNetSendPack.tagMCCostRebateAwardItem() awardItem.ItemID = itemID awardItem.ItemCount = itemCount -- Gitblit v1.8.0