| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- --[[
- absAct[id] = {
- gift[id] = state
- }
- ]]
- local AbsActLogic = require("absAct.AbsActLogic")
- local AbsActExcel = require("excel.absAct")
- local BuyExcel = require("excel.buy")
- local Util = require("common.Util")
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local BuyLogic = require("topup.BuyLogic")
- local ObjHuman = require("core.ObjHuman")
- local Lang = require("common.Lang")
- local Broadcast = require("broadcast.Broadcast")
- local YunYingLogic = require("yunying.YunYingLogic")
- function isOpen(human, YYInfo, funcConfig)
- local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- if not state then return end
- local absAct = human.db.absAct[funcConfig.funcID]
- if absAct and absAct.dayCnt and absAct.dayCnt <= 0 and #absAct.item <= 0 then
- return false
- end
- return true, endTime, startTime
- end
- function isActive(human, YYInfo, funcConfig)
- return not isOpen(human, YYInfo, funcConfig)
- end
- local function fontSeckillNet(human,net,absAct,i,v)
- net.id = i
- net.state = 1
- if absAct.gift and absAct.gift[i] then
- net.state = absAct.gift[i]
- end
- net.price = v.price
- net.name = v.name
- BuyLogic.fontBuyItem(human, net.buyItem, v.buyID)
- local rewardLen = #v.item
- for j = 1,rewardLen do
- local itemID = v.item[j][1]
- local itemCnt = v.item[j][2]
- Grid.makeItem(net.item[j],itemID,itemCnt)
- end
- net.item[0] = rewardLen
- end
- function getAndSendMsg(human,id)
- -- 判断活动是否开启
- local state, endTime, starTime = AbsActLogic.isStarted(human, id)
- if not state then return end
- local absConfig = AbsActExcel.absActivity[id]
- if not absConfig then return end
- local absAct = human.db.absAct[id]
- if not absAct then
- return
- end
- local nowDay = Util.diffDay(starTime) + 1
- -- 构造协议
- local config = AbsActExcel.seckill
- local msgRet = Msg.gc.GC_ABS_HF_SECKILL_GIFT_QUERY
- local len = #config
- local count = 0
- msgRet.oneKeyGift[0] = 0
- for i = 1,len do
- local v = config[i]
- if v.actId == absConfig.actId and v.day == nowDay then
- -- v.cont 里面没有配置数据,代表非一键购买配置
- if not next(v.cont) then
- count = count + 1
- local net = msgRet.giftList[count]
- fontSeckillNet(human,net,absAct,i,v)
- elseif msgRet.oneKeyGift[0] == 0 then
- -- 一键购买
- local contLen = #v.cont
- local continue = false
- for s = 1,contLen do
- local index = v.cont[s]
- -- 配置中的礼包已被购买,跳出,到下一个
- if absAct.gift and absAct.gift[index] then
- continue = true
- break
- end
- end
- if not continue then
- local net = msgRet.oneKeyGift[1]
- fontSeckillNet(human,net,absAct,i,v)
- msgRet.oneKeyGift[0] = 1
- end
- end
- end
- end
- msgRet.giftList[0] = count
- Msg.send(msgRet,human.fd)
- end
- -- 礼包购买回调
- function seckillBuy(human,id,conf)
- seckillOnBuy(human,id,conf.args[1])
- end
- function seckillOnBuy(human,id,giftId)
- local state, endTime, starTime = AbsActLogic.isStarted(human, id)
- if not state then return end
- local absConfig = AbsActExcel.absActivity[id]
- if not absConfig then return end
- local absAct = human.db.absAct[id]
- if not absAct then
- return
- end
- local nowDay = Util.diffDay(starTime) + 1
- absAct.gift = absAct.gift or {}
- local config = AbsActExcel.seckill[giftId]
- if nowDay ~= config.day then
- return
- end
- -- 判断是否为一键购买
- if next(config.cont) then
- local len = #config.cont
- -- 一键购买需判断内部所有子礼包是否已被购买,若已被购买,则跳出
- for i = 1,len do
- if absAct.gift[config.cont[i]] == 2 then
- return
- end
- end
- -- 设置每个子礼包状态为已购买
- for i = 1,len do
- absAct.gift[config.cont[i]] = 2
- end
- else
- -- 判断当前礼包是否已被购买
- if absAct.gift[giftId] == 2 then
- return
- end
- -- 设置状态
- absAct.gift[giftId] = 2
- end
- BagLogic.addItemList(human, config.item, "abs_seckill")
- getAndSendMsg(human,id)
-
- YunYingLogic.sendBanner(human)
- YunYingLogic.updateIcon(YYInfo[id], human)
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
- end
- function isRed(human, YYInfo, funcConfig)
- local state,endTime,starTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- if not state then return end
- local absConfig = AbsActExcel.absActivity[funcConfig.funcID]
- local absAct = human.db.absAct[funcConfig.funcID]
- if not absAct then return end
-
- local nowDay = Util.diffDay(starTime) + 1
- absAct.gift = absAct.gift or {}
- local config = AbsActExcel.seckill
- local len = #config
- for i = 1,len do
- if config[i].actId == absConfig.actId and nowDay == config[i].day then
- if not next(config[i].cont) then
- if absAct.gift[i] ~= 2 then
- return true
- end
- end
- end
- end
- return false
- end
|