DailyDiamondGift = {} DailyDiamondGift.__index = DailyDiamondGift local this = {} --- 每日钻石礼包类型 local function _rechargeType() return "15" end local function _playerDbKey() return "J$daily_diamond_gift_pack" end function DailyDiamondGift.get(actor) local obj = getplaydef(actor, _playerDbKey()) return setmetatable(obj or {}, DailyDiamondGift) end function DailyDiamondGift:save(actor) setplaydef(actor, _playerDbKey(), self); end function DailyDiamondGift:setRecordIndex(rechargeId, index) if not self.dailyGiftInfo then self.dailyGiftInfo = {} end self.dailyGiftInfo[rechargeId] = index end function DailyDiamondGift:getRecordIndex(rechargeId) if not self.dailyGiftInfo then self.dailyGiftInfo = {} end return self.dailyGiftInfo[rechargeId] or 0 end ---充值事件触发 function DailyDiamondGift.rechargeEvent(actor, cfg_recharge, count, amount, ext, outRewards) DailyDiamondGift.print(actor, "购买每日钻石礼包", cfg_recharge, "购买数量", count, ext, outRewards) if ext == "" then ext = {} end local dailyGiftId = cfg_recharge.parameter local rechargeType = cfg_recharge.type local giftCfg = ConfigDataManager.getById("cfg_diamondgiftbag", dailyGiftId) gameDebug.assertTrue(table.notNullOrEmpty(giftCfg), "没有配置每日钻石礼包", dailyGiftId) if not ConditionManager.Check(actor, giftCfg.conditionid) then tipinfo(actor, "购买条件不满足") return end local purchase = giftCfg.purchase local dailyDiamondGift = DailyDiamondGift.get(actor) if string.isNullOrEmpty(purchase) then local cfgs = ConfigDataManager.getTable("cfg_diamondgiftbag", "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) DailyDiamondGift.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 DailyDiamondGift.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 dailyDiamondGift:setRecordIndex(recId, index) end CountManager.count(actor, limited, total) :: continue :: end else -- 购买单个礼包 local index = ext[tonumber(giftCfg.id)] or 0 this.mergeItem(outRewards, giftCfg, index) if index ~= 0 then dailyDiamondGift:setRecordIndex(cfg_recharge.id, index) end end dailyDiamondGift:save(actor) -- 发送界面信息数据 dailyDiamondGift.queryData(actor, { type = rechargeType, action = "panel" }) dailyDiamondGift.print(actor, "购买每日钻石礼包成功", cfg_recharge, "购买数量", count, ext, outRewards) end --- 请求充值档位信息 ---@param msgData table 请求参数 function DailyDiamondGift.reqRechargeAction(actor, rechargeType, action, reqParameter) if action == "panel" then DailyDiamondGift.queryData(actor, reqParameter) end end --- 每日钻石礼包信息 function DailyDiamondGift.queryData(actor, reqParameter) DailyDiamondGift.print(actor, "请求每日钻石礼包信息", reqParameter) local rechargeType = reqParameter["type"] local dailyDiamondGifts = ConfigDataManager.getList("cfg_diamondgiftbag") gameDebug.assertTrue(table.notNullOrEmpty(dailyDiamondGifts), "没有配置充值档位") local resData = {} local group = 0 local countInfo = {} local dailyDiamondGift = DailyDiamondGift.get(actor) DailyDiamondGift.print("配置表数据", dailyDiamondGifts) for _, cfg in pairs(dailyDiamondGifts) do if ConditionManager.Check(actor, cfg.conditionid) then local id = cfg.id local rechargeId = ConfigDataManager.getTableValue("cfg_recharge", "id", "parameter", id, "type", rechargeType) local index = dailyDiamondGift: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 this.mergeItem(outRewards, cfg, index) string.putIntIntMap(outRewards, cfg['rewards'], "#", "|") local optionalReward = cfg['optionalreward'] if not string.isNullOrEmpty(optionalReward) then local strShuXian = string.split(optionalReward, "|") local strJinHao = strShuXian[index] DailyDiamondGift.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 DailyDiamondGift.login(play) DailyDiamondGift.queryData(play, { type = _rechargeType(), action = "panel" }) end --- 零点处理 function DailyDiamondGift.zero(play) DailyDiamondGift.queryData(play, { type = _rechargeType(), action = "panel" }) end --- 打印日志 local isPrintLog = false function DailyDiamondGift.print(...) if isPrintLog then return end gameDebug.print(...) end function dailydiamondgifttest(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", "每日钻石礼包", DailyDiamondGift.zero) -- 注册登录事件 LoginEventListerTable:eventLister("0", "每日钻石礼包", DailyDiamondGift.login) -- 注册充值回调事件 RechargeEventListerTable:eventLister(_rechargeType(), "每日钻石礼包", DailyDiamondGift.rechargeEvent) -- 注册请求消息监听 RechargeMessageEventListerTable:eventLister(_rechargeType(), "每日钻石礼包", DailyDiamondGift.reqRechargeAction)