---------------------------- -- 彈窗禮包 ---------------------------- local BuyExcel = require("excel.buy").buy local GiftExcel = require("excel.buy").gift local ItemDefine = require("bag.ItemDefine") local Grid = require("bag.Grid") local NewLogic = require("role.NewLogic") local BagLogic = require("bag.BagLogic") local BuyLogic = require("topup.BuyLogic") -- 推送协议类型 local GC_GIFT_GENERATE = 50 local GC_QUERY_GIFT = 51 -- 礼包触发事件 local PRINCIPAL_LINE_EVNET = 1 -- 主线推图 local EVAL_TOWER_EVENT = 2 -- 恶魔之塔 local Upgrade_HERO_EVENT = 3 -- 英雄升星 --[[ human.db.gift = { [id] = startTimeStamp } ]] local function genGiftData(human, id,startTime,region,isNew) local cfg = GiftExcel[id] local buyCfg = BuyExcel[cfg.buyID] -- 获取礼包信息 local buyItem = {} BuyLogic.fontBuyItem(human, buyItem, cfg.buyID) -- 获取礼包content local itemData = {} for _,item in ipairs(cfg.content) do local data = { getway = {}, suipian = {}, equip = {}, fuwen = {}, } if not ItemDefine.isEquip(item[1]) then Grid.makeItem(data, item[1], item[2]) end itemData[#itemData+1] = data end return { id = id, buyItem = buyItem, startTimeStamp = startTime, restTime = cfg.ttl - (os.time() - startTime), isNew = isNew, itemData = itemData, } end local function genGift(human,id) -- 已经触发过礼包了 if human.db.gift.unlock[id] then return end human.db.gift.unlock[id] = true local now = os.time() human.db.gift.online[id] = now local giftData = genGiftData(human, id,now,human.region or "CN",1) return NewLogic.PushClient(human,GC_GIFT_GENERATE,{gift = giftData}) end local function cleanGift(human) local nowTime = os.time() local gift = human.db.gift.online for id,ts in pairs(gift) do local cfg = GiftExcel[id] -- 是否需要判断cfg if nowTime - ts >= cfg.ttl then gift[id] = nil end end human.db.gift.online = gift end local function sendHumanGift(human) local gift = human.db.gift.online local list = {} -- 数据太大不好控制大小,分批次传送 for id,ts in pairs(gift) do list[#list + 1] = genGiftData(human, id,ts,human.region or "CN") --[[if #list >= 5 then NewLogic.PushClient(human,GC_QUERY_GIFT,{ list = list, isFinish = 1, }) list = {} end]] end -- 通知客户端 NewLogic.PushClient(human,GC_QUERY_GIFT,{ list = list, isFinish = 2, }) end local handler = { [PRINCIPAL_LINE_EVNET] = function(human,param) for id,cfg in pairs(GiftExcel) do -- 触发新礼包 if cfg.trigger == PRINCIPAL_LINE_EVNET and cfg.param[1] == param.id then genGift(human,id) end end end, [EVAL_TOWER_EVENT] = function(human,param) for id,cfg in pairs(GiftExcel) do -- 触发新礼包 if cfg.trigger == EVAL_TOWER_EVENT and cfg.param[1] == param.id then genGift(human,id) end end end, [Upgrade_HERO_EVENT] = function(human,param) -- 检测是否是第一个星级的英雄 local star = param.star --[[local HeroLogic = require("hero.HeroLogic") local maxStar,cnt = HeroLogic.getHeroMaxStarCtn(human) if maxStar ~= star then return end if cnt ~= 1 then return end]] for id,cfg in pairs(GiftExcel) do -- 触发新礼包 if cfg.trigger == Upgrade_HERO_EVENT and cfg.param[1] == star then genGift(human,id) end end end, } --------------------------------------------------------------- function onLogin(human) -- 登录清楚过期礼包 cleanGift(human) -- 开启事件监听!? return sendHumanGift(human) end function trigger(human,type,param) local f = handler[type] if not f then return end return f(human,param) end function buy(human,giftId) -- 清楚一次过期的弹窗礼包 print("recieve gift id is ",giftId) cleanGift(human) if not human.db.gift.online[giftId] then print("not found gift ",giftId) return end local cfg = GiftExcel[giftId] --[[local content = {} for _,item in pairs(cfg.content) do content[#content + 1] = { id = item[1], cnt = item[2] } end]] BagLogic.addItemList(human,cfg.content,"gift_buy") human.db.gift.online[giftId] = nil return sendHumanGift(human) end