| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538 |
- --新商业化活动——超值豪礼
- --db
- --[=[
- human.db.absAct[id] = {
- recordData = {
- [1] = { --key为任务ID
- [1] = 10, --key为触发事件Id, value为进度
- [0] = 1, --key为需要充值的ID, value为充值次数。key为0时, 表示免费
- isGet = nil, --有值时表示已领取
- },
- }
- }
- ]=]--
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local AbsActLogic = require("absAct.AbsActLogic")
- local Broadcast = require("broadcast.Broadcast")
- local Lang = require("common.Lang")
- local YunYingLogic = require("yunying.YunYingLogic")
- local AbsActExcel = require("excel.absAct")
- local BuyLogic = require("topup.BuyLogic")
- local CommonDefine = require("common.CommonDefine")
- local ItemDefine = require("bag.ItemDefine")
- local CycleActivityLogic = require("yunying.CycleActivity")
- --本活动ID
- local ACTID = 753
- --日志标识
- local LOGTAG = "AbsExcellentGiftLogic"
- --完成任务消耗道具ID
- local FINISH_TASK_COST_ID = ItemDefine.ITEM_ZUANSHI_ID
- --完成任务消耗道具数量
- local FINISH_TASK_COST_CNT = 500
- local BATTLE_MOP_UP = 1 --冒险闯关扫荡
- local LOSTTEMPLE_PASS = 2 --失落神庙通关
- local YJTREASURE_PASS_LEVEL = 3 --遗迹探险层数
- local FRIEND_COMBAT = 4 --好友切磋次数
- local CHAT_TIMES = 5 --所有聊天频道发言次数
- local MOZHU_CHALLENGE = 6 --魔王梼杌参数次数
- local DRAWCALL_SERNIOR_CNT = 7 --高级召唤次数
- local FUWEN_RECASTING = 8 --符文重铸次数
- local UNION_DONATE = 9 --公会捐献次数
- local ZHANBU_SYNTHESIS = 10 --占卜合成次数
- ---------------------------------各类事件处理接口----------------------------------
- function onMopup(human, funcID, value)
- TriggerCbFunc(human, BATTLE_MOP_UP, value, true)
- end
- function friendCombat(human, funcID, value)
- TriggerCbFunc(human, FRIEND_COMBAT, value, true)
- end
- function lostTempleCombat(human, funcID, value)
- TriggerCbFunc(human, LOSTTEMPLE_PASS, value, true)
- end
- function YJTreasurePass(human, funcID, value)
- TriggerCbFunc(human, YJTREASURE_PASS_LEVEL, value, true)
- end
- function ChatTimes(human, funcID, value)
- TriggerCbFunc(human, CHAT_TIMES, value, true)
- end
- function MoZhuCombat(human, funcID, value)
- TriggerCbFunc(human, MOZHU_CHALLENGE, value, true)
- end
- function onDrawCard(human, funcID, value)
- TriggerCbFunc(human, DRAWCALL_SERNIOR_CNT, value, true)
- end
- function onFuwenChongZhu(human, funcID, value)
- TriggerCbFunc(human, FUWEN_RECASTING, value, true)
- end
- function onUnionDonate(human, funcID, value)
- TriggerCbFunc(human, UNION_DONATE, value, true)
- end
- function ZhanBuHecheng(human, funcID, value)
- TriggerCbFunc(human, ZHANBU_SYNTHESIS, value, true)
- end
- -----------------------------------------------------------------------------------
- -- --订阅触发事件
- -- local function registerTrigger(human)
- -- local len = 0
- -- local triggerTagVec = {}
- -- local config = AbsActExcel.AbsExcellentGiftLogic
- -- for _, v in ipairs(config) do
- -- len = len + 1
- -- triggerTagVec[len] = v.taskId
- -- end
- -- TriggerLogic.RegisterMoniter(triggerTagVec, TriggerCbFunc, human.db.newUniqueTag)
- -- end
- --获取任务ID
- local function getTaskIdVec(triggerId, buyId)
- local ids = {}
- local len = 0
- local config = AbsActExcel.AbsExcellentGiftLogic
- for id, cfg in ipairs(config) do
- if triggerId and cfg.taskId == triggerId then
- len = len + 1
- ids[len] = id
- end
- if buyId and cfg.buyId == buyId then
- len = len + 1
- ids[len] = id
- end
- end
- return ids
- end
- --是否完成任务, 0-未完成, 1-可领取,2-已领取
- local function getTaskState(taskId, taskData)
- if not taskData then
- return CommonDefine.COMMON_PRIZE_STATE_NOGET
- end
- if taskData.isGet then
- return CommonDefine.COMMON_PRIZE_STATE_GET
- end
- local config = AbsActExcel.AbsExcellentGiftLogic
- local singleCfg = config[taskId]
- local triggerId = singleCfg.taskId
- local triggerVal = singleCfg.taskVal
- local isFinish = true
- if not taskData[triggerId] or taskData[triggerId] < triggerVal then
- isFinish = false
- end
- if not isFinish then
- return CommonDefine.COMMON_PRIZE_STATE_NOGET
- end
- local condBuyId = singleCfg.buyId
- if condBuyId ~= 0 and not taskData[condBuyId] then
- return CommonDefine.COMMON_PRIZE_STATE_NOGET
- end
- if isFinish and not taskData.isGet then
- return CommonDefine.COMMON_PRIZE_STATE_CANGET
- end
- end
- --红点检查
- local function redDotCheck(recordData)
- local redDotPageTb = {}
- local taskState = 0
- local config = AbsActExcel.AbsExcellentGiftLogic
- for taskId, data in pairs(recordData) do
- taskState = getTaskState(taskId, data)
- if taskState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- local taskCfg = config[taskId]
- redDotPageTb[taskCfg.page] = '1'
- end
- end
- if not next(redDotPageTb) then
- return false
- end
- return redDotPageTb
- end
- -- function onLogin(human, id)
- -- local state = AbsActLogic.isStarted(human, id)
- -- if not state then
- -- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- -- end
- -- local actData = human.db.absAct[id]
- -- if not actData then
- -- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- -- end
- -- --registerTrigger(human)
- -- end
- --充值处理接口
- function onCharge(human, price, funcID, buyID)
- -- local state = AbsActLogic.isStarted(human, funcID)
- local state = CycleActivityLogic.isStarted(human, funcID)
- if not state then
- return
- end
- local isChange = false
- local taskState = COMMON_PRIZE_STATE_NOGET
- local actData = human.db.absAct[ACTID]
- actData.recordData = actData.recordData or {}
- local recordData = actData.recordData
- local ids = getTaskIdVec(nil, buyID)
- local config = AbsActExcel.AbsExcellentGiftLogic
- for _, id in ipairs(ids) do
- if not recordData[id] or not recordData[id].isGet then
- local singleCfg = config[id]
- local needBuyId = singleCfg.buyId
- recordData[id] = recordData[id] or {}
- recordData[id][needBuyId] = (recordData[id][needBuyId] or 0) + 1
- isChange = true
- if taskState ~= CommonDefine.COMMON_PRIZE_STATE_CANGET then
- taskState = getTaskState(id, recordData[id])
- end
- end
- end
- if isChange then
- Query(human, ACTID, human.nowPage or 0)
- end
- if taskState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- --红点刷新
- YunYingLogic.sendBanner(human)
- local config = AbsActExcel.absActivity[ACTID]
- YunYingLogic.sendGroupUpdate(YYInfo[ACTID], human, config.panelID)
- end
- end
- --事件触发接口
- function TriggerCbFunc(human, triggerTag, val, isAdd)
- -- local state = AbsActLogic.isStarted(human, ACTID)
- local state = CycleActivityLogic.isStarted(human, ACTID)
- if not state then
- return
- end
- --local isChange = false
- local taskState = COMMON_PRIZE_STATE_NOGET
- local actData = human.db.absAct[ACTID]
- actData.recordData = actData.recordData or {}
- local recordData = actData.recordData
- local ids = getTaskIdVec(triggerTag)
- for _, id in ipairs(ids) do
- if not recordData[id] or not recordData[id].isGet then
- recordData[id] = recordData[id] or {}
- if isAdd then
- recordData[id][triggerTag] = (recordData[id][triggerTag] or 0) + val
- else
- recordData[id][triggerTag] = val
- end
- --isChange = true
- if taskState ~= CommonDefine.COMMON_PRIZE_STATE_CANGET then
- taskState = getTaskState(id, recordData[id])
- end
- end
- end
- -- if isChange then
- -- Query(human, ACTID, nowPage)
- -- end
- if taskState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- --红点刷新
- YunYingLogic.sendBanner(human)
- local config = AbsActExcel.absActivity[ACTID]
- YunYingLogic.sendGroupUpdate(YYInfo[ACTID], human, config.panelID)
- end
- end
- --红点判断
- function isRed(human, YYInfo, funcConfig)
- local actData = human.db.absAct[funcConfig.funcID]
- if not actData then
- return false
- end
- local recordData = actData.recordData
- if not recordData then
- return false
- end
- if not redDotCheck(recordData) then
- return false
- end
- return true
- end
- function isOpen(human, YYInfo, funcConfig)
- -- local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig.funcID)
- local state, endTime, startTime = CycleActivityLogic.isStarted(human, funcConfig.funcID)
- return state, endTime, startTime
- end
- function isActive(human, YYInfo, funcConfig)
- local state = isOpen(human, YYInfo, funcConfig)
- return not state
- end
- --查询
- function Query(human, id, page)
- -- local state = AbsActLogic.isStarted(human, id)
- local state = CycleActivityLogic.isStarted(human, id)
- if not state then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local actData = human.db.absAct[id]
- if not actData then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- actData.recordData = actData.recordData or {}
- local recordData = actData.recordData
- local config = AbsActExcel.AbsExcellentGiftLogic
- local msgRet = Msg.gc.GC_EXCELLENTGIFT_QUERY
- local len = 0
- local taskList = msgRet.taskList
- for taskId, v in ipairs(config) do
- if v.page == page then
- len = len + 1
- local taskData = recordData[taskId]
- taskList[len].state = getTaskState(taskId, taskData)
- taskList[len].idx = len
- taskList[len].taskDesc = v.taskDes
-
- taskList[len].taskMaxProgress = v.taskVal
- taskList[len].taskNowProgress = taskData and taskData[v.taskId] or 0
-
- BuyLogic.fontBuyItem(human, taskList[len].buyMsg, v.buyId)
- taskList[len].buyState = taskData and taskData[v.buyId] or 0
- if v.buyId == 0 then
- taskList[len].buyState = 1
- end
-
- local awardVec = taskList[len].award
- awardVec[0] = #v.award
- for j, itemInfo in ipairs(v.award) do
- Grid.makeItem(awardVec[j], itemInfo[1], itemInfo[2])
- end
- end
- end
- taskList[0] = len
- --完成任务消耗
- Grid.makeItem(msgRet.finishTaskCost, FINISH_TASK_COST_ID, FINISH_TASK_COST_CNT)
- --红点
- local redDotList = msgRet.redDotList
- redDotList[0] = 0
- local redDotPageTb = redDotCheck(recordData)
- if redDotPageTb then
- len = 0
- for redPage in pairs(redDotPageTb) do
- len = len + 1
- redDotList[len] = redPage
- end
- redDotList[0] = len
- end
- Msg.send(msgRet, human.fd)
- human.nowPage = page
- end
- --领奖
- function GetReward(human, id, taskIdx, page)
- -- local state = AbsActLogic.isStarted(human, id)
- local state = CycleActivityLogic.isStarted(human, id)
- if not state then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local actData = human.db.absAct[id]
- if not actData then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local len = 0
- local taskIdList = {}
- local recordData = actData.recordData
- local config = AbsActExcel.AbsExcellentGiftLogic
- -- for k, v in ipairs(config) do
- -- if v.page == page then
- -- len = len + 1
- -- if len == taskIdx then
- -- taskId = k
- -- break
- -- end
- -- end
- -- end
- for k, v in ipairs(config) do
- if v.page == page then
- if getTaskState(k, recordData and recordData[k]) == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- len = len + 1
- taskIdList[len] = k
- end
- end
- end
- if len == 0 then
- return Broadcast.sendErr(human, Lang.ABS_ANSWER_ITEM_IS_GET)
- end
- local awardtbl = {}
- for _, taskId in ipairs(taskIdList) do
- recordData[taskId].isGet = '1'
- local taskCfg = config[taskId]
- for _, itemInfo in ipairs(taskCfg.award) do
- awardtbl[#awardtbl+1] = itemInfo
- end
- end
- BagLogic.addItemList(human, awardtbl, LOGTAG)
- --BagLogic.addItemList(human, taskCfg.award, LOGTAG)
- Query(human, id, page)
- --红点
- if not redDotCheck(recordData) then
- YunYingLogic.sendBanner(human)
- local otherConfig = AbsActExcel.absActivity[ACTID]
- YunYingLogic.sendGroupUpdate(YYInfo[ACTID], human, otherConfig.panelID)
- end
- end
- --消耗古玉完成任务
- function FinishTaskByDiamond(human, id, taskIdx, page)
- -- local state = AbsActLogic.isStarted(human, id)
- local state = CycleActivityLogic.isStarted(human, id)
- if not state then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local actData = human.db.absAct[id]
- if not actData then
- return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
- end
- local recordData = actData.recordData
- local len = 0
- local taskId = 0
- local taskCfg = nil
- local config = AbsActExcel.AbsExcellentGiftLogic
- for k, v in ipairs(config) do
- if v.page == page then
- len = len + 1
- if len == taskIdx then
- taskId = k
- taskCfg = v
- break
- end
- end
- end
- if taskId == 0 then
- return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
- end
- if recordData and recordData[taskId] and recordData[taskId].isGet then
- return Broadcast.sendErr(human, Lang.FRIEND_HEART_GET_HAD)
- end
- if getTaskState(taskId, recordData and recordData[taskId]) == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- return Broadcast.sendErr(human, Lang.COMMON_FINISH)
- end
- if BagLogic.getItemCnt(human, FINISH_TASK_COST_ID) < FINISH_TASK_COST_CNT then
- return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
- end
- --扣消耗
- BagLogic.delItem(human, FINISH_TASK_COST_ID, FINISH_TASK_COST_CNT, LOGTAG)
- recordData[taskId] = recordData[taskId] or {}
- recordData[taskId][taskCfg.taskId] = taskCfg.taskVal
- --红点
- YunYingLogic.sendBanner(human)
- local otherConfig = AbsActExcel.absActivity[ACTID]
- YunYingLogic.sendGroupUpdate(YYInfo[ACTID], human, otherConfig.panelID)
- --更新
- Query(human, id, page)
- end
- -- function GetRemainNum(human, nBuyID)
- -- local actData = human.db.absAct[ACTID]
- -- if not actData or not actData.recordData then
- -- return 1
- -- end
- -- local ids = getTaskIdVec(nil, nBuyID)
- -- local config = AbsActExcel.AbsExcellentGiftLogic
- -- for _, id in ipairs(ids) do
- -- if not actData.recordData[id] then
- -- return 1
- -- else
- -- local singleCfg = config[id]
- -- local needBuyId = singleCfg.buyId
- -- if not actData.recordData[id][needBuyId] then
- -- return 1
- -- else
- -- return 0
- -- end
- -- end
- -- end
- -- end
|