| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- --- 限时盲盒
- local CommonDB = require("common.CommonDB")
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local ObjHuman = require("core.ObjHuman")
- local Msg = require("core.Msg")
- local Broadcast = require("broadcast.Broadcast")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local ItemDefine = require("bag.ItemDefine")
- local BuyLogic = require("topup.BuyLogic")
- local AbsActDefine = require("absAct.AbsActDefine")
- local AbsActLogic = require("absAct.AbsActLogic")
- local OpenActExcel = require("excel.openAct")
- local YunYingLogic = require("yunying.YunYingLogic")
- local PanelDefine = require("broadcast.PanelDefine")
- PRESENT_LIMIT_MANGHE_LIST = nil
- function initAfterHot()
- -- if PRESENT_LIMIT_MANGHE_LIST then return end -- 策划测试 OS 修改可能会导致 不会重复 载入 去掉
- local oepenTime = CommonDB.getServerOpenTime()
- if oepenTime == 0 then return end
- PRESENT_LIMIT_MANGHE_LIST = {}
- local oneDay = 24 * 60 * 60
- for k, config in pairs(OpenActExcel.limitMangHe) do
- if not PRESENT_LIMIT_MANGHE_LIST[config.actId] then
- PRESENT_LIMIT_MANGHE_LIST[config.actId] = {}
- local time = (config.openStart - 1) * oneDay + oepenTime
- local time2 = config.openEnd * oneDay + oepenTime
- local startTime = Util.getDayStartTime(time)
- local endTime = Util.getDayStartTime(time2) - 1
- -- 如果是当天就结束的活动
- if config.openStart == config.openEnd then
- endTime = startTime + oneDay - 1
- end
- PRESENT_LIMIT_MANGHE_LIST[config.actId].startTime = startTime
- PRESENT_LIMIT_MANGHE_LIST[config.actId].endTime = endTime
- config.startTime = startTime
- config.endTime = endTime
- end
- PRESENT_LIMIT_MANGHE_LIST[config.actId].list = PRESENT_LIMIT_MANGHE_LIST[config.actId].list or {}
- local len = #PRESENT_LIMIT_MANGHE_LIST[config.actId].list
- PRESENT_LIMIT_MANGHE_LIST[config.actId].list[len + 1] = {}
- PRESENT_LIMIT_MANGHE_LIST[config.actId].list[len + 1] = k
- end
- end
- function isOpen(human, YYInfo, funcConfig)
- if not PRESENT_LIMIT_MANGHE_LIST then return end
- local now = os.time()
- local config = PRESENT_LIMIT_MANGHE_LIST[funcConfig.param]
- if not config then return end
-
- if now >= config.startTime and now < config.endTime then
- return true
- end
- end
- --
- function getLeftTime(human, YYInfo, funcConfig)
- if isOpen(human, YYInfo, funcConfig) then
- local config = PRESENT_LIMIT_MANGHE_LIST[funcConfig.param]
- return config.endTime - os.time()
- end
- return 0
- end
- function getBuyCnt(human, id)
- if human.db.limitMangHe and human.db.limitMangHe[id] then
- return human.db.limitMangHe[id]
- end
- return 0
- end
- function getBoxState(human, param)
- local now = os.time()
- local limitConfig = PRESENT_LIMIT_MANGHE_LIST[param]
- if now >= limitConfig.startTime and now < limitConfig.endTime then
- if not human.db.limitMangHe or not human.db.limitMangHe.boxGet or not human.db.limitMangHe.boxGet[param] or not Util.isSameDay(human.db.limitMangHe.boxGet[param]) then
- return true
- end
- end
-
- return false
- end
- function fontGift(human, net , id)
- local config = OpenActExcel.limitMangHe[id]
- net.id = id
- for i = 1, #config.reward do
- Grid.makeItem(net.item[i], config.reward[i][1], config.reward[i][2])
- end
- net.item[0] = #config.reward
- net.cnt = getBuyCnt(human, id)
- net.maxCnt = config.cnt
- net.name = config.name or ""
- BuyLogic.fontBuyItem(human, net.buyMsg, config.buyID)
- end
- function query(human, param)
- local now = os.time()
- local limitConfig = PRESENT_LIMIT_MANGHE_LIST[param]
- if now < limitConfig.startTime or now >= limitConfig.endTime then
- return
- end
- local msgRet = Msg.gc.GC_OA_LIMIT_MANGHE_QUERY
- for k, id in ipairs(limitConfig.list) do
- local net = msgRet.list[k]
- fontGift(human, msgRet.list[k], id)
- end
- msgRet.list[0] = #limitConfig.list
- msgRet.startTime = limitConfig.startTime
- msgRet.endTime = limitConfig.endTime
- msgRet.param = param
- msgRet.state = getBoxState(human, param) and 1 or 0
- -- Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- end
- function buy(human, buyID)
- -- 存在多个特惠礼包 同时 开放
- local actId
- local id
- for k, config in pairs(OpenActExcel.limitMangHe) do
- if config.buyID == buyID then
- actId = config.actId
- id = k
- break
- end
- end
- if not id then return end
- local now = os.time()
- local limitConfig = PRESENT_LIMIT_MANGHE_LIST[actId]
- if now < limitConfig.startTime or now >= limitConfig.endTime then
- return
- end
- local config = OpenActExcel.limitMangHe[id]
- if getBuyCnt(human, id) >= config.cnt then
- return
- end
- -- 当金币购买之后超过最大金币时,不允许购买
- for j = 1, #config.reward do
- local itemID = config.reward[j][1]
- local itemCnt = config.reward[j][2]
- if itemID == ItemDefine.ITEM_JINBI_ID then
- if not ObjHuman.canAddJinbi(human, itemCnt) then
- return
- end
- end
- end
- human.db.limitMangHe = human.db.limitMangHe or {}
- human.db.limitMangHe[id] = human.db.limitMangHe[id] or 0
- human.db.limitMangHe[id] = human.db.limitMangHe[id] + 1
- BagLogic.addItemList(human, config.reward , "limit_mangHe")
- Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
- query(human, config.actId)
- end
- function getBox(human, param)
- if getBoxState(human, param) then
- local now = os.time()
- local get = false
- local limitConfig = PRESENT_LIMIT_MANGHE_LIST[param]
- if now >= limitConfig.startTime and now < limitConfig.endTime then
- if not human.db.limitMangHe or not human.db.limitMangHe.boxGet or not human.db.limitMangHe.boxGet[param]
- or not Util.isSameDay(human.db.limitMangHe.boxGet[param]) then
- human.db.limitMangHe = human.db.limitMangHe or {}
- human.db.limitMangHe.boxGet = human.db.limitMangHe.boxGet or {}
- human.db.limitMangHe.boxGet[param] = now
- get = true
- end
- end
- if get then
- for k, config in pairs(OpenActExcel.limitMangHe) do
- if config.actId == param and #config.dayReward > 0 then
- BagLogic.addItemList(human, config.dayReward, "limit_mangHe")
- break
- end
- end
-
- query(human, param)
-
- for k, v in pairs(funcID) do
- YunYingLogic.updateIcon(YYInfo[k], human)
- YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3606,param)
- break
- end
- end
-
- end
- end
- function isRed(human,YYInfo, funcConfig)
- local now = os.time()
- local limitConfig = PRESENT_LIMIT_MANGHE_LIST[funcConfig.param]
- if now >= limitConfig.startTime and now < limitConfig.endTime then
- if getBoxState(human, funcConfig.param) then
- return true
- end
- end
- end
|