diff --git a/lua/app/ui/task/cell/daily_task_cell.lua b/lua/app/ui/task/cell/daily_task_cell.lua index 2c9140d7..3bd8ac4f 100644 --- a/lua/app/ui/task/cell/daily_task_cell.lua +++ b/lua/app/ui/task/cell/daily_task_cell.lua @@ -63,11 +63,7 @@ function DailyTaskCell:refresh(task) self.adBtnRoot:setVisible(false) self.completeNode:setVisible(false) else - if task.lock == nil then - self.lockBg:setVisible(false) - else - self.lockBg:setVisible(true) - end + self.lockBg:setVisible(false) self.lockNode:setVisible(false) self.progressBg:setVisible(true) local count = task.progress diff --git a/lua/app/userdata/bounty/bounty_data.lua b/lua/app/userdata/bounty/bounty_data.lua index d186e86a..52248da0 100644 --- a/lua/app/userdata/bounty/bounty_data.lua +++ b/lua/app/userdata/bounty/bounty_data.lua @@ -108,6 +108,7 @@ function BountyData:setBought(season, level) end self.bought = true self.level = level or self.level + DataManager.DailyTaskData:unlockBountyTask() self:markDirty() end diff --git a/lua/app/userdata/task/daily_task_data.lua b/lua/app/userdata/task/daily_task_data.lua index 40409639..53d3907a 100644 --- a/lua/app/userdata/task/daily_task_data.lua +++ b/lua/app/userdata/task/daily_task_data.lua @@ -12,6 +12,7 @@ function DailyTaskData:ctor() self.isInReset = false self.taskTypeMap = {} self.dailyTasks = {} + self.isUnlockBountyDailyTask = false end function DailyTaskData:init(data) @@ -26,6 +27,7 @@ function DailyTaskData:init(data) table.remove(v) end end + self.isUnlockBountyDailyTask = DataManager.BountyData:getBought() local redPoint = 0 ModuleManager.TaskManager:unRegisterAllModuleTask(DATA_NAME) for k, v in pairs(cfg) do @@ -49,7 +51,7 @@ function DailyTaskData:init(data) dailyTaskObj.redPoint = false end if v.bounty then - if DataManager.BountyData:getBought() then + if self.isUnlockBountyDailyTask then dailyTaskObj.lock = false else dailyTaskObj.lock = true @@ -63,7 +65,7 @@ function DailyTaskData:init(data) end table.insert(list, dailyTaskObj) if #list == 1 then - self:registerTask(taskInfo.type) + self:registerTaskWithType(taskInfo.type) end end self.dailyTasks[k] = dailyTaskObj @@ -96,39 +98,26 @@ function DailyTaskData:refreshDailyTask(task) if originTaskInfo == nil then return end + local dailyTaskInfo = self:getDailyTaskCfg()[id] + if dailyTaskInfo == 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 + dailyTaskObj.type = dailyTaskInfo.type + dailyTaskObj.reset = dailyTaskInfo.reset local redPoint = false if not dailyTaskObj.claimed and dailyTaskObj.progress >= dailyTaskObj.needProgress then redPoint = true end 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 + self:unregisterTask(id, originTaskType) + self:registerTask(dailyTaskObj, taskInfo.type) end self:markDailyTaskDirty() @@ -294,7 +283,7 @@ function DailyTaskData:addTaskProgress(task, taskType, count) self:markDailyTaskDirty() end -function DailyTaskData:registerTask(taskType) +function DailyTaskData:registerTaskWithType(taskType) ModuleManager.TaskManager:registerTask(DATA_NAME, taskType, function(count) local list = self:getTaskListByType(taskType) if #list > 0 then @@ -305,10 +294,37 @@ function DailyTaskData:registerTask(taskType) end) end -function DailyTaskData:unregisterTask(taskType) +function DailyTaskData:unregisterTask(id, taskType) + local taskList = self.taskTypeMap[taskType] + if taskList then + for k, v in ipairs(taskList) do + if v.id == id then + table.remove(taskList, k) + break + end + end + if #taskList == 0 then + self:unregisterTaskWithType(taskType) + end + end +end + +function DailyTaskData:unregisterTaskWithType(taskType) ModuleManager.TaskManager:unRegisterTask(DATA_NAME, taskType) end +function DailyTaskData:registerTask(dailyTaskObj, taskType) + local taskList = self.taskTypeMap[taskType] + if taskList == nil then + taskList = {} + self.taskTypeMap[taskType] = taskList + end + table.insert(taskList, dailyTaskObj) + if #taskList == 1 then + self:registerTaskWithType(taskType) + end +end + function DailyTaskData:getIfCanReset() return self.initDay < Time:getBeginningOfServerToday() end @@ -325,4 +341,23 @@ function DailyTaskData:getIsShowRedPoint() return self.redPoint > 0 end +function DailyTaskData:unlockBountyTask() + if self.isUnlockBountyDailyTask then + return + end + self.isUnlockBountyDailyTask = true + local dirty = false + local taskCfg = self:getTaskCfg() + for k, v in pairs(self.dailyTasks) do + if v.lock then -- 有锁的要解锁 + v.lock = false + dirty = true + self:registerTask(v, taskCfg[v.taskId].type) + end + end + if dirty then + self:markDailyTaskDirty() + end +end + return DailyTaskData \ No newline at end of file