| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- --- 限时礼包
- --[[
- db.limitGiftBag = {
- actTime = {} -- 激活方式 的激活时间 [1] = time
- actNum = {} -- 激活方式 的激活次数 [1] = 10
- bagBuy = {} -- 礼包购买状态 [1] = 1 重新激活时 清除
- }
- ]]
- local Msg = require("core.Msg")
- local BagLogic = require("bag.BagLogic")
- local Grid = require("bag.Grid")
- local BuyLogic = require("topup.BuyLogic")
- local LimitGiftBagExcel = require("excel.limitBuy").limitGiftBag
- LIMITGIFTBAG_TYPE_1 = 1 -- 获得X星英雄
- LIMITGIFTBAG_TYPE_2 = 2 -- 达到X级
- LIMITGIFTBAG_TYPE_3 = 3 -- 爬塔X层
- -- 激活方式 (同种激活方式激活 一起激活 策划需求 这里定义是为了防止 策划忘记 )
- local LIMITGIFTBAG_ACT_TYPE_1 = 1 -- 获得5X英雄
- local LIMITGIFTBAG_ACT_TYPE_2 = 2 -- 获得6X英雄
- local LIMITGIFTBAG_ACT_TYPE_3 = 3 -- 达到20级
- local LIMITGIFTBAG_ACT_TYPE_4 = 4 -- 达到30级
- local LIMITGIFTBAG_ACT_TYPE_5 = 5 -- 爬塔100层
- function inintDB(human)
- if not human.db.limitGiftBag then
- human.db.limitGiftBag = {}
- human.db.limitGiftBag.actTime = {}
- human.db.limitGiftBag.actNum = {}
- human.db.limitGiftBag.bagBuy = {}
- end
- end
- local PERSON_LIMITGIFTBAG_MAX_TIME = nil -- actType 最大持续时间
- local PERSON_LIMITGIFTBAG_ID_ACTTYPE = nil -- ID 所对应的 actType
- local PERSON_LIMITGIFTBAG_ACTTPE_ID = nil -- 同激活方式的 ID
- local function updateExcel()
- if PERSON_LIMITGIFTBAG_MAX_TIME then return end
- PERSON_LIMITGIFTBAG_MAX_TIME = {}
- PERSON_LIMITGIFTBAG_ID_ACTTYPE = {}
- PERSON_LIMITGIFTBAG_ACTTPE_ID = {}
- for k, v in ipairs(LimitGiftBagExcel) do
- PERSON_LIMITGIFTBAG_ID_ACTTYPE[k] = v.actType
- PERSON_LIMITGIFTBAG_ACTTPE_ID[v.actType] = PERSON_LIMITGIFTBAG_ACTTPE_ID[v.actType] or {}
- PERSON_LIMITGIFTBAG_ACTTPE_ID[v.actType][#PERSON_LIMITGIFTBAG_ACTTPE_ID[v.actType] + 1] = k
- if not PERSON_LIMITGIFTBAG_MAX_TIME[v.actType] then
- PERSON_LIMITGIFTBAG_MAX_TIME[v.actType] = v.endTime
- elseif PERSON_LIMITGIFTBAG_MAX_TIME[v.actType] and PERSON_LIMITGIFTBAG_MAX_TIME[v.actType] < v.endTime then
- PERSON_LIMITGIFTBAG_MAX_TIME[v.actType] = v.endTime
- end
- end
- end
- -- 获取最老结束时间
- local function getMaxEndTime(actType)
- updateExcel()
- return PERSON_LIMITGIFTBAG_MAX_TIME[actType]
- end
- -- 获取该激活类型 是否已经激活
- local function getActTypeState(human, actType, now)
- now = now or os.time()
- local maxEndTime = getMaxEndTime(actType)
- if maxEndTime <= 0 then return assert(nil, "actType endTime is not find : " .. actType .. " .") end
- local lastTime = human.db.actTime[actType] or 0
- return now < lastTime + maxEndTime or false
- end
- local function getIdState(time, id, now)
- local config = LimitGiftBagExcel[id]
- local endTime = time + config.endTime
- return endTime - now > 0 and true or false
- end
- -- 清理掉上次 激活时 购买次数
- local function cleanGiftBagBuy(human, actType)
- for _, id in ipairs(PERSON_LIMITGIFTBAG_ACTTPE_ID[actType]) do
- human.db.limitGiftBag.bagBuy[id] = nil
- end
- end
- -- 获取 限时礼包是否能购买
- local function getGiftBagBuyState(human, config)
- if not human.db.limitGiftBag.bagBuy[config.id] then return true end
- if config.canBuy > 0 and human.db.limitGiftBag.bagBuy[config.id] >= config.canBuy then
- return false
- end
- return true
- end
- function fontLimitBagNet(human, msgRet, id, actTime, now)
- local config = LimitGiftBagExcel[id]
- local state = getIdState(actTime, id, os.time())
- if not state then return end
- msgRet.list[0] = msgRet.list[0] + 1
- local net = msgRet.list[msgRet.list[0]]
- net.id = id
- net.name = config.name
- net.buy = human.db.limitGiftBag.bagBuy[id] and human.db.limitGiftBag.bagBuy[id] or 0
- net.maxBuy = config.canBuy
- net.endTime = actTime + config.endTime - now
- net.endTime = net.endTime > 0 and net.endTime or 0
- BuyLogic.fontBuyItem(human,net.buyItem, config.buyID)
- for k, v in ipairs(config.item) do
- Grid.makeItem(net.reward[k], v[1], v[2])
- end
- net.reward[0] = #config.item
-
- end
- -- 查询
- function query(human)
- local msgRet = Msg.gc.GC_PRESENT_LIMITGIFT_BAG_QUERY
- if not human.db.limitGiftBag then
- msgRet.list[0] = 0
- Msg.send(msgRet, human.fd)
- end
-
- local now = os.time()
- for k, v in pairs(human.db.limitGiftBag.actTime) do
- if getActTypeState(human, k, now) then
- for _,id in ipairs(PERSON_LIMITGIFTBAG_ACTTPE_ID[k]) do
- fontLimitBagNet(human, msgRet, id, v, now)
- end
- end
- end
- Msg.send(msgRet, human.fd)
- end
- -- 激活
- local function active(human, actType)
- if true then
- return
- end
- inintDB(human)
- if not getActTypeState(human, actType, os.time()) then
- human.db.limitGiftBag.actTime[actType] = os.time()
- cleanGiftBagBuy(human, actType)
- end
- end
- -- 尝试激活
- function touchActive(human, type, cnt)
- updateExcel()
- local activeList = {}
- for k, v in ipairs(LimitGiftBagExcel) do
- if v.type == type and v.need <= cnt then
- activeList[v.actType] = 1
- end
- end
- for actType in pairs(activeList) do
- active(human, actType)
- end
- end
- -- 购买 后台触发 发送
- function buy(human, id)
- if true then
- return
- end
- local config = LimitGiftBagExcel[id]
- if not config then return end
- local state = getGiftBagBuyState(human, config)
- if not state then return end
- BagLogic.addItemList(human, config.item, "limitBag")
-
- end
|