| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- ---------------------------------------------------
- -- 充值-每周/每月礼包
- -- 开服起每x天为1期
- -- db.richangLibao[libaoType] = libaoData
- -- libaoData.ts 购买时间戳
- -- libaoData.list 购买记录 [id] = cnt
- ---------------------------------------------------
- local PresentExcel = require("excel.present")
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local CommonDB = require("common.CommonDB")
- local Msg = require("core.Msg")
- local Broadcast = require("broadcast.Broadcast")
- local PanelDefine = require("broadcast.PanelDefine")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local BuyLogic = require("topup.BuyLogic")
- local YunYingLogic = require("yunying.YunYingLogic")
- LIBAOTYPE_WEEK = 1 -- 每周礼包
- LIBAOTYPE_MONTH = 2 -- 每月礼包
- FREE_BUY = 1 -- 免费领取
- RMB_BUY = 2 -- rmb购买
- -- 根据类型获取配置
- function getConfigs(libaoType)
- if libaoType == LIBAOTYPE_WEEK then
- return PresentExcel.weekLibao
- elseif libaoType == LIBAOTYPE_MONTH then
- return PresentExcel.monthLibao
- end
- end
- -- 获取刷新周期 x天
- function getRefreshDay(libaoType)
- if libaoType == LIBAOTYPE_WEEK then
- return 7
- elseif libaoType == LIBAOTYPE_MONTH then
- return 30
- end
- end
- --
- function getLogType(libaoType)
- if libaoType == LIBAOTYPE_WEEK then
- return "week_libao"
- elseif libaoType == LIBAOTYPE_MONTH then
- return "month_libao"
- end
- end
- -- 获取本期礼包开始和结束时间
- function getLibaoTime(libaoType)
- local openDay = CommonDB.getServerOpenDay()
- if not openDay then return end -- 没有设置开服时间 不开活动哦
- if openDay < 1 then return end -- 开服时间不对 也不开
- local refreshDay = getRefreshDay(libaoType)
- if not refreshDay then return end
- local day = openDay % refreshDay -- 本期礼包 第x天
- if day == 0 then
- day = refreshDay
- end
- local dayStartTime = Util.getDayStartTime(os.time())
- local startTime = dayStartTime - (day - 1) * 86400
- local endTime = startTime + refreshDay * 86400
- return startTime, endTime
- end
- -- 检查是否需要刷新
- function checkDirty(human)
- if not human.db.richangLibao then
- return
- end
- for libaoType, libaoData in pairs(human.db.richangLibao) do
- local startTime, endTime = getLibaoTime(libaoType)
- if (startTime and libaoData.ts < startTime) or
- (endTime and libaoData.ts > endTime) then
- human.db.richangLibao[libaoType] = nil
- end
- end
- end
- -- 获取已购买次数
- function getBuyCnt(human, libaoType, id)
- if not human.db.richangLibao then
- return 0
- end
- local libaoData = human.db.richangLibao[libaoType]
- if not libaoData then
- return 0
- end
- return libaoData.list[id] or 0
- end
- -- 增加已购买次数
- function addBuyCnt(human, libaoType, id)
- if not human.db.richangLibao then
- human.db.richangLibao = {}
- end
- local libaoData = human.db.richangLibao[libaoType]
- if not libaoData then
- libaoData = {}
- libaoData.ts = os.time()
- libaoData.list = {}
- human.db.richangLibao[libaoType] = libaoData
- end
- libaoData.list[id] = (libaoData.list[id] or 0) + 1
- end
- -- 封装礼包结构体
- function fontLibaoNet(net, id, config, libaoType, human)
- net.id = id
- net.items[0] = #config.items
- for i = 1, net.items[0] do
- local itemID = config.items[i][1]
- local itemCnt = config.items[i][2]
- Grid.makeItem(net.items[i], itemID, itemCnt)
- end
- net.name = config.name
- net.buyItem[0] = 0
- if config.buyID > 0 then
- net.buyItem[0] = 1
- BuyLogic.fontBuyItem(human, net.buyItem[1], config.buyID)
- end
- net.cnt = getBuyCnt(human, libaoType, id)
- net.maxCnt = config.cnt
- end
- -- 界面查询
- function sendQuery(human, libaoType)
- local startTime, endTime = getLibaoTime(libaoType)
- if not startTime then -- 没设置开服时间不开
- return Broadcast.sendErr(human, Lang.JJC_NOT_SET_OPEN_TIME)
- end
- local configs = getConfigs(libaoType)
- if not configs then return end
- checkDirty(human)
- local msgRet = Msg.gc.GC_RICHANG_LIBAO_QUERY
- msgRet.libaoType = libaoType
- msgRet.leftTime = endTime - os.time()
- msgRet.list[0] = #configs
- for i = 1, msgRet.list[0] do
- local config = configs[i]
- fontLibaoNet(msgRet.list[i], i, config, libaoType, human)
- end
- --Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- end
- -- 购买礼包
- function buyLibao(human, libaoType, id, buyType)
- local startTime, endTime = getLibaoTime(libaoType)
- if not startTime then -- 没设置开服时间不开
- return Broadcast.sendErr(human, Lang.JJC_NOT_SET_OPEN_TIME)
- end
- local configs = getConfigs(libaoType)
- local config = configs and configs[id]
- if not config then return end
- if buyType == FREE_BUY and config.buyID > 0 then
- return -- rmb礼包不能免费领取
- end
- checkDirty(human)
- if getBuyCnt(human, libaoType, id) >= config.cnt then
- return Broadcast.sendErr(human, Lang.YUNYING_BUY_ERR_CNT)
- end
- local logType = getLogType(libaoType)
- addBuyCnt(human, libaoType, id)
- BagLogic.addItemList(human, config.items, logType)
- sendQuery(human, libaoType)
-
- if libaoType == LIBAOTYPE_WEEK then
- for k, v in pairs(funcID) do
- YunYingLogic.updateIcon(YYInfo[k], human)
- YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3104)
- break
- end
- else
- for k, v in pairs(funcID) do
- YunYingLogic.updateIcon(YYInfo[k], human)
- YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3207)
- break
- end
- end
- end
- -- 红点
- function isRed(human, YYInfo, funcConfig)
- local libaoType = nil
- if funcConfig.panelID == PanelDefine.PANEL_ID_3104 then
- libaoType = LIBAOTYPE_WEEK
- elseif funcConfig.panelID == PanelDefine.PANEL_ID_3207 then
- libaoType = LIBAOTYPE_MONTH
- end
- if not libaoType then return end
- local configs = getConfigs(libaoType)
- if not configs then return end
- for id, config in pairs(configs) do
- if config.buyID < 1 and
- getBuyCnt(human, libaoType, id) < config.cnt then
- return true
- end
- end
- end
- -- 是否开启
- function isOpen(human, YYInfo, funcConfig)
- local libaoType = nil
- if funcConfig.panelID == PanelDefine.PANEL_ID_3104 then
- libaoType = LIBAOTYPE_WEEK
- elseif funcConfig.panelID == PanelDefine.PANEL_ID_3207 then
- libaoType = LIBAOTYPE_MONTH
- end
- if not libaoType or not getLibaoTime(libaoType) then
- return
- end
- local startTime, endTime = getLibaoTime(libaoType)
- return true, endTime,startTime
- end
- function updateDaily(human, funcID)
- checkDirty(human)
- end
|