c1_lua/lua/app/module/task/task_manager.lua
2023-05-09 17:41:27 +08:00

382 lines
14 KiB
Lua

local TaskManager = class("TaskManager", BaseModule)
function TaskManager:showTaskMainUI()
UIManager:showUI("app/ui/task/task_main_ui")
end
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