diff --git a/src/MaaCore/Task/Fight/StageNavigationTask.cpp b/src/MaaCore/Task/Fight/StageNavigationTask.cpp index 2f91bad856..382cc34b5e 100644 --- a/src/MaaCore/Task/Fight/StageNavigationTask.cpp +++ b/src/MaaCore/Task/Fight/StageNavigationTask.cpp @@ -1,6 +1,7 @@ #include "StageNavigationTask.h" #include +#include #include "Config/TaskData.h" #include "Controller/Controller.h" @@ -76,7 +77,16 @@ bool asst::StageNavigationTask::_run() LogTraceFunction; if (m_is_directly) { - return ProcessTask(*this, { m_directly_task }).set_retry_times(RetryTimesDefault).run(); + ProcessTask task(*this, { m_directly_task }); + task.set_retry_times(RetryTimesDefault); + bool ret = task.run(); + if (!ret && task.get_last_task_name().empty() && std::ranges::find(m_annihilation_tasks, m_directly_task) != m_annihilation_tasks.end()) { + m_fight_task_ptr->set_enable(false); + return true; + } + else { + return ret; + } } return chapter_wayfinding() && swipe_and_find_stage(); diff --git a/src/MaaCore/Task/Fight/StageNavigationTask.h b/src/MaaCore/Task/Fight/StageNavigationTask.h index 83694e481a..5ebed9aab5 100644 --- a/src/MaaCore/Task/Fight/StageNavigationTask.h +++ b/src/MaaCore/Task/Fight/StageNavigationTask.h @@ -3,6 +3,8 @@ namespace asst { +class ProcessTask; + class StageNavigationTask : public AbstractTask { public: @@ -11,6 +13,11 @@ public: bool set_stage_name(const std::string& stage_name); + void set_fight_task_ptr(std::shared_ptr fight_task_ptr) noexcept + { + m_fight_task_ptr = fight_task_ptr; + }; + protected: virtual bool _run() override; void clear() noexcept; @@ -25,5 +32,10 @@ protected: std::string m_chapter_task; std::string m_difficulty_task; std::string m_stage_code; + std::shared_ptr m_fight_task_ptr = nullptr; + std::array m_annihilation_tasks { "Annihilation", + "Chernobog@Annihilation", + "LungmenOutskirts@Annihilation", + "LungmenDowntown@Annihilation" }; }; } diff --git a/src/MaaCore/Task/Interface/FightTask.cpp b/src/MaaCore/Task/Interface/FightTask.cpp index 835cb7bfc2..4dc40150c1 100644 --- a/src/MaaCore/Task/Interface/FightTask.cpp +++ b/src/MaaCore/Task/Interface/FightTask.cpp @@ -35,6 +35,7 @@ asst::FightTask::FightTask(const AsstCallback& callback, Assistant* inst) : .set_times_limit("EndOfAction", 0) .set_retry_times(5); + m_stage_navigation_task_ptr->set_fight_task_ptr(m_fight_task_ptr); m_stage_navigation_task_ptr->set_enable(false).set_retry_times(0); m_sidestory_reopen_task_ptr->set_enable(false).set_retry_times(0);