AngelBenefit = {} local this = {} AngelBenefit.Var = { ANGLE_TASK = "T$angletaskinfo", ANGLE_REWARD = "T$angletaskreward", ALL_SERVER_LIMIT_BUY = "R$allserverlimitbuy" --全服限量购买 } ---任务状态 AngelBenefit.TASK_STATUS = { ---已接取 ACCEPT = 1, ---已完成 FINISH = 2, ---已提交 SUBMIT = 3 } ---任务状态 AngelBenefit.TASK_TYPE = { --试炼达人 BRAVE = 1, --怪物猎人 MONSTER = 2 } --活动是否开启 function AngelBenefit.isActivityOpen(actor) local config = ConfigDataManager.getTable("sub_mainActivity", "id", 2) if config == nil then return false end return ConditionManager.Check(actor, config[1].actualcondition) end --页签是否开启 function AngelBenefit.tableOpen(actor) local config = ConfigDataManager.getTable("sub_mainActivity", "id", 2) if config == nil then return false end return ConditionManager.Check(actor, config[1].showcondition) end ---获取全服奖励信息和个人任务信息 function AngelBenefit.getAllAngleBenefitInfo(actor) local result = {} --个人任务 local taskInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_TASK) if taskInfo == nil or taskInfo == "" then taskInfo = {} end local taskResult = {} for k, v in pairs(taskInfo) do local info = {} info.nowCount = v.nowCount info.status = v.status taskResult[v.taskId] = info end result.taskInfo = taskResult --个人奖励 local rewardInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_REWARD) if rewardInfo == nil or rewardInfo == "" then rewardInfo = {} end local info = {} for _, v in pairs(rewardInfo) do info[v] = 1 end result.awards = info --全服限量购买 local serverData = getsysvar(actor, AngelBenefit.Var.ALL_SERVER_LIMIT_BUY) if serverData == nil or serverData == "" then serverData = {} end local serverDataResult = {} for k, v in pairs(serverData) do serverDataResult[k] = table.count(v) end result.serverReward = serverDataResult --通知客户端 sendluamsg(actor, LuaMessageIdToClient.RES_ANGLE_BENEFIT_INFO, table.valueConvertToString(result)) end function AngelBenefit.login(actor) AngelBenefit.AcceptTask(actor) end ---接取任务 function AngelBenefit.AcceptTask(actor) --活动是否开启 if not AngelBenefit.isActivityOpen(actor) then return end local taskInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_TASK) if taskInfo ~= nil then return end taskInfo = {} local config = ConfigDataManager.getTable("cfg_angleBenefitTask", "taskRank", 1) if not config then return end --接取任务 for i = 1, #config, 1 do local cfg = config[i] local targetId = cfg.tasktargetid local type = cfg.type local targetCfg = ConfigDataManager.getTable("cfg_task_target", "id", targetId) local task = {} task.taskGoalId = targetCfg[1].taskgoalparam task.goalCount = targetCfg[1].goalcount task.nowCount = 0 task.status = AngelBenefit.TASK_STATUS.ACCEPT task.taskRank = cfg.taskrank task.taskId = cfg.id taskInfo[type] = task end setplaydef(actor, AngelBenefit.Var.ANGLE_TASK, taskInfo) --通知客户端 local result = {} for _, v in pairs(taskInfo) do local info = {} info.nowCount = v.nowCount info.status = v.status result[v.taskId] = info end sendluamsg(actor, LuaMessageIdToClient.RES_ANGLE_BENEFIT_TASK_CHANGE, table.valueConvertToString(result)) end function AngelBenefit.UpdateTaskProgress(actor, type, param) local success, errorInfo = xpcall(this.UpdateTaskProgress, debug.traceback, actor, type, param) gameDebug.assertPrint(success, "大天使福利任务更新异常:", actor, type, param, errorInfo) end ---更新任务进度 function this.UpdateTaskProgress(actor, type, param) if actor == nil then return end --活动是否开启 if not AngelBenefit.isActivityOpen(actor) then return end local taskInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_TASK) if not taskInfo then return end local task = taskInfo[tostring(type)] if not task then return end if task.status == AngelBenefit.TASK_STATUS.SUBMIT then return end --根据类型进行任务进度更新 if tonumber(type) == AngelBenefit.TASK_TYPE.MONSTER then local monsterId = param if tonumber(task.taskGoalId) ~= tonumber(monsterId) then return else task.nowCount = tonumber(task.nowCount) + 1 end end if tonumber(type) == AngelBenefit.TASK_TYPE.BRAVE then local floor = param --层数 local oldF = task.nowCount if tonumber(oldF) < tonumber(floor) then task.nowCount = tonumber(floor) end end --更新任务状态 if task.nowCount >= tonumber(task.goalCount) then task.status = AngelBenefit.TASK_STATUS.FINISH end taskInfo[tostring(type)] = task setplaydef(actor, AngelBenefit.Var.ANGLE_TASK, taskInfo) --通知客户端 local result = {} for _, v in pairs(taskInfo) do local info = {} info.nowCount = v.nowCount info.status = v.status result[v.taskId] = info end sendluamsg(actor, LuaMessageIdToClient.RES_ANGLE_BENEFIT_TASK_CHANGE, table.valueConvertToString(result)) end ---提交任务 function AngelBenefit.submitTask(actor, msgData) local type = msgData.type local taskInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_TASK) if not taskInfo then tipinfo(actor, "任务未接取") return end local task = taskInfo[tostring(type)] if not task then tipinfo(actor, "任务不存在") return end if task.status == AngelBenefit.TASK_STATUS.SUBMIT then tipinfo(actor, "任务不可重复提交") return end if task.status ~= AngelBenefit.TASK_STATUS.FINISH then tipinfo(actor, "任务未完成") return end --修改任务状态 task.status = AngelBenefit.TASK_STATUS.SUBMIT taskInfo[tostring(type)] = task setplaydef(actor, AngelBenefit.Var.ANGLE_TASK, taskInfo) --发奖励 local reward = AngelBenefit.GetTaskReward(type, task.taskRank) for itemCfgId, count in pairs(reward) do Bag.addItemToBag(actor, itemCfgId, count, 0, 9999, "大天使福利") end --接取下一个任务 local taskCfg = ConfigDataManager.getTable("cfg_angleBenefitTask", "taskRank", tonumber(task.taskRank) + 1, "type", type) if taskCfg then local targetId = taskCfg[1].tasktargetid local targetCfg = ConfigDataManager.getTable("cfg_task_target", "id", targetId) local newTask = {} newTask.taskGoalId = targetCfg[1].taskgoalparam newTask.goalCount = targetCfg[1].goalcount if tonumber(type) == AngelBenefit.TASK_TYPE.BRAVE then newTask.nowCount = task.nowCount newTask.status = tonumber(newTask.nowCount) >= tonumber(newTask.goalCount) and AngelBenefit.TASK_STATUS.FINISH or AngelBenefit.TASK_STATUS.ACCEPT else newTask.status = AngelBenefit.TASK_STATUS.ACCEPT newTask.nowCount = 0 end newTask.taskRank = taskCfg[1].taskrank newTask.taskId = taskCfg[1].id taskInfo[tostring(type)] = newTask setplaydef(actor, AngelBenefit.Var.ANGLE_TASK, taskInfo) end --通知客户端 local resultInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_TASK) local result = {} local taskResult = resultInfo[tostring(type)] local info = {} info.nowCount = taskResult.nowCount info.status = taskResult.status result[tostring(taskResult.taskId)] = info sendluamsg(actor, LuaMessageIdToClient.RES_SUBMIT_ANGLE_BENEFIT_TASK, table.valueConvertToString(result)) end ---获取任务奖励 function AngelBenefit.GetTaskReward(type, order) local config = ConfigDataManager.getTable("cfg_angleBenefitTask", "type", type, "taskRank", order) if not config then return {} end return string.putIntIntMap({}, config[1].rewarditem, "#", "|") end ---领取或购买积分奖励 function AngelBenefit.receiveScoreReward(actor, msgData) --活动是否开启 if not AngelBenefit.isActivityOpen(actor) then tipinfo(actor, "活动未开启!") return end local order = msgData.order local config = ConfigDataManager.getTable("cfg_angleBenefitReward", "id", order) if not config then tipinfo(actor, "奖励不存在!") return end local rewardInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_REWARD) or {} if table.contains(rewardInfo, tostring(config[1].id)) then tipinfo(actor, "请勿重复领取!") return end local cost = string.putIntIntMap({}, config[1].rewardpoint, "#", "|") for k, v in pairs(cost) do if not Bag.checkItem(actor, k, v) then tipinfo(actor, "积分不足") return end end local hasCost = false --判断开服天数 local serverOpenDays = getbaseinfo(actor, "serveropendays") if tonumber(serverOpenDays) > tonumber(config[1].limittime) then local payConsume = splitbyshuxianandjinghao2(config[1].payconsume) for k, v in pairs(payConsume) do if not Bag.checkItem(actor, k, v) then tipinfo(actor, "材料不足,购买失败") return end end --扣材料 for k, v in pairs(payConsume) do removeitemfrombag(actor, k, v, 0, 9999, "大天使福利") end hasCost = true end --判断全服限购次数 callonserial(actor, "all_server_reward_limit", config, hasCost) end function all_server_reward_limit(actor, config, hasCost) --判断全服限购次数 local serverBuyInfo = getsysvar(actor, AngelBenefit.Var.ALL_SERVER_LIMIT_BUY) if serverBuyInfo == nil or serverBuyInfo == "" then serverBuyInfo = {} end local receiveList = serverBuyInfo[config[1].id] or {} if table.count(receiveList) >= tonumber(config[1].limitnum) and (not hasCost) then --花钱购买 local payConsume = string.putIntIntMap({}, config[1].payconsume, "#", "|") for k, v in pairs(payConsume) do if not Bag.checkItem(actor, k, v) then tipinfo(actor, "材料不足,购买失败") return end end --扣材料 for k, v in pairs(payConsume) do removeitemfrombag(actor, k, v, 0, 9999, "大天使福利") end else local playerBuyInfo = {} playerBuyInfo.receiveTime = getbaseinfo("now") playerBuyInfo.rid = getbaseinfo(actor, "rid") table.insert(receiveList, playerBuyInfo) serverBuyInfo[config[1].id] = receiveList setsysvar(AngelBenefit.Var.ALL_SERVER_LIMIT_BUY, serverBuyInfo) end --发奖励 local career = getbaseinfo(actor, "getbasecareer") local reward = string.toIntIntMap4Career(career, config[1].reward, "#", "|") --local reward = string.putIntIntMap({},config[1].reward,"#","|") for itemCfgId, count in pairs(reward) do Bag.addItemToBag(actor, itemCfgId, count, 0, 9999, "大天使福利") end --奖励弹框 sendluamsg(actor, LuaMessageIdToClient.COMMON_REWARD_PANEL, reward) --记录已经领取的奖励 table.insert(rewardInfo, config[1].id) setplaydef(actor, AngelBenefit.Var.ANGLE_REWARD, rewardInfo) --通知客户端 local result = {} for _, index in pairs(rewardInfo) do result[index] = 1 end sendluamsg(actor, LuaMessageIdToClient.RES_RECEIVE_ANGLE_BENEFIT_REWARD, table.valueConvertToString(result)) end --页签关闭时邮件发送未领取奖励 function AngelBenefit.OnCloseMail() local allRoleInfos = getallrolesummaryinfos() if allRoleInfos == nil or next(allRoleInfos) == nil then return end for _, roleInfo in pairs(allRoleInfos) do local reward = {} local actor = roleInfo["actor"] if AngelBenefit.tableOpen(actor) then return end local taskInfo = getplaydef(actor, AngelBenefit.Var.ANGLE_TASK) if taskInfo == nil or taskInfo == "" then taskInfo = {} end for k, v in pairs(taskInfo) do if v.status == AngelBenefit.TASK_STATUS.FINISH then local config = ConfigDataManager.getTable("cfg_angleBenefitTask", "type", k, "taskRank", v.taskRank) string.putIntIntMap(reward, config[1].rewarditem) end end setplaydef(actor, AngelBenefit.Var.ANGLE_TASK, nil) --发邮件 if table.count(reward) > 0 then sendconfigmailbyrid(actor, getbaseinfo(actor, "rid"), MailConfig.END_TIME_ANGLE_REWARD, reward, "") end end setsysvar(AngelBenefit.Var.ALL_SERVER_LIMIT_BUY, nil) end