From bd6176b25faf94e0f180ab00deb5583ddf67967c Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Sat, 10 May 2025 19:58:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BC=80=E5=A7=8B=E6=88=98=E6=96=97?= =?UTF-8?q?=E5=89=8D=E9=97=AA=E9=80=80=E6=97=A0=E9=99=90=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E8=AF=86=E5=88=AB=EF=BC=8C=E5=85=B3=E5=8D=A1=E5=90=8D=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=94=BE=E5=AE=BD=E8=87=B3=E4=B8=80=E5=88=86=E9=92=9F?= =?UTF-8?q?=20(#12580)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/BattleHelper.cpp | 12 +++++++++++- src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp | 6 +++++- .../Task/Roguelike/RoguelikeBattleTaskPlugin.cpp | 9 +++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 4b365b80ca..18f8740448 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -226,7 +226,9 @@ bool asst::BattleHelper::update_deployment(bool init, const cv::Mat& reusable, b if (init) { AvatarCache.remove_confusing_avatars(); // 移除小龙等不同技能很像的召唤物,防止错误识别 - wait_until_start(false); + if (!wait_until_start(false)) { + return false; + } } cv::Mat image = init || reusable.empty() ? m_inst_helper.ctrler()->get_image() : reusable; @@ -590,8 +592,16 @@ bool asst::BattleHelper::wait_until_start(bool weak) { LogTraceFunction; + constexpr auto timeout_duration = std::chrono::minutes(1); + const auto start_time = std::chrono::steady_clock::now(); + cv::Mat image = m_inst_helper.ctrler()->get_image(); while (!m_inst_helper.need_exit() && !check_in_battle(image, weak)) { + if (std::chrono::steady_clock::now() - start_time > timeout_duration) { + Log.warn("Timeout reached while waiting to start the battle."); + return false; + } + do_strategic_action(image); std::this_thread::yield(); diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp index e7fcc9e4df..9080d05bab 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp @@ -40,7 +40,11 @@ bool asst::BattleProcessTask::_run() return false; } - update_deployment(true); + if (!update_deployment(true)) { + Log.error("update deployment failed"); + return false; + } + to_group(); size_t action_size = get_combat_data().actions.size(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp index 118fda6cc0..5e1080f639 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp @@ -62,7 +62,12 @@ bool asst::RoguelikeBattleTaskPlugin::_run() if (!calc_stage_info()) { return false; } - update_deployment(true); + + if (!update_deployment(true)) { + Log.error("update deployment failed"); + return false; + } + cache_oper_elite_status(); speed_up(); @@ -128,7 +133,7 @@ bool asst::RoguelikeBattleTaskPlugin::calc_stage_info() sleep(stage_name_task_ptr->pre_delay); auto start = std::chrono::steady_clock::now(); - constexpr auto kTimeout = std::chrono::seconds(20); + constexpr auto kTimeout = std::chrono::minutes(1); while (std::chrono::steady_clock::now() - start < kTimeout) { if (need_exit()) {