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