local DungeonRuneManager = class("DungeonRuneManager", BaseModule) function DungeonRuneManager:showMainUI() UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_main_ui") end function DungeonRuneManager:showFightUI(id) local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) if not runeData:canFight(id) then GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.PASS_REQUIRE)) return end local params = {id = id} local isBoss = runeData:isBossChapter(id) if isBoss then UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_boss_fight_ui", params) else UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_fight_ui", params) end end function DungeonRuneManager:showTaskUI(id) local params = {id = id} UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_task_ui", params) end function DungeonRuneManager:showRebirthUI(adCallback, closeCallback, isHpOver) UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_rebirth_ui",{adCallback = adCallback, refuseCallback = closeCallback, isHpOver = isHpOver}) end function DungeonRuneManager:reqFight(id) local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) if not runeData:canFight(id) then GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.PASS_REQUIRE)) return end -- local passed = runeData:passedChapter(id) -- if not passed and not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GLOD_WING, 1, true) then -- return -- end -- local heroes = {} -- local formation = DataManager.FormationData:getDungeonRuneFormation() -- for matchType, heroId in pairs(formation) do -- if heroId > 0 then -- table.insert(heroes, heroId) -- end -- end -- self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeStartReq, {id = id, heroes = heroes}, {}, self.rspFight, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_START) self:rspFight({err_code = GConst.ERROR_STR.SUCCESS, reqData = {id = id}}) end function DungeonRuneManager:rspFight(result) if result.err_code == GConst.ERROR_STR.SUCCESS then if not result.reqData then return end local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) runeData:setCurFightChapterId(result.reqData.id) local params = { atkFormation = {} } local formation = DataManager.FormationData:getDungeonRuneFormation() for elementType, heroId in pairs(formation) do local heroEntity = DataManager.HeroData:getHeroById(heroId) if heroEntity then params.atkFormation[elementType] = heroEntity end end ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, params, function() UIManager:closeAllUI() ModuleManager.MaincityManager:showMainCityUI() self:showMainUI() end) end end function DungeonRuneManager:reqFightSettlement(chapterId, combatReport, taskProgress, remainRound) local parmas = { id = chapterId, win = combatReport.victory, task_stat = taskProgress, combatReport = combatReport, remainRound = remainRound, } self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeSettlementReq, parmas, {}, self.rspFightSettlement, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_SETTLEMENT) end function DungeonRuneManager:rspFightSettlement(result) if result.err_code == GConst.ERROR_STR.SUCCESS then local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) local passId = runeData:getPassedMaxId() if result.reqData then if result.reqData.win then runeData:updatePassedMaxId(result.reqData.id, result.max_id) runeData:updatePassRound(result.reqData.id, result.reqData.task_stat[GConst.BattleConst.BATTLE_TASK_FIELD.TOTAL_TURN] or 0) end ModuleManager.BattleManager:showBattleRuneResultUI(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, result.rewards, result.reqData.combatReport, result.reqData.remainRound) end if passId ~= runeData:getPassedMaxId() then local data = {} data.dungeon_progress = DataManager.DungeonData:getDungeonBIStr() CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(data) end if result.reqData then local taskStat = result.reqData.task_stat if taskStat then ModuleManager.TaskManager:addFightTaskProgress(taskStat) end end runeData:setDirty() end end function DungeonRuneManager:reqSweep(id) if not GFunc.checkCost(GConst.ItemConst.ITEM_ID_SLIVER_WING, 1, true) then return end local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) if not runeData:canSweep(id) then return end self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeFarmReq, {chapter_weapon_id = id}, {}, self.rspSweep, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_SWEEP) end function DungeonRuneManager:rspSweep(result) if result.err_code == GConst.ERROR_STR.SUCCESS then GFunc.showRewardBox(result.rewards) local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) runeData:setDirty() end end function DungeonRuneManager:reqRebirth(isHpOver) self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneAdReq, {}, {}, self.rspRebirth) end function DungeonRuneManager:rspRebirth(result) if result.err_code == GConst.ERROR_STR.SUCCESS then EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BATTLE_REBIRTH) end end function DungeonRuneManager:reqFormation(formation) if not DataManager.FormationData:formationIsFull(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE) then GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8)) return end local heroes = {} for matchType, heroId in pairs(formation) do if heroId and heroId > 0 then table.insert(heroes, heroId) end end local params = { heroes = heroes } self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeHeroesReq, params, {}, self.rspFormation) end function DungeonRuneManager:rspFormation(result) if result.err_code == GConst.ERROR_STR.SUCCESS then EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.FORMATION_CHANGE, {type = GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE}) end end function DungeonRuneManager:getTaskStatus(battleControllerRune, taskInfo) local taskProgress = {} for index, condition in ipairs(taskInfo) do local progress = battleControllerRune:getRuneTaskNumByType(condition) if progress then taskProgress[condition[1]] = { progress = progress, totalProgress = condition[3], over = progress >= condition[3] } end end return taskProgress end function DungeonRuneManager:reqBuySliverWing(count) if not count then return end self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneBuySliverReq, {buy_count = count}, {}, self.rspBuySliverWing, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_BUY_WING) end function DungeonRuneManager:rspBuySliverWing(result) if result.err_code == GConst.ERROR_STR.SUCCESS then GFunc.showRewardBox(result.rewards) if result.reqData then local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN) runeData:addSliverWingBuyCount(result.reqData.buy_count) end end end return DungeonRuneManager