--- 限时盲盒 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