diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 27ed7956c2..2348635f41 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -384,20 +384,25 @@ bool asst::BattleHelper::check_pause_button(const cv::Mat& reusable) return ret; } -bool asst::BattleHelper::check_in_battle(const cv::Mat& reusable) +bool asst::BattleHelper::check_in_battle(const cv::Mat& reusable, bool weak) { cv::Mat image = reusable.empty() ? m_inst_helper.ctrler()->get_image() : reusable; - BattleImageAnalyzer analyzer(image); - m_in_battle = analyzer.analyze(); + if (weak) { + m_in_battle = check_pause_button(image); + } + else { + BattleImageAnalyzer analyzer(image); + m_in_battle = analyzer.analyze(); + } return m_in_battle; } -bool asst::BattleHelper::wait_until_start() +bool asst::BattleHelper::wait_until_start(bool weak) { LogTraceFunction; cv::Mat image = m_inst_helper.ctrler()->get_image(); - while (!m_inst_helper.need_exit() && !check_pause_button(image)) { + while (!m_inst_helper.need_exit() && !check_in_battle(image, weak)) { do_strategic_action(image); std::this_thread::yield(); @@ -406,12 +411,12 @@ bool asst::BattleHelper::wait_until_start() return true; } -bool asst::BattleHelper::wait_until_end() +bool asst::BattleHelper::wait_until_end(bool weak) { LogTraceFunction; cv::Mat image = m_inst_helper.ctrler()->get_image(); - while (!m_inst_helper.need_exit() && check_in_battle(image)) { + while (!m_inst_helper.need_exit() && check_in_battle(image, weak)) { do_strategic_action(image); std::this_thread::yield(); @@ -591,7 +596,7 @@ bool asst::BattleHelper::move_camera(const std::pair& delta) // 还没转场的时候 if (m_kills != 0) { - wait_until_end(); + wait_until_end(true); } m_kills = 0; diff --git a/src/MaaCore/Task/BattleHelper.h b/src/MaaCore/Task/BattleHelper.h index 5c389e60c3..9e823e1a75 100644 --- a/src/MaaCore/Task/BattleHelper.h +++ b/src/MaaCore/Task/BattleHelper.h @@ -45,9 +45,9 @@ namespace asst bool use_skill(const std::string& name, bool keep_waiting = true); bool use_skill(const Point& loc, bool keep_waiting = true); bool check_pause_button(const cv::Mat& reusable = cv::Mat()); - bool check_in_battle(const cv::Mat& reusable = cv::Mat()); - virtual bool wait_until_start(); - bool wait_until_end(); + bool check_in_battle(const cv::Mat& reusable = cv::Mat(), bool weak = false); + virtual bool wait_until_start(bool weak = false); + bool wait_until_end(bool weak = false); bool use_all_ready_skill(const cv::Mat& reusable = cv::Mat()); bool check_and_use_skill(const std::string& name, const cv::Mat& reusable = cv::Mat()); bool check_and_use_skill(const Point& loc, const cv::Mat& reusable = cv::Mat()); diff --git a/src/MaaCore/Task/SSS/SSSBattleProcessTask.cpp b/src/MaaCore/Task/SSS/SSSBattleProcessTask.cpp index 384f645458..2e7e915f9b 100644 --- a/src/MaaCore/Task/SSS/SSSBattleProcessTask.cpp +++ b/src/MaaCore/Task/SSS/SSSBattleProcessTask.cpp @@ -124,11 +124,12 @@ bool asst::SSSBattleProcessTask::do_strategic_action(const cv::Mat& reusable) return true; } -bool asst::SSSBattleProcessTask::wait_until_start() +bool asst::SSSBattleProcessTask::wait_until_start(bool weak) { LogTraceFunction; - return ProcessTask(*this, { "SSSFightDirectly" }).set_retry_times(300).run(); + return ProcessTask(*this, { "SSSFightDirectly" }).set_retry_times(300).run() && + BattleProcessTask::wait_until_start(weak); } bool asst::SSSBattleProcessTask::check_if_start_over(const battle::copilot::Action& action) diff --git a/src/MaaCore/Task/SSS/SSSBattleProcessTask.h b/src/MaaCore/Task/SSS/SSSBattleProcessTask.h index 0df5ff24e0..dda26788b4 100644 --- a/src/MaaCore/Task/SSS/SSSBattleProcessTask.h +++ b/src/MaaCore/Task/SSS/SSSBattleProcessTask.h @@ -17,7 +17,7 @@ namespace asst virtual battle::copilot::CombatData& get_combat_data() override { return m_sss_combat_data; } virtual const std::string oper_name_ocr_task_name() const noexcept override { return "SSSBattleOperName"; } virtual bool need_to_wait_until_end() const noexcept override { return true; } - virtual bool wait_until_start() override; + virtual bool wait_until_start(bool weak = false) override; bool check_if_start_over(const battle::copilot::Action& action); bool draw_card(bool with_retry = true);