241 lines
5.9 KiB
Lua
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 |