From ca1fbca286db5bf04582edfa0dc4e25d648c9060 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 22 十二月 2020 17:02:17 +0800 Subject: [PATCH] 8666 【主干】移植-多日累充; (原BT主单: 8497 【新增】七日累充活动) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py | 170 +++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 105 insertions(+), 65 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py index 2dda889..5ea1147 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py @@ -9,7 +9,7 @@ # @date 2018-7-16 # @version 1.0 # -# 详细描述: 累计充值X元活动 +# 详细描述: 累计充值X元活动,支持多个累充活动同时存在,需要多个运营活动时间表配置 # #------------------------------------------------------------------------------- #"""Version = 2018-7-16 12:00""" @@ -28,10 +28,13 @@ import GameWorld import ChConfig -def GetTemplateID(cfgID, dayIndex): +def GetTemplateID(cfgID, dayIndex, actNum): if cfgID == None or dayIndex == None: return 0 - ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID) + if actNum == 1: + ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID) + else: + ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge2", cfgID) if not ipyData: return 0 templateIDList = ipyData.GetTemplateIDList() @@ -39,68 +42,83 @@ return templateID def OnPlayerLogin(curPlayer): - isReset = __CheckPlayerTotalRechargeAction(curPlayer) + # 活动1 + actNum = 1 + isReset = __CheckPlayerTotalRechargeAction(curPlayer, actNum) if not isReset: actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) # 活动中同步活动信息 if actTotalRechargeInfo.get(ShareDefine.ActKey_State): - Sync_TotalRechargeActionInfo(curPlayer) - Sync_TotalRechargeInfo(curPlayer) + Sync_TotalRechargeActionInfo(curPlayer, actNum) + Sync_TotalRechargeInfo(curPlayer, actNum) + + # 活动2 + actNum = 2 + isReset = __CheckPlayerTotalRechargeAction(curPlayer, actNum) + if not isReset: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge2, {}) + # 活动中同步活动信息 + if actTotalRechargeInfo.get(ShareDefine.ActKey_State): + Sync_TotalRechargeActionInfo(curPlayer, actNum) + Sync_TotalRechargeInfo(curPlayer, actNum) return -def RefreshTotalRechargeActionInfo(): +def RefreshTotalRechargeActionInfo(actNum): ## 收到GameServer同步的活动信息,刷新活动信息 playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if curPlayer.GetID() == 0: continue - __CheckPlayerTotalRechargeAction(curPlayer) + __CheckPlayerTotalRechargeAction(curPlayer, actNum) return -def __CheckPlayerTotalRechargeAction(curPlayer): +def __CheckPlayerTotalRechargeAction(curPlayer, actNum): ## 检查玩家累计充值活动数据信息 playerID = curPlayer.GetPlayerID() - actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + if actNum == 1: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + else: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge2, {}) TotalRechargeID = actTotalRechargeInfo.get(ShareDefine.ActKey_ID, 0) state = actTotalRechargeInfo.get(ShareDefine.ActKey_State, 0) - playerTotalRechargeID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeID) # 玩家身上的活动ID + playerTotalRechargeID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeID % actNum) # 玩家身上的活动ID # 活动ID 相同的话不处理 if TotalRechargeID == playerTotalRechargeID: - #GameWorld.DebugLog("累计充值活动ID不变,不处理!", curPlayer.GetPlayerID()) + GameWorld.DebugLog("累计充值活动ID不变,不处理!actNum=%s" % actNum, curPlayer.GetPlayerID()) return actWorldLV = actTotalRechargeInfo.get(ShareDefine.ActKey_WorldLV, 0) - playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeWorldLV) - templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0)) - playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeTemplateID) + playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeWorldLV % actNum) + templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0), actNum) + playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeTemplateID % actNum) - GameWorld.DebugLog("累计充值重置! TotalRechargeID=%s,playerTotalRechargeID=%s,state=%s,templateID=%s,playerTemplateID=%s" - % (TotalRechargeID, playerTotalRechargeID, state, templateID, playerTemplateID), playerID) + GameWorld.DebugLog("累计充值重置! actNum=%s,TotalRechargeID=%s,playerTotalRechargeID=%s,state=%s,templateID=%s,playerTemplateID=%s" + % (actNum, TotalRechargeID, playerTotalRechargeID, state, templateID, playerTemplateID), playerID) # 未领取的奖励邮件发放 - __SendTotalRechargeMail(curPlayer, playerTemplateID, playerWorldLV) + __SendTotalRechargeMail(curPlayer, playerTemplateID, playerWorldLV, actNum) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeID, TotalRechargeID) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeTemplateID, templateID) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeWorldLV, actWorldLV) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeGold, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeID % actNum, TotalRechargeID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeTemplateID % actNum, templateID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeWorldLV % actNum, actWorldLV) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeGold % actNum, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum, 0) - Sync_TotalRechargeActionInfo(curPlayer) - Sync_TotalRechargeInfo(curPlayer) + Sync_TotalRechargeActionInfo(curPlayer, actNum) + Sync_TotalRechargeInfo(curPlayer, actNum) return True -def __SendTotalRechargeMail(curPlayer, playerTemplateID, playerWorldLV): +def __SendTotalRechargeMail(curPlayer, playerTemplateID, playerWorldLV, actNum): # 未领取的奖励邮件发放 if not playerTemplateID: return - curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold) + curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold % actNum) if not curRechargeGold: return @@ -110,7 +128,7 @@ playerID = curPlayer.GetPlayerID() batchPlayerIDList, batchAddItemList, batchParamList = [], [], [] - awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord) + awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum) job = curPlayer.GetJob() for ipyData in ipyDataList: awardIndex = ipyData.GetAwardIndex() @@ -128,7 +146,7 @@ batchParamList.append([needGold]) if batchPlayerIDList: - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord, awardRecord) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum, awardRecord) PlayerControl.SendMailBatch("TotalRechargeMail", batchPlayerIDList, batchAddItemList, batchParamList) return @@ -137,58 +155,71 @@ #{世界等级范围:{职业:[(物品ID,个数,是否绑定), ...]}} itemInfoDict = GameWorld.GetDictValueByRangeKey(itemDict, worldLV, {}) if str(job) not in itemInfoDict: - GameWorld.ErrLog('累计充值奖励未配置该职业itemDict=%s,job=%s'%(itemDict, job)) + GameWorld.ErrLog('累计充值奖励未配置该职业itemDict=%s,job=%s' % (itemDict, job)) return [] else: return itemInfoDict[str(job)] -def AddTotalRechargeGold(curPlayer, addGold): +def AddTotalRechargeGold(curPlayer, addGold, actNum): if addGold <= 0: return - - actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + if actNum == 1: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + else: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge2, {}) + if not actTotalRechargeInfo.get(ShareDefine.ActKey_State): - GameWorld.DebugLog("累计充值活动当前未开启!") + GameWorld.DebugLog("累计充值活动当前未开启! actNum=%s" % actNum) return actID = actTotalRechargeInfo.get(ShareDefine.ActKey_ID) - templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0)) + templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0), actNum) if not actID or not templateID: GameWorld.ErrLog("累计充值活动数据异常!actID=%s,templateID=%s" % (actID, templateID), curPlayer.GetPlayerID()) return - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeID, actID) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeTemplateID, templateID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeID % actNum, actID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeTemplateID % actNum, templateID) - curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold) + curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold % actNum) updRechargeGold = curRechargeGold + addGold - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeGold, updRechargeGold) - Sync_TotalRechargeInfo(curPlayer) - GameWorld.DebugLog("玩家累计充值活动: actID=%s,templateID=%s,curRechargeGold=%s,addGold=%s,updRechargeGold=%s" - % (actID, templateID, curRechargeGold, addGold, updRechargeGold), curPlayer.GetPlayerID()) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeGold % actNum, updRechargeGold) + Sync_TotalRechargeInfo(curPlayer, actNum) + GameWorld.DebugLog("玩家累计充值活动: actNum=%s,actID=%s,templateID=%s,curRechargeGold=%s,addGold=%s,updRechargeGold=%s" + % (actNum, actID, templateID, curRechargeGold, addGold, updRechargeGold), curPlayer.GetPlayerID()) return -def OnGetTotalRechargeAward(curPlayer, awardIndex): - ## 领取累计充值奖励 - +def OnGetTotalRechargeAward(curPlayer, awardIndex, actNum): + '''OnGetTotalRechargeAward + @param awardIndex: 奖励索引 + @param actNum: 活动编号,如1 或 2 代表不同的活动 + ''' + actNum = GameWorld.ToIntDef(actNum, 0) + if actNum <= 0: + GameWorld.DebugLog("没有指定领取的累充活动编号! actNum=%s" % actNum) + return playerID = curPlayer.GetPlayerID() - actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + if actNum == 1: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + else: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge2, {}) + TotalRechargeID = actTotalRechargeInfo.get(ShareDefine.ActKey_ID, 0) state = actTotalRechargeInfo.get(ShareDefine.ActKey_State, 0) - templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0)) + templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0), actNum) if not state or not templateID: - GameWorld.DebugLog("没有累计充值活动,无法领奖!state=%s,templateID=%s" % (state, templateID), playerID) + GameWorld.DebugLog("没有累计充值活动,无法领奖!actNum=%s,state=%s,templateID=%s" % (actNum, state, templateID), playerID) return - playerTotalRechargeID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeID) # 玩家身上的活动ID + playerTotalRechargeID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeID % actNum) # 玩家身上的活动ID if TotalRechargeID != playerTotalRechargeID: return - awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord) + awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum) if awardRecord & pow(2, awardIndex): - GameWorld.DebugLog("已经领取过该累计充值活动奖励!awardIndex=%s" % awardIndex, playerID) + GameWorld.DebugLog("已经领取过该累计充值活动奖励! actNum=%s,awardIndex=%s" % (actNum, awardIndex), playerID) return ipyDataList = IpyGameDataPY.GetIpyGameDataList("TotalRechargeTemplate", templateID) @@ -202,17 +233,17 @@ break if not awardIpyData: - GameWorld.DebugLog("找不到该返利活动档位索引奖励!templateID=%s,awardIndex=%s" % (templateID, awardIndex), playerID) + GameWorld.DebugLog("找不到该返利活动档位索引奖励!actNum=%s,templateID=%s,awardIndex=%s" % (actNum, templateID, awardIndex), playerID) return needGold = awardIpyData.GetNeedGold() actWorldLV = actTotalRechargeInfo.get(ShareDefine.ActKey_WorldLV, 0) awardItemList = __GetItemList(ipyData.GetAwardItem(), curPlayer.GetJob(), actWorldLV) - curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold) + curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold % actNum) if curRechargeGold < needGold: - GameWorld.DebugLog("所需充值仙玉数不足,无法领取!templateID=%s,awardIndex=%s,needGold=%s,curRechargeGold=%s" - % (templateID, awardIndex, needGold, curRechargeGold), playerID) + GameWorld.DebugLog("所需充值额度不足,无法领取!actNum=%s,templateID=%s,awardIndex=%s,needGold=%s,curRechargeGold=%s" + % (actNum, templateID, awardIndex, needGold, curRechargeGold), playerID) return needSpace = len(awardItemList) @@ -221,32 +252,37 @@ return awardRecord |= pow(2, awardIndex) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord, awardRecord) - Sync_TotalRechargeInfo(curPlayer) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum, awardRecord) + Sync_TotalRechargeInfo(curPlayer, actNum) notifyKey = awardIpyData.GetNotifyKey() if notifyKey: PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needGold]) - for itemID, itemCount, isBind in awardItemList: + for itemID, itemCount, _ in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem]) addDataDict = {"TemplateID":templateID, "NeedGold":needGold, "AwardIndex":awardIndex, - "ItemList":str(awardItemList)} + "ItemList":str(awardItemList), "ActNum":actNum} DataRecordPack.DR_FuncGiveItem(curPlayer, "TotalRechargeAward", addDataDict) return -def Sync_TotalRechargeInfo(curPlayer): +def Sync_TotalRechargeInfo(curPlayer, actNum): ## 通知累计充值玩家数据信息 playerActInfo = ChPyNetSendPack.tagMCTotalRechargePlayerInfo() - playerActInfo.GoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold) - playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord) + playerActInfo.ActNum = actNum + playerActInfo.GoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold % actNum) + playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum) NetPackCommon.SendFakePack(curPlayer, playerActInfo) return -def Sync_TotalRechargeActionInfo(curPlayer): +def Sync_TotalRechargeActionInfo(curPlayer, actNum): ## 通知累计充值活动信息 - actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + if actNum == 1: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}) + else: + actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge2, {}) + if not actTotalRechargeInfo: return @@ -254,7 +290,10 @@ return cfgID = actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID) + if actNum == 1: + ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID) + else: + ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge2", cfgID) if not ipyData: return @@ -265,6 +304,7 @@ actWorldLV = actTotalRechargeInfo.get(ShareDefine.ActKey_WorldLV, 0) openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 actInfo = ChPyNetSendPack.tagMCActTotalRechargeInfo() + actInfo.ActNum = actNum actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay) actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay) actInfo.LimitLV = ipyData.GetLVLimit() -- Gitblit v1.8.0