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 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 --判断全服限购次数 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 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