123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- --- 充值挡位功能
- --- Generated by EmmyLua(https://github.com/EmmyLua)
- --- Created by 無心道(15388152619).
- --- DateTime: 2024/11/4 19:16
- RechargeStall = {}
- RechargeStall.__index = RechargeStall
- local this = {}
- local function _rechargeType()
- return "1"
- end
- local function _playerDbKey()
- return "T$recharge_stall_first_data"
- end
- function RechargeStall.get(actor)
- local obj = getplaydef(actor, _playerDbKey())
- return setmetatable(obj or {}, RechargeStall)
- end
- function RechargeStall:save(actor)
- setplaydef(actor, _playerDbKey(), self);
- end
- ---获取某一个挡位信息
- function RechargeStall:stallData(cfgId)
- local var = self[cfgId]
- if not var then
- var = {}
- self[cfgId] = var;
- end
- return var
- end
- ---获取当前挡位充值次数
- function RechargeStall:rechargeTime(cfgId, nowSec)
- local data = self:stallData(cfgId)
- if nowSec then
- data.rtime = nowSec
- end
- return data.rtime or 0
- end
- ---充值事件触发
- function RechargeStall.rechargeEvent(actor, cfg_recharge, count, amount, ext, outRewards)
- local stallId = cfg_recharge.parameter
- local cfg_recharge_gear = ConfigDataManager.getById("cfg_recharge_gear", stallId)
- gameDebug.assertTrue(table.notNullOrEmpty(cfg_recharge_gear), "没有配置充值档位", stallId)
- local stallData = RechargeStall.get(actor)
- --起始时间,结束时间 是否是第一轮
- local startDayTime, endDayTime, firstGroup = this.recordTimes(actor)
- local cfgId = cfg_recharge_gear["id"]
- local rechargeTime = RechargeStall.rechargeTime(stallData, cfgId)
- --职业
- if rechargeTime < startDayTime or endDayTime < rechargeTime then
- local career = getbaseinfo(actor, "getbasecareer")
- -- 拥有首充额外奖励
- local reward_var = cfg_recharge_gear['firstreward']
- if firstGroup == false then
- reward_var = cfg_recharge_gear['resetreward']
- end
- string.putIntIntMap4Career(outRewards, career, reward_var, "#", "|")
- local nowSec = getbaseinfo("nowsec")
- stallData:rechargeTime(cfgId, nowSec)
- stallData:save(actor)
- end
- info(actor, "充值挡位", actor, cfgId, "奖励", outRewards)
- RechargeStall.sendPanel(actor, stallData)
- end
- function RechargeStall.reqAction(actor, type, action, reqParameter)
- if action == "panel" then
- local stallData = RechargeStall.get(actor)
- RechargeStall.sendPanel(actor, stallData)
- end
- end
- --- 请求充值档位信息
- ---@param reqParameter table 请求参数
- function RechargeStall.sendPanel(actor, stallData)
- local recharges = ConfigDataManager.getTable("cfg_recharge_gear")
- gameDebug.assertTrue(table.notNullOrEmpty(recharges), "没有配置充值档位")
- stallData = stallData or RechargeStall.get(actor)
- --起始时间,结束时间 是否是第一轮
- local startDayTime, endDayTime, firstGroup = this.recordTimes(actor)
- local stallList = {}
- for _, cfg in ipairs(recharges) do
- local info = {}
- local cfgId = cfg["id"]
- info.rechargeId = tonumber(cfgId)
- local rechargeTime = RechargeStall.rechargeTime(stallData, cfgId)
- if string.isNullOrEmpty(cfg["firstreward"]) then
- info.isShowFirst = false --没有配置首充奖励所以不需要展示
- info.isRewardFirst = false --没有配置首充奖励所以不需要展示
- else
- info.isShowFirst = rechargeTime < startDayTime or endDayTime < rechargeTime --true 表示要展示首充奖励
- info.isRewardFirst = firstGroup -- true 表示开服时间第一个周期内
- end
- table.insert(stallList, info)
- end
- --this:print("充值档位回包内容", rechargeStallInfo)
- local data = {}
- data["list"] = stallList
- data["endDayTime"] = endDayTime
- Recharge.resAction(actor, _rechargeType(), "panel", data)
- end
- -- 获取当前获取的开启和结束时间
- function this.recordTimes(actor)
- local recharges = ConfigDataManager.getTable("cfg_recharge_gear")
- local nowSec = getbaseinfo("nowsec")
- -- 开服天数
- local serverOpenDays = getbaseinfo(actor, "serveropendays")
- --通过开服时间计算当前最大购买次数
- local resetDay = tonumber(recharges[1]["resettime"])
- local maxFirstCount = math.ceil(serverOpenDays / resetDay)
- --计算到本轮结束还有多少天
- local endDay = maxFirstCount * resetDay - serverOpenDays + 1;
- local nowStartSec = TimeUtil.creteTimeDayStart4Sec(nowSec)
- --计算出结束时间
- local endDayTime = TimeUtil.addDay(nowStartSec, endDay) - 1
- --往前推计算出开始时间
- local startDayTime = TimeUtil.creteTimeDayStart4Sec(TimeUtil.addDay(endDayTime, -(resetDay - 1)))
- --获取开始时间那一天的00:00:00
- startDayTime = TimeUtil.creteTimeDayStart4Sec(startDayTime)
- print("充值首充判定", TimeUtil.timeFormat(startDayTime), TimeUtil.timeFormat(nowSec), TimeUtil.timeFormat(endDayTime),
- "openday", serverOpenDays, maxFirstCount,
- endDay, endDay
- )
- return startDayTime, endDayTime, serverOpenDays <= resetDay
- end
- --TODO 一定要放到文件最后
- EventListerTable.registerType("充值挡位", _rechargeType(), _playerDbKey())
- -- 注册事件
- RechargeEventListerTable:eventLister(_rechargeType(), "充值挡位", RechargeStall.rechargeEvent)
- -- 注册请求消息监听
- RechargeMessageEventListerTable:eventLister(_rechargeType(), "充值挡位", RechargeStall.reqAction)
- -- todo放到最后
- return RechargeStall
|