123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- 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
|