diff --git a/src/MaaCore/Task/Interface/CopilotTask.cpp b/src/MaaCore/Task/Interface/CopilotTask.cpp index fb87559898..9f045a07ba 100644 --- a/src/MaaCore/Task/Interface/CopilotTask.cpp +++ b/src/MaaCore/Task/Interface/CopilotTask.cpp @@ -91,9 +91,6 @@ bool asst::CopilotTask::set_params(const json::value& params) Log.error("Not support stage"); return false; } - - bool with_formation = params.get("formation", false); - m_formation_task_ptr->set_enable(with_formation); // 自动补信赖 m_formation_task_ptr->set_add_trust(params.get("add_trust", false)); @@ -135,8 +132,9 @@ bool asst::CopilotTask::set_params(const json::value& params) m_navigate_task_ptr->set_tasks({ m_navigate_name + "@Copilot@StageNavigationBegin" }); m_navigate_task_ptr->set_enable(need_navigate); + bool with_formation = params.get("formation", false); // 关卡名含有"TR"的为教学关,不需要编队 - m_formation_task_ptr->set_enable(m_navigate_name.find("TR") == std::string::npos); + m_formation_task_ptr->set_enable(with_formation && m_navigate_name.find("TR") == std::string::npos); std::string support_unit_name = params.get("support_unit_name", std::string()); m_formation_task_ptr->set_support_unit_name(std::move(support_unit_name)); diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp index dce33060f2..f6cef68b80 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp @@ -16,6 +16,7 @@ #include "Utils/Algorithm.hpp" #include "Utils/ImageIo.hpp" #include "Utils/Logger.hpp" +#include "Vision/Battle/BattlefieldMatcher.h" #include "Vision/Matcher.h" #include "Vision/RegionOCRer.h" @@ -384,10 +385,19 @@ bool asst::BattleProcessTask::check_in_battle(const cv::Mat& reusable, bool weak LogTraceFunction; cv::Mat image = reusable; - if (check_skip_plot_button(image)) { - speed_up(); - return false; - } - return BattleHelper::check_in_battle(image, weak); + if (weak) { + BattlefieldMatcher analyzer(image); + auto result = analyzer.analyze(); + m_in_battle = result.has_value(); + if (m_in_battle && !(*result).pause_button) { + if (check_skip_plot_button(image)) { + speed_up(); + } + } + } + else { + m_in_battle = check_pause_button(image); + } + return m_in_battle; } diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h index 0726cda95a..478388b6b7 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h @@ -39,7 +39,7 @@ namespace asst bool enter_bullet_time(const std::string& name, const Point& location); void sleep_and_do_strategy(unsigned millisecond); - virtual bool check_in_battle(const cv::Mat& reusable = cv::Mat(), bool weak = true); + virtual bool check_in_battle(const cv::Mat& reusable = cv::Mat(), bool weak = true) override; battle::copilot::CombatData m_combat_data; std::unordered_map m_oper_in_group;