| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- --[[
- absAct[id] = {
- drum = {
- [id] = cnt,state
- [id] = cnt,state
- }
- blasting = {
- [id] = cnt,state
- }
- box = {
- [id] = state
- }
- blastingCnt = 0
- buling = 0
- }
- ]]
- 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 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
- -- 初始化数据库
- function initDB(human,id)
- local absAct = human.db.absAct[id]
- absAct.drum = absAct.drum or {}
- absAct.blasting = absAct.blasting or {}
- absAct.box = absAct.box or {}
- absAct.blastingCnt = absAct.blastingCnt or 0
- absAct.buling = absAct.buling or 0
- end
- -- 发送数据
- function getAndSendMsg(human,id,actID)
- -- 判断活动是否开启
- 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
- initDB(human,id)
-
- local nowDay = Util.diffDay(starTime) + 1
- -- 构造数据
- local msgRet = Msg.gc.GC_ABS_ND_TASK_QUERY
- -- 鼓数据
- local taskConfig = AbsActExcel.drum
- local len = #taskConfig
- local count = 0
- msgRet.day = nowDay
- BuyLogic.fontBuyItem(human, msgRet.buyItem, AbsActExcel.blastingBox[1].buyID)
- for i = 1,len do
- local v = taskConfig[i]
- if v.day == nowDay then
- count = count + 1
- local net = msgRet.drumList[count]
- net.id = i
- net.desc = v.desc
- net.name = v.name
- net.needCnt = v.needCnt
- net.panelID = v.panelID
- net.nowCnt = absAct.drum[i] and absAct.drum[i].cnt or 0
- net.state = absAct.drum[i] and absAct.drum[i].state or 0
- for j = 1,#v.item do
- Grid.makeItem(net.item[j],v.item[j][1],v.item[j][2])
- end
- net.item[0] = #v.item
- end
- end
- msgRet.drumList[0] = count
- -- 炮数据
- taskConfig = AbsActExcel.blasting
- len = #taskConfig
- for i = 1,len do
- local v = taskConfig[i]
- local net = msgRet.blastingList[i]
- net.id = i
- net.desc = v.desc
- net.name = v.name
- net.needCnt = v.needCnt
- net.nowCnt = absAct.blasting[i] and absAct.blasting[i].cnt or 0
- net.state = absAct.blasting[i] and absAct.blasting[i].state or 0
- for j = 1,#v.item[nowDay] do
- Grid.makeItem(net.item[j],v.item[nowDay][j][1],v.item[nowDay][j][2])
- end
- net.item[0] = #v.item[nowDay]
- net.panelID = v.panelID or 0
- end
- msgRet.blastingList[0] = len
- -- 宝箱数据
- taskConfig = AbsActExcel.blastingBox
- len = #taskConfig
- for i = 1,len do
- local v = taskConfig[i]
- local net = msgRet.boxList[i]
- net.id = i
- net.needCnt = v.needCnt
- net.state = absAct.box[i] or 0
- for j = 1,#v.item do
- Grid.makeItem(net.item[j],v.item[j][1],v.item[j][2])
- end
- net.item[0] = #v.item
- end
- msgRet.boxList[0] = len
- msgRet.blastingCnt = absAct.blastingCnt
- Msg.send(msgRet,human.fd)
- end
- -- 领取物品
- -- type 1鼓,2炮,3箱
- function get(human,index,type,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
- initDB(human,id)
- local nowDay = Util.diffDay(starTime) + 1
- local item = nil
- -- 选择对应类型
- local config = nil
- local state = nil
- if type == 1 then
- config = AbsActExcel.drum[index]
- state = absAct.drum[index] and absAct.drum[index].state or 0
- elseif type == 2 then
- config = AbsActExcel.blasting[index]
- state = absAct.blasting[index] and absAct.blasting[index].state or 0
- elseif type == 3 then
- config = AbsActExcel.blastingBox[index]
- state = absAct.box[index] or 0
- end
- -- 传入参数错误
- if not config then
- return
- end
- -- 状态不为可领取
- if state ~= 1 then
- return
- end
- -- 改变状态
- if type == 1 then
- item = config.item
- absAct.drum[index].state = 2
- elseif type == 2 then
- item = config.item[nowDay]
- absAct.blasting[index].state = 2
- -- 放炮一次,增加累计次数,并判断是否达到宝箱领取数值
- absAct.blastingCnt = absAct.blastingCnt + 1
- for i = 1,#AbsActExcel.blastingBox do
- if absAct.blastingCnt - 1 < AbsActExcel.blastingBox[i].needCnt and absAct.blastingCnt == AbsActExcel.blastingBox[i].needCnt then
- absAct.box[i] = 1
- break
- end
- end
- elseif type == 3 then
- item = config.item
- absAct.box[index] = 2
- else
- return
- end
- BagLogic.addItemList(human, item, "abs_drumblasting")
- getAndSendMsg(human,id,actID)
-
- YunYingLogic.sendBanner(human)
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
- end
- -- 每日任务活跃度
- function onDailyTask(human,funcID, parameter)
- drumTaskCallBack(human,funcID,1,parameter)
- end
- -- 召唤
- function onDrawCard(human,funcID, parameter)
- drumTaskCallBack(human,funcID,2,parameter)
- end
- -- 恶魔之塔
- function onHuangjingTower(human,funcID, parameter)
- drumTaskCallBack(human,funcID,3,parameter)
- end
- -- 充值
- function onCharge(human, parameter,funcID)
- drumTaskCallBack(human,funcID,4,parameter)
- end
- -- 勇者试炼
- function onDrill(human,funcID, parameter)
- drumTaskCallBack(human,funcID,5,parameter)
- end
- -- 女巫森林
- function onCopyChallenge(human,funcID, parameter)
- drumTaskCallBack(human,funcID,6,parameter)
- end
- -- 冠军联赛
- function onJjcFight(human,funcID, parameter)
- drumTaskCallBack(human,funcID,7,parameter)
- end
- -- 随机商店购买
- function onShopBuy(human,funcID,parameter)
- drumTaskCallBack(human,funcID,8,parameter)
- end
- -- 冒险扫荡
- function onMopup(human,funcID,parameter)
- drumTaskCallBack(human,funcID,9,parameter)
- end
- -- 冰龙巢穴
- function onBinglong(human,funcID,parameter)
- drumTaskCallBack(human,funcID,10,parameter)
- end
- -- 点金
- function onExchangeJinbi(human,funcID,parameter)
- drumTaskCallBack(human,funcID,11,parameter)
- end
- -- 悬赏
- function onBarTaskgetDo(human,funcID,parameter)
- drumTaskCallBack(human,funcID,12,parameter)
- end
- -- 捐赠
- function onUnionDonate(human,funcID,parameter)
- drumTaskCallBack(human,funcID,13,parameter)
- end
- -- 公会副本
- function onUnionEctypeFight(human,funcID,parameter)
- drumTaskCallBack(human,funcID,14,parameter)
- end
- -- 占卜
- function onZhanBuBuyCard(human,funcID,parameter)
- drumTaskCallBack(human,funcID,15,parameter)
- end
- -- 消耗钻石
- function onDecZuanshi(human,funcID,parameter)
- drumTaskCallBack(human,funcID,16,parameter)
- end
- -- 绝望深渊
- function onLianyu(human,funcID,parameter)
- drumTaskCallBack(human,funcID,17,parameter)
- end
- -- 合成符文
- function onFuwenHecheng(human,funcID,parameter)
- drumTaskCallBack(human,funcID,18,parameter)
- end
- -- 回调
- function drumTaskCallBack(human,id,type,cnt)
- AbsActLogic.checkAbsActClean(human, id)
- initDB(human,id)
- local state, endTime, starTime = AbsActLogic.isStarted(human, id)
-
- local absConfig = AbsActExcel.absActivity[id]
- if not absConfig then return end
- local nowDay = Util.diffDay(starTime) + 1
- -- 完成任务,增加任务次数
- local taskConfig = AbsActExcel.drum
- for k = 1,#taskConfig do
- if taskConfig[k].type == type and taskConfig[k].day == nowDay then
- local taskID = k
- human.db.absAct[id].drum[taskID] = human.db.absAct[id].drum[taskID] or {}
- human.db.absAct[id].drum[taskID].cnt = human.db.absAct[id].drum[taskID].cnt or 0
- human.db.absAct[id].drum[taskID].state = human.db.absAct[id].drum[taskID].state or 0
- human.db.absAct[id].drum[taskID].cnt = human.db.absAct[id].drum[taskID].cnt + cnt
- if human.db.absAct[id].drum[taskID].state ~= 0 and cnt < 0 then
- human.db.absAct[id].drum[taskID].cnt = human.db.absAct[id].drum[taskID].cnt - cnt
- end
- local config = AbsActExcel.drum[taskID]
- -- 鼓任务达成
- if human.db.absAct[id].drum[taskID].cnt >= config.needCnt and human.db.absAct[id].drum[taskID].state == 0 then
- human.db.absAct[id].drum[taskID].state = 1
- -- 判断是否达成炮任务
- for i = 1,#config.blasting do
- local blastingID = config.blasting[i]
- local blastingConfig = AbsActExcel.blasting[blastingID]
- human.db.absAct[id].blasting[blastingID] = human.db.absAct[id].blasting[blastingID] or {}
- human.db.absAct[id].blasting[blastingID].cnt = human.db.absAct[id].blasting[blastingID].cnt or 0
- human.db.absAct[id].blasting[blastingID].state = human.db.absAct[id].blasting[blastingID].state or 0
- human.db.absAct[id].blasting[blastingID].cnt = human.db.absAct[id].blasting[blastingID].cnt + 1
- if human.db.absAct[id].blasting[blastingID].cnt >= 3 and human.db.absAct[id].blasting[blastingID].state ~= 2 then
- human.db.absAct[id].blasting[blastingID].state = 1
- end
- end
- end
- end
- end
-
- YunYingLogic.sendBanner(human)
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
- end
- -- 每日重置鼓,炮状态
- function updateDaily(human,id)
- local state, endTime, starTime = AbsActLogic.isStarted(human, id)
- if not state then return end
- local config = AbsActExcel.absActivity[id]
- if not config then return end
- AbsActLogic.checkAbsActClean(human, id)
- local absAct = human.db.absAct[id]
- absAct.drum = {}
- absAct.blasting = {}
- absAct.box = absAct.box or {}
- absAct.blastingCnt = absAct.blastingCnt or 0
- end
- function isRed(human, YYInfo, funcConfig)
- local state = 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 true end
- initDB(human,funcConfig.funcID)
- for k,v in pairs(absAct.drum) do
- if v.state == 1 then
- return true
- end
- end
- for k,v in pairs(absAct.blasting) do
- if v.state == 1 then
- return true
- end
- end
- for k,v in pairs(absAct.box) do
- if v == 1 then
- return true
- end
- end
- return false
- end
- -- 购买补领
- function buling(human,funcID,conf)
- -- 将达标次数设为30次
- AbsActLogic.checkAbsActClean(human, funcID)
- initDB(human,funcID)
- local absConfig = AbsActExcel.absActivity[funcID]
- --
- local absAct = human.db.absAct[funcID]
-
- if absAct.buling == 1 then
- return
- end
- absAct.buling = 1
- local config = AbsActExcel.blastingBox
- local len = #config
- for i = 1,len do
- if config[i].needCnt > absAct.blastingCnt then
- absAct.blastingCnt = config[i].needCnt
- absAct.box[i] = 1
- end
- end
- getAndSendMsg(human,id,absConfig.actID)
- end
|