From 33aaae425b93644cd944bfe7dd7dde5cc02b0536 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Mon, 19 Jan 2026 21:12:11 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20FightTask=20=E4=BB=A5=E5=89=BF=E7=81=AD?= =?UTF-8?q?=E4=B8=BA=E7=9B=AE=E6=A0=87=E5=85=B3=E5=8D=A1=E6=97=B6,=20?= =?UTF-8?q?=E5=9C=A8=E7=BB=88=E7=AB=AF=E7=95=8C=E9=9D=A2=E6=89=BE=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=E5=91=A8=E5=89=BF=E7=81=AD=E8=8E=B7=E5=8F=96=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E5=9B=BE=E6=A0=87=E4=B8=8D=E5=86=8D=E4=BB=A5=20False?= =?UTF-8?q?=20=E9=80=80=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/Fight/StageNavigationTask.cpp | 12 +++++++++++- src/MaaCore/Task/Fight/StageNavigationTask.h | 12 ++++++++++++ src/MaaCore/Task/Interface/FightTask.cpp | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) 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);