From c490fac390e7c495424462d769c52c70b47a34ba Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 27 十一月 2023 17:20:51 +0800 Subject: [PATCH] 10014 【主干】【港台】【砍树】多个直购一次打包购买功能 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 168 insertions(+), 1 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py index f9f4319..a0f95ee 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py @@ -169,12 +169,177 @@ Sync_FirstGoldInfo(curPlayer) return +################################ 每日打包直购礼包 ################################### + +def OnActiviteDailyPackBuyGift(curPlayer, ctgID): + ## 激活每日打包直购礼包 + + isActivite = False + packCTGIDList = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 3) # 打包购买对应充值ID列表 + if ctgID in packCTGIDList: + isActivite = True + # 如果是打包购买的,不管什么状态,直接全部重置 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftPackTime, int(time.time())) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftBuy, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftRecord, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime, 0) + GameWorld.Log("激活打包直购礼包: ctgID=%s" % ctgID, curPlayer.GetID()) + + else: + actCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 2, {}) # 礼包索引对应充值ID列表,没有配置的代表可免费领取 + for awardIndexStr, ctgIDList in actCTGIDDict.items(): + if ctgID not in ctgIDList: + continue + isActivite = True + awardIndex = int(awardIndexStr) + buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy) + updBuyState = buyState|pow(2, awardIndex) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftBuy, updBuyState) + GameWorld.Log("单独激活打包直购礼包: awardIndex=%s,ctgID=%s" % (awardIndex, ctgID), curPlayer.GetID()) + break + + if isActivite: + Sync_DailyPackBuyGiftInfo(curPlayer) + + return isActivite + +def GetDailyPackBuyGift(curPlayer, awardIndex): + ## 领取每日打包直购礼包 + + playerID = curPlayer.GetPlayerID() + + giftItemDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 1, {}) # 礼包索引对应礼包物品列表 + if str(awardIndex) not in giftItemDict: + GameWorld.DebugLog("不存在该每日打包直购礼包! awardIndex=%s" % awardIndex, playerID) + return + itemList = giftItemDict[str(awardIndex)] + + getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftRecord) # 领取记录 + if getRecord&pow(2, int(awardIndex)): + GameWorld.DebugLog("已经领取过该每日打包直购礼包! awardIndex=%s,getRecord=%s" % (awardIndex, getRecord), playerID) + return + + packBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftPackTime) # 打包购买时间戳 + # 打包购买的 + if packBuyTime: + curTime = int(time.time()) + maxDays = IpyGameDataPY.GetFuncCfg("DailyPackBuyGift", 4) + curDays = GameWorld.GetDiff_Day(curTime, packBuyTime) + 1 # 打包购买第x天,购买当天为第1天 + if curDays > maxDays: + GameWorld.DebugLog("打包直购礼包超过可领取最大天: curDays=%s > %s" % (curDays, maxDays), playerID) + return + GameWorld.DebugLog("已打包购买: packBuyTime=%s(%s),curDays=%s" % (packBuyTime, GameWorld.ChangeTimeNumToStr(packBuyTime), curDays), playerID) + else: + actCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 2, {}) # 礼包索引对应充值ID列表,没有配置的代表可免费领取 + buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy) # 单独购买状态 + if str(awardIndex) in actCTGIDDict and not buyState&pow(2, awardIndex): + GameWorld.DebugLog("今日该打包直购礼包未购买,无法领取: awardIndex=%s,buyState=%s" % (awardIndex, buyState), playerID) + return + GameWorld.DebugLog("已单独购买: awardIndex=%s,buyState=%s" % (awardIndex, buyState), playerID) + + # 检查背包 + if not ItemControler.CheckPackSpaceEnough(curPlayer, itemList): + return + + # 更新已领取成功标记 + updRecord = getRecord|pow(2, awardIndex) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftRecord, updRecord) + Sync_DailyPackBuyGiftInfo(curPlayer) + GameWorld.DebugLog("领取打包直购礼包: awardIndex=%s,updRecord=%s" % (awardIndex, updRecord), playerID) + + # 给物品 + for itemID, itemCount, isAuctionItem in itemList: + ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem]) + + return + +def DoDailyPackBuyGiftOnDay(curPlayer): + ## 每日打包直购礼包过天 + + playerID = curPlayer.GetPlayerID() + curTime = int(time.time()) + # 补发未领取的天数奖励 + lastOnDayTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime) # 上次处理的过天时间 + packBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftPackTime) # 打包购买时间戳 + getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftRecord) # 领取记录 + buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy) # 单独购买状态 + + GameWorld.DebugLog("每日打包直购礼包过天: packBuyTime=%s(%s),lastOnDayTime=%s(%s),getRecord=%s,buyState=%s" + % (packBuyTime, GameWorld.ChangeTimeNumToStr(packBuyTime), + lastOnDayTime, GameWorld.ChangeTimeNumToStr(lastOnDayTime), getRecord, buyState), playerID) + + giftItemDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 1, {}) # 礼包索引对应礼包物品列表 + actCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 2, {}) # 礼包索引对应充值ID列表,没有配置的代表可免费领取 + + # 打包购买的 + if packBuyTime: + maxDays = IpyGameDataPY.GetFuncCfg("DailyPackBuyGift", 4) + curDays = GameWorld.GetDiff_Day(curTime, packBuyTime) + 1 # 打包购买第x天,购买当天为第1天 + alreadyAwardDays = GameWorld.GetDiff_Day(lastOnDayTime, packBuyTime) if lastOnDayTime else 0 # 已经奖励过的天数 + GameWorld.DebugLog(" alreadyAwardDays=%s,curDays=%s" % (alreadyAwardDays, curDays), playerID) + # 补发上次离线天的 + awardDays = alreadyAwardDays + 1 + for awardIndexStr, addItemList in giftItemDict.items(): + if getRecord&pow(2, int(awardIndexStr)): + GameWorld.DebugLog(" 已经领取过该奖励了,不补发! awardIndex=%s,getRecord=%s" % (awardIndexStr, getRecord), playerID) + continue + GameWorld.DebugLog(" 补发离线天! awardDays=%s,awardIndex=%s" % (awardDays, awardIndexStr), playerID) + paramList = [awardDays] + PlayerControl.SendMailByKey("DailyPackBuyGift1", [playerID], addItemList, paramList) + + # 补发未登录完整天的 + for day in range(awardDays + 1, curDays): + if day > maxDays: + break + paramList = [day] + GameWorld.DebugLog(" 补发完整天! day=%s" % (day), playerID) + for addItemList in giftItemDict.values(): + PlayerControl.SendMailByKey("DailyPackBuyGift1", [playerID], addItemList, paramList) + + # 超过最大天了,重置所有 + if curDays > maxDays: + GameWorld.DebugLog(" 超过最大天了,重置所有! curDays=%s" % (curDays), playerID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftPackTime, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime, 0) + else: + GameWorld.DebugLog(" 未超过最大天,过天重置! curDays=%s" % (curDays), playerID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime, curTime) + else: + # 单天补发的 + for awardIndexStr, addItemList in giftItemDict.items(): + if awardIndexStr in actCTGIDDict: + if not buyState&pow(2, int(awardIndexStr)): + GameWorld.DebugLog("没有打包购买且没有单独购买,不补发! awardIndex=%s,packBuyTime=%s,buyState=%s" + % (awardIndexStr, packBuyTime, buyState), playerID) + continue + if getRecord&pow(2, int(awardIndexStr)): + GameWorld.DebugLog("已经领取过该奖励了,不补发! awardIndex=%s,getRecord=%s" % (awardIndexStr, getRecord), playerID) + continue + GameWorld.DebugLog(" 补发离线天! awardIndex=%s" % (awardIndexStr), playerID) + paramList = [] + PlayerControl.SendMailByKey("DailyPackBuyGift2", [playerID], addItemList, paramList) + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftBuy, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftRecord, 0) + Sync_DailyPackBuyGiftInfo(curPlayer) + return + +def Sync_DailyPackBuyGiftInfo(curPlayer): + clientPack = ChPyNetSendPack.tagMCDailyPackBuyGiftInfo() + clientPack.Clear() + clientPack.PackBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftPackTime) + clientPack.BuyStateToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy) + clientPack.AwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftRecord) + NetPackCommon.SendFakePack(curPlayer, clientPack) + return + ################################################################### ## 充值豪礼OnDay # @param curPlayer: 玩家 # @return: None def OnDay(curPlayer): + DoDailyPackBuyGiftOnDay(curPlayer) return ## 充值豪礼OnLogin @@ -188,6 +353,7 @@ #更新首充提示开始计时时间 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, int(time.time())) + Sync_DailyPackBuyGiftInfo(curPlayer) return ## 玩家充值元宝 @@ -202,7 +368,8 @@ firstGoldCTGIDList = IpyGameDataPY.GetFuncEvalCfg("FirstGold", 4) if ctgID in firstGoldCTGIDList: OnActiviteFirstGold(curPlayer) - + + OnActiviteDailyPackBuyGift(curPlayer, ctgID) return def OnActiviteFirstGold(curPlayer): -- Gitblit v1.8.0