378 lines
14 KiB
Lua
378 lines
14 KiB
Lua
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 |