local TaskManager = class("TaskManager", BaseModule) function TaskManager:registerTask(moduleName, taskType, callback) if not self.registerTaskInfo then self.registerTaskInfo = {} end if not self.registerTaskInfo[taskType] then self.registerTaskInfo[taskType] = {} end self.registerTaskInfo[taskType][moduleName] = callback end function TaskManager:unRegisterTask(moduleName, taskType) if not self.registerTaskInfo then return end if not self.registerTaskInfo[taskType] then return end self.registerTaskInfo[taskType][moduleName] = nil end function TaskManager:unRegisterAllModuleTask(name) if not self.registerTaskInfo then return end for taskType, callbacks in pairs(self.registerTaskInfo) do for moduleName, callback in pairs(callbacks) do if moduleName == name then callbacks[moduleName] = nil break end end end end function TaskManager:clear() self.registerTaskInfo = nil end function TaskManager:addTaskProgress(type, params1) if not self.registerTaskInfo then return end local func = TaskManager.TYPE_DEAL_FUNC[type] if func then func(self, params1) end end function TaskManager:dispatchTask(type, count) if not self.registerTaskInfo then return end if not self.registerTaskInfo[type] then return end for module, callback in pairs(self.registerTaskInfo[type]) do if callback then callback(count) end end end ------------------------------------------------------ 处理任务 ------------------------------------------------------ function TaskManager:xKillMonster(params) local num = params.num if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_KILL_MONSTER, num) end function TaskManager:passChapter() local id = DataManager.ChapterData:getHistoryChapterId() self:dispatchTask(GConst.TaskConst.TASK_TYPE.PASS_CHAPTER, id) end function TaskManager:xSummon(params) local num = params.num local cfgId = params.cfgId if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_SUMMON, num) if cfgId == ModuleManager.SummonManager.WEAPON_SUMMON then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_WEAPON_SUMMON, num) elseif cfgId == ModuleManager.SummonManager.PROTECTIVE_SUMMON then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_PROTECTIVE_SUMMON, num) elseif cfgId == ModuleManager.SummonManager.LEGACY_SUMMON then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_LEGACY_SUMMON, num) end end function TaskManager:xWatchAd(params) self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_WATCH_AD, 1) end function TaskManager:completeDailyTask() self:dispatchTask(GConst.TaskConst.TASK_TYPE.COMPLETED_DALY_TASK, 1) end function TaskManager:xLoginDay() self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_LOGIN_DAY, 1) end function TaskManager:arenaTierOn(params) local segement = params.segement self:dispatchTask(GConst.TaskConst.TASK_TYPE.ARENA_TIER_ON, segement) end function TaskManager:xHoeUse(params) local num = params.num if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_HOE_USE, num) end function TaskManager:xboringCrownUse(params) local num = params.num if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_BORING_CROWN_USE, num) end function TaskManager:xBoomUse(params) local num = params.num if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_BOOM_USE, num) end function TaskManager:xResearchUse(params) local count = DataManager.ResearchData:getResearchCount() self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_RESEARCH_USE, 1) end function TaskManager:xMineGrid(params) local num = params.num self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_MINE_GRID, num) end function TaskManager:xMineDistance(params) local distance = DataManager.MiningData:getDepth() self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_MINE_DISTANCE, distance) end function TaskManager:xBlessingGot(params) self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_BLESSING_GOT, 1) end function TaskManager:xRuneGot(params) local runeList = params.runeList if not runeList then return end local count = #runeList self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_RUNE_GOT, count) end function TaskManager:xRuneLvUp(params) self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_RUNE_LV_UP, 1) end function TaskManager:xTrainAtk(params) local num = params.count if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_TRAIN_ATK, num) end function TaskManager:xTrainHp(params) local num = params.count if not num then return end self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_TRAIN_HP, num) end function TaskManager:xStageChallenge(params) self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_STAGE_CHALLENGE, 1) end function TaskManager:onDungenBattle(params) local id = params.id local maxLevel = DataManager.DungeonData:getPassedMaxLevel(id) if id == 1 then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_GOLD_BATTLE, 1) self:dispatchTask(GConst.TaskConst.TASK_TYPE.COMPLETED_GOLD_BATTLE, maxLevel) elseif id == 2 then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_JEWELRY_BATTLE, 1) self:dispatchTask(GConst.TaskConst.TASK_TYPE.COMPLETED_JEWELRY_BATTLE, maxLevel) elseif id == 3 then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_MITHRIL_BATTLE, 1) self:dispatchTask(GConst.TaskConst.TASK_TYPE.COMPLETED_MITHRIL_BATTLE, maxLevel) elseif id == 4 then self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_CHARACTERISTIC_BATTLE, 1) self:dispatchTask(GConst.TaskConst.TASK_TYPE.COMPLETED_CHARACTERISTIC_BATTLE, maxLevel) end end function TaskManager:xArenaChallenge(params) self:dispatchTask(GConst.TaskConst.TASK_TYPE.X_ARENA_CHALLENGE, 1) end ---- 没有特殊说明,方法均返回任务增量 TaskManager.TYPE_DEAL_FUNC = { [GConst.TaskConst.TASK_TYPE.X_KILL_MONSTER] = TaskManager.xKillMonster, [GConst.TaskConst.TASK_TYPE.PASS_CHAPTER] = TaskManager.passChapter, [GConst.TaskConst.TASK_TYPE.X_SUMMON] = TaskManager.xSummon, [GConst.TaskConst.TASK_TYPE.X_WATCH_AD] = TaskManager.xWatchAd, [GConst.TaskConst.TASK_TYPE.COMPLETED_DALY_TASK] = TaskManager.completeDailyTask, [GConst.TaskConst.TASK_TYPE.X_LOGIN_DAY] = TaskManager.xLoginDay, [GConst.TaskConst.TASK_TYPE.X_WEAPON_SUMMON] = TaskManager.xSummon, [GConst.TaskConst.TASK_TYPE.X_PROTECTIVE_SUMMON] = TaskManager.xSummon, [GConst.TaskConst.TASK_TYPE.X_LEGACY_SUMMON] = TaskManager.xSummon, [GConst.TaskConst.TASK_TYPE.COMPLETED_JEWELRY_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.COMPLETED_GOLD_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.COMPLETED_MITHRIL_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.COMPLETED_CHARACTERISTIC_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.ARENA_TIER_ON] = TaskManager.arenaTierOn, [GConst.TaskConst.TASK_TYPE.X_HOE_USE] = TaskManager.xHoeUse, [GConst.TaskConst.TASK_TYPE.X_BORING_CROWN_USE] = TaskManager.xboringCrownUse, [GConst.TaskConst.TASK_TYPE.X_BOOM_USE] = TaskManager.xBoomUse, [GConst.TaskConst.TASK_TYPE.X_RESEARCH_USE] = TaskManager.xResearchUse, [GConst.TaskConst.TASK_TYPE.X_MINE_GRID] = TaskManager.xMineGrid, [GConst.TaskConst.TASK_TYPE.X_MINE_DISTANCE] = TaskManager.xMineDistance, [GConst.TaskConst.TASK_TYPE.X_BLESSING_GOT] = TaskManager.xBlessingGot, [GConst.TaskConst.TASK_TYPE.X_RUNE_GOT] = TaskManager.xRuneGot, [GConst.TaskConst.TASK_TYPE.X_RUNE_LV_UP] = TaskManager.xRuneLvUp, [GConst.TaskConst.TASK_TYPE.X_TRAIN_ATK] = TaskManager.xTrainAtk, [GConst.TaskConst.TASK_TYPE.X_TRAIN_HP] = TaskManager.xTrainHp, [GConst.TaskConst.TASK_TYPE.X_STAGE_CHALLENGE] = TaskManager.xStageChallenge, [GConst.TaskConst.TASK_TYPE.X_JEWELRY_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.X_GOLD_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.X_MITHRIL_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.X_CHARACTERISTIC_BATTLE] = TaskManager.onDungenBattle, [GConst.TaskConst.TASK_TYPE.X_ARENA_CHALLENGE] = TaskManager.xArenaChallenge, } function TaskManager:taskGoto(taskType) if TaskManager.gotoFunc[taskType] then TaskManager.gotoFunc[taskType](self) end end function TaskManager:gotoMainUI() ModuleManager.MaincityManager:showMainCityUI() end function TaskManager:gotoSummonUI() EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, {page = GConst.MainCityConst.BOTTOM_PAGE.SHOP, storeIdx = 1}) end function TaskManager:gotoSectUI() EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, {page = GConst.MainCityConst.BOTTOM_PAGE.SECT}) end function TaskManager:gotoDungenUI() EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, {page = GConst.MainCityConst.BOTTOM_PAGE.DUNGEON}) end function TaskManager:gotoTarinUI() EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, {page = GConst.MainCityConst.BOTTOM_PAGE.TRAIN}) end TaskManager.gotoFunc = { [GConst.TaskConst.TASK_TYPE.X_KILL_MONSTER] = TaskManager.gotoMainUI, [GConst.TaskConst.TASK_TYPE.PASS_CHAPTER] = TaskManager.gotoMainUI, [GConst.TaskConst.TASK_TYPE.X_SUMMON] = TaskManager.gotoSummonUI, [GConst.TaskConst.TASK_TYPE.X_WATCH_AD] = TaskManager.gotoSummonUI, [GConst.TaskConst.TASK_TYPE.X_WEAPON_SUMMON] = TaskManager.gotoSummonUI, [GConst.TaskConst.TASK_TYPE.X_PROTECTIVE_SUMMON] = TaskManager.gotoSummonUI, [GConst.TaskConst.TASK_TYPE.X_LEGACY_SUMMON] = TaskManager.gotoSummonUI, [GConst.TaskConst.TASK_TYPE.COMPLETED_JEWELRY_BATTLE] = TaskManager.gotoDungenUI, [GConst.TaskConst.TASK_TYPE.COMPLETED_GOLD_BATTLE] = TaskManager.gotoDungenUI, [GConst.TaskConst.TASK_TYPE.COMPLETED_MITHRIL_BATTLE] = TaskManager.gotoDungenUI, [GConst.TaskConst.TASK_TYPE.COMPLETED_CHARACTERISTIC_BATTLE] = TaskManager.gotoDungenUI, [GConst.TaskConst.TASK_TYPE.ARENA_TIER_ON] = TaskManager.gotoDungenUI, [GConst.TaskConst.TASK_TYPE.X_HOE_USE] = TaskManager.gotoSectUI, [GConst.TaskConst.TASK_TYPE.X_BORING_CROWN_USE] = TaskManager.gotoSectUI, [GConst.TaskConst.TASK_TYPE.X_BOOM_USE] = TaskManager.gotoSectUI, [GConst.TaskConst.TASK_TYPE.X_RESEARCH_USE] = TaskManager.gotoSectUI, [GConst.TaskConst.TASK_TYPE.X_MINE_GRID] = TaskManager.gotoSectUI, -- [GConst.TaskConst.TASK_TYPE.X_MINE_DISTANCE] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_BLESSING_GOT] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_RUNE_GOT] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_RUNE_LV_UP] = TaskManager.gotoMainUI, [GConst.TaskConst.TASK_TYPE.X_TRAIN_ATK] = TaskManager.gotoTarinUI, [GConst.TaskConst.TASK_TYPE.X_TRAIN_HP] = TaskManager.gotoTarinUI, -- [GConst.TaskConst.TASK_TYPE.X_STAGE_CHALLENGE] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_JEWELRY_BATTLE] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_GOLD_BATTLE] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_MITHRIL_BATTLE] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_CHARACTERISTIC_BATTLE] = TaskManager.gotoMainUI, -- [GConst.TaskConst.TASK_TYPE.X_ARENA_CHALLENGE] = TaskManager.gotoMainUI, } function TaskManager:getTaskDesc(type, count, totalCount) local cfg = I18N:getConfig("task")[type] if not cfg then return GConst.EMPTY_STRING end local str = GConst.EMPTY_STRING if type == GConst.TaskConst.TASK_TYPE.PASS_CHAPTER or type == GConst.TaskConst.TASK_TYPE.COMPLETED_JEWELRY_BATTLE or type == GConst.TaskConst.TASK_TYPE.COMPLETED_GOLD_BATTLE or type == GConst.TaskConst.TASK_TYPE.COMPLETED_MITHRIL_BATTLE or type == GConst.TaskConst.TASK_TYPE.COMPLETED_CHARACTERISTIC_BATTLE then str = totalCount else str = "(" .. count .. "/" .. totalCount .. ")" end return I18N:getText("task", type, "desc", str) end function TaskManager:getTaskTutorialDesc(type, count, totalCount) local cfg = I18N:getConfig("task")[type] if not cfg then return GConst.EMPTY_STRING end local endStr = GConst.EMPTY_STRING if type == GConst.TaskConst.TASK_TYPE.PASS_CHAPTER or type == GConst.TaskConst.TASK_TYPE.COMPLETED_JEWELRY_BATTLE or type == GConst.TaskConst.TASK_TYPE.COMPLETED_GOLD_BATTLE or type == GConst.TaskConst.TASK_TYPE.COMPLETED_MITHRIL_BATTLE or type == GConst.TaskConst.TASK_TYPE.COMPLETED_CHARACTERISTIC_BATTLE then endStr = totalCount else if count then endStr = "(" .. count .. "/" .. totalCount .. ")" else endStr = "(" .. totalCount .. ")" end end local str = I18N:getText("task", type, "tutorial_desc") .. endStr return str end function TaskManager:dealTaskType(taskType, callback, onlyGet) if taskType == GConst.TaskConst.TASK_TYPE.X_KILL_MONSTER then if onlyGet then return taskType else ModuleManager.ChapterManager:calculateFightImmediately(callback) end else if callback and not onlyGet then callback() end end end return TaskManager