--- --- Created by zhouzhipeng. --- DateTime: 2024/11/5 上午11:13 --- Desc:每日礼包 --- DailyGiftPack = {} DailyGiftPack.__index = DailyGiftPack local this = {} --local DAILY_GIFT = 4 --- 每日礼包类型 local function _rechargeType() return "4" end local function _playerDbKey() return "J$daily_gift_pack_data" end function DailyGiftPack.get(actor) local obj = getplaydef(actor, _playerDbKey()) return setmetatable(obj or {}, DailyGiftPack) end function DailyGiftPack:save(actor) setplaydef(actor, _playerDbKey(), self); end function DailyGiftPack:setRecordIndex(rechargeId, index) if not self.dailyGiftInfo then self.dailyGiftInfo = {} end self.dailyGiftInfo[rechargeId] = index end function DailyGiftPack:getRecordIndex(rechargeId) if not self.dailyGiftInfo then self.dailyGiftInfo = {} end return self.dailyGiftInfo[rechargeId] or 0 end ---充值事件触发 function DailyGiftPack.rechargeEvent(actor, cfg_recharge, count, amount, ext, outRewards) DailyGiftPack.print(actor, "购买每日礼包", cfg_recharge, "购买数量", count, ext, outRewards) if ext == "" then ext = {} end local dailyGiftId = cfg_recharge.parameter local rechargeType = cfg_recharge.type local cfg_DailyGiftPack = ConfigDataManager.getById("cfg_DailyGiftPack", dailyGiftId) gameDebug.assertTrue(table.notNullOrEmpty(cfg_DailyGiftPack), "没有配置每日礼包", dailyGiftId) if not ConditionManager.Check(actor, cfg_DailyGiftPack.conditionid) then tipinfo(actor, "购买条件不满足") return end local purchase = cfg_DailyGiftPack.purchase local dailyGiftPack = DailyGiftPack.get(actor) if string.isNullOrEmpty(purchase) then local cfgs = ConfigDataManager.getTable("cfg_DailyGiftPack", "purchase", dailyGiftId) if not cfgs then tipinfo(actor, "一键购买配置错误") end -- 判断是否购买过单个礼包 for _, cfg in pairs(cfgs) do if tonumber(cfg.price) == 0 then goto continue end local c = CountManager.getCount(actor, cfg["limited"]) local buyCount = c.count if buyCount > 0 then tipinfo(actor, "购买过单个礼包") return end :: continue :: end gameDebug.assertTrue(table.notNullOrEmpty(cfgs), "没有一键购买每日礼包配置", dailyGiftId) DailyGiftPack.print("读取的配置", cfgs) -- 购买一键礼包 for i = 1, #cfgs do local cfg = cfgs[i] if tonumber(cfg.price) == 0 then goto continue end local limited = cfg["limited"] local total = tonumber(ConfigDataManager.getTableValue("Count_count", "total", "id", limited)) local index = ext[tonumber(cfg.id)] or 0 for j = 1, total do DailyGiftPack.print(actor, "购买一键礼包", cfg.id, "购买次数", j, "i", i, "ext", ext, "ext[e]", index) this.mergeItem(outRewards, cfg, index) end local recId = ConfigDataManager.getTableValue("cfg_recharge", "id", "parameter", cfg.id, "type", rechargeType) if index ~= 0 then dailyGiftPack:setRecordIndex(recId, index) end CountManager.count(actor, limited, total) :: continue :: end else -- 购买单个礼包 local index = ext[tonumber(cfg_DailyGiftPack.id)] or 0 this.mergeItem(outRewards, cfg_DailyGiftPack, index) if index ~= 0 then dailyGiftPack:setRecordIndex(cfg_recharge.id, index) end end dailyGiftPack:save(actor) -- 发送界面信息数据 DailyGiftPack.queryData(actor, { type = rechargeType, action = "panel" }) DailyGiftPack.print(actor, "购买每日礼包成功", cfg_recharge, "购买数量", count, ext, outRewards) end --- 请求充值档位信息 ---@param msgData table 请求参数 function DailyGiftPack.reqRechargeAction(actor, rechargeType, action, reqParameter) if action == "panel" then DailyGiftPack.queryData(actor, reqParameter) elseif action == "reward" then DailyGiftPack.gainReward(actor, reqParameter) end end --- 每日礼包信息 function DailyGiftPack.queryData(actor, reqParameter) DailyGiftPack.print(actor, "请求每日礼包信息", reqParameter) local rechargeType = reqParameter["type"] local dailyGiftPacks = ConfigDataManager.getList("cfg_DailyGiftPack") gameDebug.assertTrue(table.notNullOrEmpty(dailyGiftPacks), "没有配置充值档位") local resData = {} local group = 0 local countInfo = {} local dailyGiftPack = DailyGiftPack.get(actor) DailyGiftPack.print("配置表数据", dailyGiftPacks) for _, cfg in pairs(dailyGiftPacks) do if ConditionManager.Check(actor, cfg.conditionid) then local id = cfg.id local rechargeId = ConfigDataManager.getTableValue("cfg_recharge", "id", "parameter", id, "type", rechargeType) --local c = CountManager.getCount(actor, cfg["limited"]) --local count = c.count local index = dailyGiftPack:getRecordIndex(rechargeId) countInfo[rechargeId] = index group = cfg.packagetype end end resData['group'] = group resData['countInfo'] = countInfo Recharge.resAction(actor, rechargeType, reqParameter.action, resData) end function DailyGiftPack.gainReward(actor, reqParameter) end function this.mergeItem(outRewards, cfg, index) string.putIntIntMap(outRewards, cfg['rewards'], "#", "|") -- todo 待优化,optionalreward 分隔为 {1={itemId=count},2={itemId=count},3={itemId=count}} local optionalReward = cfg['optionalreward'] if not string.isNullOrEmpty(optionalReward) then local strShuXian = string.split(optionalReward, "|") local strJinHao = strShuXian[index] DailyGiftPack.print("合并奖励", cfg, "分隔好的", strShuXian, "根据索引选的", strJinHao, "索引", index) local str = string.split(strJinHao, "#") local itemCfgId = tonumber(str[1]) local oldCount = outRewards[itemCfgId] or 0 outRewards[itemCfgId] = oldCount + tonumber(str[2]) end end --- 登录处理 function DailyGiftPack.login(play) DailyGiftPack.queryData(play, { type = _rechargeType(), action = "panel" }) end --- 零点处理 function DailyGiftPack.zero(play) DailyGiftPack.queryData(play, { type = _rechargeType(), action = "panel" }) end --- 打印日志 local isPrintLog = true function DailyGiftPack.print(...) if isPrintLog then return end gameDebug.print(...) end function dailygiftpacktest(actor, id, type) gameDebug.print(actor, "请求每日礼包", id) local tab if tonumber(type == 1) then tab = { [1] = 1 } else tab = { [1] = 1, [2] = 1, [3] = 1, [4] = 1 } end Recharge.request(actor, { rechargeId = id, count = 1, extraParams = tab }) end EventListerTable.registerType("每日礼包", _rechargeType(), _playerDbKey()) -- 凌晨刷新事件 ZeroEventListerTable:eventLister("0", "每日礼包", DailyGiftPack.zero) -- 注册登录事件 LoginEventListerTable:eventLister("0", "每日礼包", DailyGiftPack.login) -- 注册充值回调事件 RechargeEventListerTable:eventLister(_rechargeType(), "每日礼包", DailyGiftPack.rechargeEvent) -- 注册请求消息监听 RechargeMessageEventListerTable:eventLister(_rechargeType(), "每日礼包", DailyGiftPack.reqRechargeAction)