| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- -- 掉落兑换 活动
- local AbsActLogic = require("absAct.AbsActLogic")
- local AbsActExcel = require("excel.absAct")
- local Lang = require("common.Lang")
- local Util = require("common.Util")
- 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 BattleLogic = require("battle.BattleLogic")
- local EquipLogic = require("equip.EquipLogic")
- local PremiumGiftLogic = require("absAct.PremiumGiftLogic")
- function query(human, id , isHandler)
- local config = AbsActExcel.absActivity[id]
- if not config then return end
- local actId = config.actId
- local msgRet = Msg.gc.GC_ABS_ACT_DROP_QUERY
- local dropId = 0
-
- for k, v in pairs(AbsActExcel.drop) do
- if v and v.actID == actId then
- dropId = v.dropItem[1]
- break
- end
- end
- Grid.makeItem(msgRet.drop, dropId, getJifen(human, id))
- Msg.send(msgRet, human.fd)
- -- 客户端主动请求的时候 另外俩个活动也发送给客户端 因为客户端要做一个 极流畅的 特效切换 不能等主动请求返回
- if isHandler then
- shopQuery(human)
- for k, v in pairs(AbsActExcel.absActivity) do
- if v and v.absType == config.absType and
- v.type == AbsActDefine.ABS_ACT_TYPE_1 and
- AbsActLogic.isStarted(human, k) then
- AbsActLogic.checkAbsActClean(human, k)
- PremiumGiftLogic.getAndSendMsg(human, k, v.actId)
- break
- end
- end
- end
- end
- function addJifen(human, value)
- if not value or value <= 0 then return end
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absAct = human.db.absAct[id]
- absAct.jifen = absAct.jifen or 0
- absAct.jifen = absAct.jifen + value
- query(human, id)
- end
- function delJifen(human, value)
- if not value or value <= 0 then return end
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absAct = human.db.absAct[id]
- absAct.jifen = absAct.jifen or 0
- absAct.jifen = absAct.jifen - value
- absAct.jifen = absAct.jifen > 0 and absAct.jifen or 0
- query(human, id)
- end
- function getJifen(human, id)
- local absAct = human.db.absAct[id]
- return absAct and absAct.jifen or 0
- end
- function shopQuery(human)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absActConfig = AbsActExcel.absActivity[id]
- if not absActConfig then return end
- local actId = absActConfig.actId
- local absAct = human.db.absAct[id]
- local msgRet = Msg.gc.GC_ABS_ACT_DROP_SHOP_QUERY
- msgRet.templateId = absActConfig.adIcon
- local len = 0
- local needItemID = 0
- for k, config in pairs(AbsActExcel.dropShop) do
- if config and config.actID == actId then
- needItemID = config.needItem
- len = len + 1
- local net = msgRet.list[len]
- net.id = k
- net.need = config.need
- net.buyCnt = absAct.buyCnt and absAct.buyCnt[k] or 0
- net.maxBuy = config.limit
- Grid.makeItem(net.item, config.item[1], config.item[2])
- end
- end
- msgRet.list[0] = len
- Grid.makeItem(msgRet.need, needItemID, 1)
- Msg.send(msgRet, human.fd)
- end
- function shopBuy(human, shopID, buyCnt)
- if buyCnt <= 0 then return end
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
- local absAct = human.db.absAct[id]
- local config = AbsActExcel.dropShop[shopID]
- if not config then return end
- if config.actID ~= actId then return end
- local oldBuy = absAct.buyCnt and absAct.buyCnt[shopID] or 0
- if config.limit > 0 and oldBuy + buyCnt > config.limit then return end
- if getJifen(human, id) < config.need * buyCnt then
- Broadcast.sendErr(human, Util.format(Lang.COMMON_NO_ITEM, ItemDefine.getValue(config.needItem, "name")))
- return
- end
- delJifen(human, config.need * buyCnt)
- absAct.buyCnt = absAct.buyCnt or {}
- absAct.buyCnt[shopID] = absAct.buyCnt[shopID] or 0
- absAct.buyCnt[shopID] = absAct.buyCnt[shopID] + buyCnt
- BagLogic.addItem(human, config.item[1], config.item[2] * buyCnt,"abs_dropShop")
- local msgRet = Msg.gc.GC_ABS_ACT_DROP_SHOP_BUY
- msgRet.id = shopID
- if not ItemDefine.isEquip(config.item[1]) then
- Grid.makeItem(msgRet.item , config.item[1], config.item[2] * buyCnt)
- else
- EquipLogic.makeEquipItemOne(human, msgRet.item)
- end
-
- Msg.send(msgRet, human.fd)
- -- shopQuery(human)
- end
- function giftQuery(human)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
- local msgRet = Msg.gc.GC_ABS_ACT_DROP_GIFT_QUERY
- local len = 0
- for k, config in pairs(AbsActExcel.premiumGift) do
- if config and config.actId == actId then
- len = len + 1
- local net = msgRet.list[len]
- net.id = k
- net.cnt = human.db.absAct[id].premiumCnt and human.db.absAct[id].premiumCnt[k] or 0
- net.maxCnt = config.cnt
- for j = 1, #config.reward do
- Grid.makeItem(net.item[j], config.reward[j][1], config.reward[j][2])
- end
- net.item[0] = #config.reward
- BuyLogic.fontBuyItem(human,net.buyMsg, config.buyID)
-
- end
- end
- msgRet.list[0] = len
- Msg.send(msgRet, human.fd)
- end
- function drawSSR(human, net, cnt)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
- for k, config in pairs(AbsActExcel.drop) do
- if config and config.actID == actId then
- BagLogic.addItem(human, config.ssrDrop[1], config.ssrDrop[2] * cnt, "abs_dropSSR")
- net[config.ssrDrop[1]] = net[config.ssrDrop[1]] or 0
- net[config.ssrDrop[1]] = net[config.ssrDrop[1]] + config.ssrDrop[2] * cnt
- break
- end
- end
- end
- function getDropItem(human,outSec, time ,net)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
- local now = os.time()
- local thisStart = now - outSec
- for i, config in pairs(AbsActExcel.drop) do
- if config and config.actID == actId then
- local absAct = human.db.absAct[id]
- local outCnt = 0
- local thisSec = outSec
- if absAct.dropTime then
- thisSec = now - absAct.dropTime
- local maxHang = BattleLogic.getHangMaxTime(human)
- thisSec = thisSec < maxHang and thisSec or maxHang
- elseif thisStart < starTime then
- thisSec = outSec - (starTime - thisStart)
- end
-
- if thisSec > 0 then
- outCnt = math.floor(thisSec/config.dropTime)
- end
- if outCnt > 0 then
- for j = 1, outCnt do
- local itemID = config.dropItem[1]
- local itemCnt = config.dropItem[2]
- net.items = net.items or {}
- net.items[itemID] = net.items[itemID] or 0
- net.items[itemID] = net.items[itemID] + itemCnt
- absAct.dropTime = os.time()
- end
- end
- end
- end
- end
- function getDropItemSaoQuery(human, net, dropCnt)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return dropCnt end
- AbsActLogic.checkAbsActClean(human, id)
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
-
- for i, config in pairs(AbsActExcel.drop) do
- if config and config.actID == actId then
- local itemID = config.dropItem[1]
- local itemCnt = config.dropItem[2]
- dropCnt = dropCnt + 1
- Grid.makeItem(net.item[dropCnt], itemID, 1)
- break
- end
- end
- return dropCnt
- end
- function getDropItemSao(human,time ,itemTable)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
- for i, config in pairs(AbsActExcel.drop) do
- if config and config.actID == actId then
- local outCnt = math.floor(time/config.dropTime)
- if outCnt > 0 then
- for j = 1, outCnt do
- local itemID = config.dropItem[1]
- local itemCnt = config.dropItem[2]
-
- itemTable[itemID] = itemTable[itemID] or 0
- itemTable[itemID] = itemTable[itemID] + itemCnt
- end
- end
- end
- end
- end
- function getAbsCanDrop(human)
- local state,id,endTime, starTime = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_6)
- if not state then return end
- local list
- local have = {}
- local absActConfig = AbsActExcel.absActivity[id]
- local actId = absActConfig.actId
- for i, config in pairs(AbsActExcel.drop) do
- if config and config.actID == actId then
- list = list or {}
- list[config.dropItem[1]] = config.dropItem[2]
- break
- end
- end
- return list
- end
- function isRed(human, YYInfo, funcConfig)
- -- if funcConfig.adIcon == 1 then return end
- -- local state,endTime, starTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- -- if not state then return end
- -- return true
- 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
|