c1_lua/lua/app/userdata/task/daily_task_data.lua
2023-05-11 20:05:50 +08:00

241 lines
5.9 KiB
Lua

local DailyTaskData = class("DailyTaskData", BaseData)
local DAILY_TASK_AD_ID = 1
local DAILY_TASK_FINAL_ID = 2
local DATA_NAME = "DailyTaskData"
function DailyTaskData:ctor()
self.data.dailyTaskDirty = false
self.taskTypeMap = {}
self.dailyTasks = {}
end
function DailyTaskData:init(data)
local tasks = data and data.tasks
local cfg = self:getDailyTaskCfg()
local taskCfg = self:getTaskCfg()
for k, v in pairs(self.dailyTasks) do
self.dailyTasks[k] = nil
end
for k, v in pairs(self.taskTypeMap) do
for i = 1, #v do
table.remove(v)
end
end
for k, v in pairs(cfg) do
local task = tasks and tasks[k] or GConst.EMPTY_TABLE
local taskInfo = taskCfg[task.task_id]
if taskInfo then
local dailyTaskObj = {
id = k,
taskId = task.task_id,
progress = task.progress,
needProgress = taskInfo.number,
refresh = task.refresh,
claimed = task.claimed,
type = v.type
}
if v.bounty then
dailyTaskObj.lock = true
end
self.dailyTasks[k] = dailyTaskObj
local list = self.taskTypeMap[taskInfo.type]
if list == nil then
list = {}
self.taskTypeMap[taskInfo.type] = list
end
table.insert(list, dailyTaskObj)
if #list == 1 then
self:registerTask(taskInfo.type)
end
end
end
end
function DailyTaskData:refreshDailyTask(task)
local id = task.id
local dailyTaskObj = self.dailyTasks[id]
if dailyTaskObj == nil then
return
end
local taskInfo = self:getTaskCfg()[task.task_id]
if taskInfo == nil then
return
end
local originTaskInfo = self:getTaskCfg()[dailyTaskObj.taskId]
if originTaskInfo == nil then
return
end
dailyTaskObj.id = task.id
dailyTaskObj.taskId = task.task_id
dailyTaskObj.progress = task.progress
dailyTaskObj.needProgress = taskInfo.number
dailyTaskObj.refresh = task.refresh
dailyTaskObj.claimed = task.claimed
local originTaskType = originTaskInfo.type
if originTaskType ~= taskInfo.type then -- 任务类型变了
local originTaskList = self.taskTypeMap[originTaskType]
if originTaskList then
for k, v in ipairs(originTaskList) do
if v.id == id then
table.remove(originTaskList, k)
break
end
end
if #originTaskList == 0 then
self:unregisterTask(originTaskType)
end
end
local newTaskList = self.taskTypeMap[taskInfo.type]
if newTaskList == nil then
newTaskList = {}
self.taskTypeMap[taskInfo.type] = newTaskList
end
table.insert(newTaskList, dailyTaskObj)
if #newTaskList == 1 then
self:registerTask(taskInfo.type)
end
end
self:markDailyTaskDirty()
end
function DailyTaskData:getIsOpen()
return ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.TASK, true)
end
function DailyTaskData:getDailyResetTime()
return 86400 - Time:getServerTime() % 86400
end
function DailyTaskData:getDailyTaskAdId()
return DAILY_TASK_AD_ID
end
function DailyTaskData:getDailyTaskFinalId()
return DAILY_TASK_FINAL_ID
end
function DailyTaskData:markDailyTaskDirty()
self.data.dailyTaskDirty = not self.data.dailyTaskDirty
end
function DailyTaskData:getDailyTaskProgress(id)
local task = self.dailyTasks[id]
if task == nil then
return 0, 1
end
return task.progress, task.needProgress
end
function DailyTaskData:getDailyTaskDesc(id)
local task = self.dailyTasks[id]
if task == nil then
return GConst.EMPTY_STRING
end
local cfg = self:getTaskI18NCfg()
return cfg[task.taskId].desc
end
function DailyTaskData:getDailyTaskIsLock(id)
local task = self.dailyTasks[id]
if task == nil then
return nil
end
return task.lock
end
function DailyTaskData:getDailyTaskCanRefresh(id)
local cfg = self:getDailyTaskCfg()[id]
if cfg == nil then
return false
end
return cfg.ad_refresh
end
function DailyTaskData:getDailyTaskIcon(id)
local task = self.dailyTasks[id]
if task == nil then
return GConst.EMPTY_STRING
end
local cfg = self:getTaskCfg()
return cfg[task.taskId].icon
end
function DailyTaskData:getDailyTaskReward(id)
local task = self.dailyTasks[id]
if task == nil then
return GConst.EMPTY_STRING
end
local cfg = self:getTaskCfg()
return cfg[task.taskId].reward
end
function DailyTaskData:getDailyTasks()
return self.dailyTasks
end
function DailyTaskData:getTaskI18NCfg()
if self.taskI18NCfg == nil then
self.taskI18NCfg = I18N:getConfig("task")
end
return self.taskI18NCfg
end
function DailyTaskData:getTaskCfg()
if self.taskCfg == nil then
self.taskCfg = ConfigManager:getConfig("task")
end
return self.taskCfg
end
function DailyTaskData:getDailyTaskCfg()
if self.dailyTaskCfg == nil then
self.dailyTaskCfg = ConfigManager:getConfig("task_daily")
end
return self.dailyTaskCfg
end
function DailyTaskData:getTaskListByType(taskType)
return self.taskTypeMap[taskType] or GConst.EMPTY_TABLE
end
function DailyTaskData:getIfCanClaimTask(task)
if task.claimed then
return false
end
return task.progress <= task.needProgress
end
function DailyTaskData:addTaskProgress(task, taskType, count)
local currProgress = task.progress
if currProgress >= task.needProgress then
return
end
local can = self:getIfCanClaimTask(task)
task.progress = task.progress + count
if not can and self:getIfCanClaimTask(task) then
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.DAILY_TASK_ADD_PROGRESS, task.id, task.taskId, currProgress, task.needProgress)
if task.type == 1 and task.reset == 1 and taskType ~= GConst.TaskConst.TASK_TYPE.COMPLETED_DALY_TASK then
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.COMPLETED_DALY_TASK)
end
BIReport:postDailyTaskFinish(BIReport.TASK_TYPE.DAILY, task.id, task.taskId, task.refresh)
end
self:markDailyTaskDirty()
end
function DailyTaskData:registerTask(taskType)
ModuleManager.TaskManager:registerTask(DATA_NAME, taskType, function(count)
local list = self:getTaskListByType(taskType)
if #list > 0 then
for _, task in ipairs(list) do
self:addTaskProgress(task, taskType, count)
end
end
end)
end
function DailyTaskData:unregisterTask(taskType)
ModuleManager.TaskManager:unRegisterTask(DATA_NAME, taskType)
end
return DailyTaskData