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 AbsActLogic = require("absAct.AbsActLogic") local YunYingLogic = require("yunying.YunYingLogic") local EquipLogic = require("equip.EquipLogic") local PanelDefine = require("broadcast.PanelDefine") MANGHE_ONE_NEED = 1 MANGHE_TEN_NEED = 10 MANGHE_MR_1 = 1 -- 每日登陆奖励 MANGHE_MR_2 = 2 -- 每日活跃度奖励 MANGHE_MR_3 = 3 -- 每日充值奖励 MANGHE_MR_STATUS_1 = 1 --可领取 MANGHE_MR_STATUS_2 = 2 --已领取 MANGHE_RARE_MAX = nil -- 权重和 MANGHE_RARE_MUM = nil -- 保底权重和 local function initMrDb(human, id, mrId) local absAct = human.db.absAct[id] if not absAct then return end local manheMrConfig = AbsActExcel.mangHeMr[mrId] if not manheMrConfig then return end absAct.mrReward = absAct.mrReward or {} absAct.mrReward[mrId] = absAct.mrReward[mrId] or {} absAct.mrReward[mrId].status = absAct.mrReward[mrId].status or 0 absAct.mrReward[mrId].cur = absAct.mrReward[mrId].cur or 0 end function refreshRare() if MANGHE_RARE_MAX then return end for _, v in ipairs(AbsActExcel.mangHe) do MANGHE_RARE_MAX = MANGHE_RARE_MAX or 0 MANGHE_RARE_MAX = MANGHE_RARE_MAX + v.rare if v.mum ~= 0 then MANGHE_RARE_MUM = MANGHE_RARE_MUM or 0 MANGHE_RARE_MUM = MANGHE_RARE_MUM + v.rare end end end -- 封装 礼包 function fontGift(human, id , net) local config = AbsActExcel.mangHeGift[1] net.id = 1 for i = 1, #config.reward do Grid.makeItem(net.item[i], config.reward[i][1], config.reward[i][2]) end net.item[0] = #config.reward net.name = config.name or "" net.cnt = human.db.absAct[id].buyCnt and human.db.absAct[id].buyCnt or 0 net.maxCnt = config.cnt BuyLogic.fontBuyItem(human, net.buyMsg[1], config.buyID) net.buyMsg[0]=1 net.needItem[0]=0 net.icon = 0 end -- 封装成就 function fontCj(human, id, net) local getID = human.db.absAct[id].getID and human.db.absAct[id].getID or 0 local nextID = getID + 1 nextID = AbsActExcel.mangHeCj[nextID] and nextID or getID local config = AbsActExcel.mangHeCj[nextID] net.cjNow = human.db.absAct[id].drawCnt and human.db.absAct[id].drawCnt or 0 net.cjMax = config.need net.cjGet = getID net.cjItemID = nextID Grid.makeItem(net.cjItem, config.item[1], config.item[2]) end -- 封装每日奖励 function fontMr(human, id, mrId, net, actId) local manheMrConfig = AbsActExcel.mangHeMr[mrId] local absAct = human.db.absAct[id] net.id = mrId net.desc = manheMrConfig.desc net.status = absAct.mrReward and absAct.mrReward[mrId] and absAct.mrReward[mrId].status or 0 net.cur = absAct.mrReward and absAct.mrReward[mrId] and absAct.mrReward[mrId].cur or 0 net.max = 1 if MANGHE_MR_2 == mrId then net.max = 100 end if mrId == MANGHE_MR_1 and net.status == 0 then -- 每日登陆 奖励必完成 ( 存在极小概率 玩家在0点 login updateDaliy 快于 yunyingLogic 的活动更换 导致每日登陆标记失败) mrActive(human, mrId, id) net.status = MANGHE_MR_STATUS_1 end if net.cur >= net.max then net.cur = net.max end Grid.makeItem(net.item, manheMrConfig.item[actId][1], manheMrConfig.item[actId][2]) end -- 查询 function query(human, id) local state, endTime, starTime = AbsActLogic.isStarted(human, id) if not state then return end local absActConfig = AbsActExcel.absActivity[id] local absAct = human.db.absAct[id] local bdCnt = absAct.bdCnt or 0 local msgRet = Msg.gc.GC_ABS_ACT_MANGHE_QUERY msgRet.startTime = starTime msgRet.endTime = endTime msgRet.bdCnt = 30 - bdCnt msgRet.templateId = absActConfig.adIcon fontCj(human, id, msgRet) fontGift(human, id, msgRet.gift) Grid.makeItem(msgRet.oneNeed, absActConfig.param[1], absActConfig.param[2]) Grid.makeItem(msgRet.tenNeed, absActConfig.param[1], absActConfig.param[2] * MANGHE_TEN_NEED) fontMr(human, id, MANGHE_MR_1, msgRet.mrReward[MANGHE_MR_1], absActConfig.actId) fontMr(human, id, MANGHE_MR_2, msgRet.mrReward[MANGHE_MR_2], absActConfig.actId) fontMr(human, id, MANGHE_MR_3, msgRet.mrReward[MANGHE_MR_3], absActConfig.actId) msgRet.mrReward[0] = MANGHE_MR_3 msgRet.qiPao = absAct.qiPao or 1 absAct.qiPao = 2 Msg.send(msgRet, human.fd) end -- 随机一个道具 function random(isLast) if not isLast then local random = math.random(1, MANGHE_RARE_MAX) for k, v in ipairs(AbsActExcel.mangHe) do if random <= v.rare then return v else random = random - v.rare end end else local random = math.random(1, MANGHE_RARE_MUM) for k, v in ipairs(AbsActExcel.mangHe) do if v.mum ~= 0 then if random <= v.rare then return v else random = random - v.rare end end end end end function addCj(human, id, cnt) human.db.absAct[id].drawCnt = human.db.absAct[id].drawCnt or 0 human.db.absAct[id].drawCnt = human.db.absAct[id].drawCnt + cnt end -- 抽奖 function draw(human, cnt) local state,id = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_2) if not state then return end if not cnt or (cnt ~= 1 and cnt ~= 10) then return end local absAct = human.db.absAct[id] if not absAct then return end absAct.bdCnt = absAct.bdCnt or 0 local absActConfig = AbsActExcel.absActivity[id] if not absActConfig then return end refreshRare() AbsActLogic.checkAbsActClean(human, id) -- 检查道具是否足够 local needCnt = cnt * absActConfig.param[2] if needCnt > BagLogic.getItemCnt(human, absActConfig.param[1]) then return Broadcast.sendErr(human, Util.format(Lang.COMMON_NO_ITEM, ItemDefine.getValue(ItemDefine.ITEM_MANGHE_ID, "name"))) end BagLogic.delItem(human, absActConfig.param[1], needCnt, "abs_manghe") local getList = {} local isLast = nil for i = 1, cnt do isLast = nil absAct.bdCnt = absAct.bdCnt + 1 if absAct.bdCnt == 30 then isLast = true absAct.bdCnt = 0 end getList[#getList + 1] = random(isLast) end addCj(human, id, cnt) local msgRet = Msg.gc.GC_ABS_ACT_MANGHE_DO local len = 0 for i = 1, #getList do local config = getList[i] BagLogic.addItem(human, config.item[1], config.item[2], "abs_manghe", nil, config.item[3]) if not ItemDefine.isEquip(config.item[1]) then len = len + 1 Grid.makeItem(msgRet.list[len], config.item[1] , config.item[2]) end end msgRet.list[0] = len msgRet.list[0] = EquipLogic.makeEquipItem(human, msgRet.list, msgRet.list[0]) YunYingLogic.updateIcon(YYInfo[id], human) YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3702) Msg.send(msgRet, human.fd) query(human, id) end -- 概率查询 function queryRare(human) local msgRet = Msg.gc.GC_ABS_ACT_MANGHE_RARE_QUERY refreshRare() msgRet.isStart = 0 msgRet.isEnd = 0 local len = 0 for k, config in ipairs(AbsActExcel.mangHe) do if config.show == 1 then if len <= 0 then msgRet.isStart = 1 end len = len + 1 local net = msgRet.list[len] net.id = k net.rare = math.floor(config.rare / MANGHE_RARE_MAX * 10000) net.rare = net.rare > 0 and net.rare or 1 Grid.makeItem(net.item, config.item[1], config.item[2], nil, nil, nil, nil, config.item[3]) if len >= 30 then msgRet.list[0] = len Msg.send(msgRet, human.fd) len = 0 msgRet.isStart = 0 end end end msgRet.list[0] = len msgRet.isEnd = 1 Msg.send(msgRet, human.fd) end MANGHE_CJ_STATE = nil -- 成就查询 function queryCj(human) local state,id = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_2) if not state then return end local msgRet = Msg.gc.GC_ABS_ACT_MANGHE_CJ_QUERY if not MANGHE_CJ_STATE then for k, config in ipairs(AbsActExcel.mangHeCj) do local net = msgRet.list[k] net.id = k net.need = config.need Grid.makeItem(net.item, config.item[1], config.item[2]) end msgRet.list[0] = #AbsActExcel.mangHeCj msgRet.cjMax = AbsActExcel.mangHeCj[#AbsActExcel.mangHeCj].need end msgRet.now =human.db.absAct[id].drawCnt and human.db.absAct[id].drawCnt or 0 Msg.send(msgRet, human.fd) end -- 成就 领取 function cjGet(human) local state,id = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_2) if not state then return end local getID = human.db.absAct[id].getID and human.db.absAct[id].getID or 0 local config = AbsActExcel.mangHeCj[getID + 1] if not config then return end local now = human.db.absAct[id].drawCnt and human.db.absAct[id].drawCnt or 0 if now < config.need then return end human.db.absAct[id].getID = getID + 1 BagLogic.cleanMomentItemList() BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, config.item[1], config.item[2]) BagLogic.addMomentItemList(human, "abs_manghe") query(human, id) YunYingLogic.updateIcon(YYInfo[id], human) YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3702) end -- 每日奖励 领取 function mrGet(human, mrId) local state,id = AbsActLogic.isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_2) if not state then return end local absConfig = AbsActExcel.absActivity[id] if not absConfig then return end if absConfig.actId == 0 then return end local absAct = human.db.absAct[id] if not absAct then return end local manheMrConfig = AbsActExcel.mangHeMr[mrId] if not manheMrConfig then return end absAct.mrReward = absAct.mrReward or {} absAct.mrReward[mrId] = absAct.mrReward[mrId] or {} absAct.mrReward[mrId].status = absAct.mrReward[mrId].status or 0 if absAct.mrReward[mrId].status ~= MANGHE_MR_STATUS_1 then return end absAct.mrReward[mrId].status = MANGHE_MR_STATUS_2 BagLogic.cleanMomentItemList() BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, manheMrConfig.item[absConfig.actId][1], manheMrConfig.item[absConfig.actId][2]) BagLogic.addMomentItemList(human, "abs_manghe") YunYingLogic.sendBanner(human) query(human, id) YunYingLogic.updateIcon(YYInfo[id], human) YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3702) end -- 盲盒礼包 购买 function mangHeGift(human, id, buyConf, isFirst, cnt) local state = AbsActLogic.isStarted(human, id) if not state then return end AbsActLogic.checkAbsActClean(human, id) local config = AbsActExcel.mangHeGift[1] local buyCnt = human.db.absAct[id].buyCnt and human.db.absAct[id].buyCnt or 0 if config.cnt <= buyCnt then return end human.db.absAct[id].buyCnt = buyCnt + 1 BagLogic.addItemList(human, config.reward, "abs_manghe") query(human, id) end -- 每日任务激活 function mrActive(human, mrId, id) local state = AbsActLogic.isStarted(human, id) if not state then return end local absAct = human.db.absAct[id] if not absAct then return end initMrDb(human, id, mrId) --MANGHE_MR_1 = 1 -- 每日登陆奖励 --MANGHE_MR_2 = 2 -- 每日活跃度奖励 --MANGHE_MR_3 = 3 -- 每日充值奖励 if mrId == MANGHE_MR_1 or mrId == MANGHE_MR_3 then if absAct.mrReward[mrId].status == 0 then absAct.mrReward[mrId].status = MANGHE_MR_STATUS_1 absAct.mrReward[mrId].cur = 1 end return end end function updateDaily(human, id) local state = AbsActLogic.isStarted(human, id) if not state then return end AbsActLogic.checkAbsActClean(human, id) local absAct = human.db.absAct[id] if not absAct then return end absAct.mrReward = nil mrActive(human, MANGHE_MR_1, id) end function onDailyTask(human, id) local state = AbsActLogic.isStarted(human, id) if not state then return end AbsActLogic.checkAbsActClean(human, id) local absAct = human.db.absAct[id] if not absAct then return end local nowHuoYue = human.db.dailyTask and human.db.dailyTask.nowHuoYue or 0 initMrDb(human, id, MANGHE_MR_2) absAct.mrReward[MANGHE_MR_2].cur = nowHuoYue if nowHuoYue >= 100 then if absAct.mrReward[MANGHE_MR_2].status == 0 then absAct.mrReward[MANGHE_MR_2].status = MANGHE_MR_STATUS_1 YunYingLogic.updateIcon(YYInfo[id], human) YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3702) end end end function onCharge(human, price, id) local state = AbsActLogic.isStarted(human, id) if not state then return end AbsActLogic.checkAbsActClean(human, id) mrActive(human, MANGHE_MR_3, id) end function isRed(human, YYInfo, funcConfig) local state = AbsActLogic.isStarted(human, funcConfig.funcID) if not state then return end local absAct = human.db.absAct[funcConfig.funcID] if not absAct then return end if absAct.mrReward then for k, v in pairs(absAct.mrReward) do if v.status == MANGHE_MR_STATUS_1 then return true end end end local getID = absAct.getID or 0 local config = AbsActExcel.mangHeCj[getID + 1] if not config then return end local now = absAct.drawCnt or 0 if now >= config.need then return true end 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