--[[ 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) -- ZhanbuLogic.lua 436行 传的数值为负, 不知道哪个监听该事件的地方需要数值为负,所以只处理当前模块 if parameter < 0 then return end 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