| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- --[[
- 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
- local itemLen = type(v.item[nowDay]) == "table" and #v.item[nowDay] or 0
- for j = 1,itemLen do
- Grid.makeItem(net.item[j],v.item[nowDay][j][1],v.item[nowDay][j][2])
- end
- net.item[0] = itemLen --#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)
-
- local state, endTime, starTime = AbsActLogic.isStarted(human, id)
- -- 活動未開啓
- if not state or os.time() > endTime then
- return
- end
-
- local absConfig = AbsActExcel.absActivity[id]
- if not absConfig then return end
- local absActData = human.db.absAct[id]
- if not absActData then
- return
- end
- initDB(human,id)
- 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] or {}
- absAct.drum = {}
- absAct.blasting = {}
- absAct.box = absAct.box or {}
- absAct.blastingCnt = absAct.blastingCnt or 0
- human.db.absAct[id] = absAct
- end
- -- 因为玩家在活动未开启前完成了活跃度任务,活动开启后没法完成活跃度任务,所以在玩家上线时,做一次更新活跃度数据操作
- function specialFunc(human, id)
- AbsActLogic.checkAbsActClean(human, id)
- local state, endTime, starTime = AbsActLogic.isStarted(human, id)
- -- 活動未開啓
- if not state or os.time() > endTime then
- return
- end
-
- local absConfig = AbsActExcel.absActivity[id]
- if not absConfig then return end
- local absActData = human.db.absAct[id]
- if not absActData then
- return
- end
- initDB(human,id)
- local nowHuoYue = human.db.dailyTask and human.db.dailyTask.nowHuoYue or 0
- if nowHuoYue > 0 then
- local nowDay = Util.diffDay(starTime) + 1
- local actType = 1
- -- ������������������
- local singleData
- local isChange = false
- local taskConfig = AbsActExcel.drum
- for k = 1,#taskConfig do
- if taskConfig[k].type == actType and taskConfig[k].day == nowDay then
- local taskID = k
- human.db.absAct[id].drum[taskID] = human.db.absAct[id].drum[taskID] or {}
- singleData = human.db.absAct[id].drum[taskID]
- singleData.cnt = singleData.cnt or 0
- singleData.state = singleData.state or 0
- if singleData.cnt > 0 then
- break
- end
- singleData.cnt = nowHuoYue
- isChange = true
- -- 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 singleData.cnt >= config.needCnt and singleData.state == 0 then
- singleData.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
-
- if isChange then
- YunYingLogic.sendBanner(human)
- YunYingLogic.sendGroupUpdate(YYInfo[id], human, absConfig.panelID)
- end
- end
- end
- function onLogin(human, id)
- specialFunc(human, id)
- 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
|