| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- local AbsActExcel = require("excel.absAct")
- 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 Log = require("common.Log")
- local YunYingLogic = require("yunying.YunYingLogic")
- --
- ABS_PREMIUM_GIFT_LIST_ACTID = { }
- ABS_PREMIUM_GIFT_LIST_BUYID = { }
- function initAfterHot()
- ABS_PREMIUM_GIFT_LIST_ACTID = {}
- for k, v in pairs(AbsActExcel.premiumGift) do
- ABS_PREMIUM_GIFT_LIST_ACTID[v.actId] = ABS_PREMIUM_GIFT_LIST_ACTID[v.actId] or { }
- ABS_PREMIUM_GIFT_LIST_ACTID[v.actId][#ABS_PREMIUM_GIFT_LIST_ACTID[v.actId] + 1] = k
- if v.buyID ~= 0 then
- ABS_PREMIUM_GIFT_LIST_BUYID[v.buyID] = k
- end
- end
- end
- --
- function isActive(human, YYInfo, funcConfig)
- return not isOpen(human, YYInfo, funcConfig)
- end
- --
- function isOpen(human, YYInfo, funcConfig)
- return AbsActLogic.isStarted(human, funcConfig.funcID)
- end
- --
- function isRed(human, YYInfo, funcConfig)
- local ret, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- if ret == true then
- local id = funcConfig.funcID
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absAct = human.db.absAct[id]
- for k, giftId in pairs(ABS_PREMIUM_GIFT_LIST_ACTID[absActConfig.actId]) do
- local v = AbsActExcel.premiumGift[giftId]
- if v then
- if not absAct.premiumCnt or not absAct.premiumCnt[giftId] then
- return true
- end
- end
- end
- return false
- end
- return false
- end
- --
- function getLeftTime(human, YInfo, funcConfig)
- local ret, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- if ret == true then
- return endTime - os.time()
- else
- return 0
- end
- end
- function premiumGift(human, id, buyConf, isFirst, cnt)
- local state = AbsActLogic.isStarted(human, id)
- local absConfig = AbsActExcel.absActivity[id]
- if absConfig == nil or not state then return end
- -- 存在多个特惠礼包 同时 开放
- local premiumID = ABS_PREMIUM_GIFT_LIST_BUYID[buyConf.id]
- if not premiumID then return end
- local config = AbsActExcel.premiumGift[premiumID]
- if not config then return end
- if config.actId ~= absConfig.actId then return end
- AbsActLogic.checkAbsActClean(human, id)
- human.db.absAct[id].premiumCnt = human.db.absAct[id].premiumCnt or { }
- local nowBuyCnt = human.db.absAct[id].premiumCnt[premiumID] or 0
- -- 判断是否达到购买上限
- if nowBuyCnt >= config.cnt then
- Broadcast.sendErr(human, Lang.HERO_BAG_BUY_CAP_NO_CNT)
- 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.absAct[id].premiumCnt[premiumID] = nowBuyCnt + 1
- -- 发放物品
- -- local items = { }
- BagLogic.addItemList(human, AbsActExcel.premiumGift[premiumID].reward, "premium_reward")
- Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
- AbsActLogic.actDetailQuery(human, id)
- end
- function getAndSendMsg(human, id, actId)
- local now = os.time()
- local startedFlag, endTime, startTime = AbsActLogic.isStarted(human, id)
- if not startedFlag then return end
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local absAct = human.db.absAct[id]
- if not absAct then return end
- local msgRet = Msg.gc.GC_ABS_ACT_PREMIUM_GIFT_QUERY
- msgRet.templateId = absActConfig.panelID
- msgRet.ad = absActConfig.adIcon
- msgRet.absActId = id
- msgRet.status = absAct.status or 0
- local index = 0
- for k, giftId in pairs(ABS_PREMIUM_GIFT_LIST_ACTID[absActConfig.actId]) do
- local v = AbsActExcel.premiumGift[giftId]
- if v then
- index = index + 1
- Log.write(Log.LOGID_TEST, "getAndSendMsg index="..index.." actId="..absActConfig.actId.." id="..id.." giftId="..giftId)
- for j = 1, #v.reward do
- Grid.makeItem(msgRet.premiumGiftMsg[index].item[j], v.reward[j][1], v.reward[j][2])
- end
- msgRet.premiumGiftMsg[index].item[0] = #v.reward
- msgRet.premiumGiftMsg[index].cnt = absAct.premiumCnt and absAct.premiumCnt[giftId] or 0
- msgRet.premiumGiftMsg[index].id = giftId
- msgRet.premiumGiftMsg[index].maxCnt = v.cnt
- msgRet.premiumGiftMsg[index].icon = v.icon or 0
- msgRet.premiumGiftMsg[index].name = v.name or ""
- local buyID = v.buyID
- msgRet.premiumGiftMsg[index].buyMsg[0] = 0
- msgRet.premiumGiftMsg[index].needItem[0] = 0
- if v.buyID == 0 then
- local len = 0
- for _, item in ipairs(v.needItem) do
- len = len + 1
- Grid.makeItem(msgRet.premiumGiftMsg[index].needItem[len], item[1], item[2])
- end
- msgRet.premiumGiftMsg[index].needItem[0] = len
- else
- BuyLogic.fontBuyItem(human, msgRet.premiumGiftMsg[index].buyMsg[1], buyID)
- msgRet.premiumGiftMsg[index].buyMsg[0] = 1
- end
- end
- end
- msgRet.premiumGiftMsg[0] = index
- msgRet.startTime = startTime
- msgRet.endTime = endTime
- Msg.send(msgRet, human.fd)
- end
- function giftBuy(human, id, premiumID)
- local state = AbsActLogic.isStarted(human, id)
- if state ~= true then return Broadcast.sendErr(human, Lang.ACT_WAS_OVER) end
- local absConfig = AbsActExcel.absActivity[id]
- if not absConfig then return end
- AbsActLogic.checkAbsActClean(human, id)
- -- 存在多个特惠礼包 同时 开放
- local config = AbsActExcel.premiumGift[premiumID]
- if config.buyID ~= 0 then return end
- -- 初始化已购买次数
- human.db.absAct[id].premiumCnt = human.db.absAct[id].premiumCnt or { }
- local nowBuyCnt = human.db.absAct[id].premiumCnt[premiumID] or 0
- -- 判断是否达到购买上限
- if nowBuyCnt >= config.cnt then
- Broadcast.sendErr(human, Lang.HERO_BAG_BUY_CAP_NO_CNT)
- return
- end
- for _, item in ipairs(config.needItem) do
- local itemID = item[1]
- local itemCnt = item[2]
- if not BagLogic.checkItemCnt(human, itemID, itemCnt) then
- Broadcast.sendErr(human, Lang.COMMON_NO_ZUANSHI)
- return
- end
- 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
- for _, item in ipairs(config.needItem) do
- local itemID = item[1]
- local itemCnt = item[2]
- BagLogic.delItem(human, itemID, itemCnt, "premium_reward")
- end
- -- 增加已购买次数
- human.db.absAct[id].premiumCnt[premiumID] = nowBuyCnt + 1
- -- 发放物品
- -- local items = { }
- BagLogic.addItemList(human, AbsActExcel.premiumGift[premiumID].reward, "premium_reward")
- Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
- AbsActLogic.actDetailQuery(human, id)
- end
|