| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- --新商业化活动——登录豪礼
- --db
- --[=[
- human.db.absAct[id] = {
- loginDay = nil, --活动期间登录的天数
- getRewardRecord = nil, {1,3,2,6} --已领取的奖励记录, 记录的是第几天
- }
- ]=]--
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local AbsActLogic = require("absAct.AbsActLogic")
- local Broadcast = require("broadcast.Broadcast")
- local Lang = require("common.Lang")
- local AbsActExcel = require("excel.absAct")
- local YunYingLogic = require("yunying.YunYingLogic")
- local Util = require("common.Util")
- local LOGTAG = "AbsLoginReward" --日志标识
- local function check(tbl, day)
- if not tbl or not day then
- return false
- end
- for _, v in ipairs(tbl) do
- if v == day then
- return true
- end
- end
- return false
- end
- function isOpen(human, YYInfo, funcConfig)
- local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- return state, endTime, startTime
- end
- function isActive(human, YYInfo, funcConfig)
- local state = isOpen(human, YYInfo, funcConfig)
- return not state
- end
- --红点判断
- function isRed(human, YYInfo, funcConfig)
- local actData = human.db.absAct[funcConfig.funcID]
- if not actData then
- return false
- end
-
- -- local loginDay = actData.loginDay
- -- if not loginDay then
- -- return false
- -- end
- local _, _, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- local config = AbsActExcel.AbsLoginReward
- local getRewardRecord = actData.getRewardRecord
- if getRewardRecord and #getRewardRecord >= #config then
- return false
- end
- local loginDay = Util.diffDay(startTime) + 1
- if getRewardRecord and #getRewardRecord >= loginDay then
- return false
- end
- return true
- end
- function onLogin(human, id)
- local state, _, realStartTime = AbsActLogic.isStarted(human, id)
- if not state then
- return
- end
- local actData = human.db.absAct[id]
- if not actData then
- return
- end
- --处理活动更到线上前,玩家当天已经登录,没有记录当天登录的情况
- -- if not actData.loginDay then
- -- actData.loginDay = 1
- -- --红点刷新
- -- YunYingLogic.sendBanner(human)
- -- local config = AbsActExcel.absActivity[id]
- -- YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
- -- end
- local loginDay = Util.diffDay(realStartTime) + 1
- local getRewardRecord = actData.getRewardRecord
- local config = AbsActExcel.AbsLoginReward
- if not getRewardRecord or (#getRewardRecord <= loginDay and #getRewardRecord <= #config) then
- --红点刷新
- YunYingLogic.sendBanner(human)
- local otherConfig = AbsActExcel.absActivity[id]
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, otherConfig.panelID)
- end
- end
- --跨天函数
- function updateDaily(human, id)
- local state = AbsActLogic.isStarted(human, id)
- if not state then
- return
- end
- local actData = human.db.absAct[id]
- if not actData then
- return
- end
- -- actData.loginDay =( actData.loginDay or 0) + 1
- --红点刷新
- YunYingLogic.sendBanner(human)
- local config = AbsActExcel.absActivity[id]
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
- end
- --查询
- function Query(human, id)
- local state, _, realStartTime = AbsActLogic.isStarted(human, id)
- if not state then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local actData = human.db.absAct[id]
- if not actData then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local msgRet = Msg.gc.GC_LOGINREWARD_QUERY
- local dayRewardData = msgRet.dayRewardData
- local config = AbsActExcel.AbsLoginReward
- dayRewardData[0] = #config
- --local loginDay = actData.loginDay
- local loginDay = Util.diffDay(realStartTime) + 1
-
- local getRewardRecord = actData.getRewardRecord
- for day, cfg in ipairs(config) do
- dayRewardData[day].day = day
- dayRewardData[day].state = 0
- local isGet = check(getRewardRecord, day)
- if loginDay and loginDay >= day and isGet then
- dayRewardData[day].state = 2
- elseif loginDay and loginDay >= day and not isGet then
- dayRewardData[day].state = 1
- end
- local rewardInfo = dayRewardData[day].rewardInfo
- rewardInfo[0] = #cfg.item
- for idx, itemInfo in ipairs(cfg.item) do
- Grid.makeItem(rewardInfo[idx], itemInfo[1], itemInfo[2])
- end
- end
- Msg.send(msgRet, human.fd)
- end
- --领奖
- function GetReward(human, id, dayIndex)
- local state, _, realStartTime = AbsActLogic.isStarted(human, id)
- if not state then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local actData = human.db.absAct[id]
- if not actData then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- --local loginDay = actData.loginDay
- local loginDay = Util.diffDay(realStartTime) + 1
- if not loginDay or dayIndex > loginDay then
- return Broadcast.sendErr(human, Lang.COMMON_TIME_NOT_ENOUGH)
- end
- local getRewardRecord = actData.getRewardRecord
- if getRewardRecord then
- if check(getRewardRecord, dayIndex) then
- return Broadcast.sendErr(human, Lang.YUNYING_GET_ERR_HADGET)
- end
- end
- local config = AbsActExcel.AbsLoginReward
- if dayIndex > #config then
- return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
- end
- --更新db
- getRewardRecord = getRewardRecord or {}
- table.insert(getRewardRecord, dayIndex)
- actData.getRewardRecord = getRewardRecord
- --发放奖励
- local targetDayReward = config[dayIndex].item
- BagLogic.addItemList(human, targetDayReward, LOGTAG)
- --发下客户端更新数据
- Query(human, id) --暂定使用查询协议更新数据
- --更新红点
- if #getRewardRecord >= loginDay or #getRewardRecord >= #config then
- YunYingLogic.sendBanner(human)
- local config = AbsActExcel.absActivity[id]
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
- end
- end
|