From 46d0fd2e5c3f33196e5954eda631e03e69a3f1b2 Mon Sep 17 00:00:00 2001 From: travellerse <58685479+travellerse@users.noreply.github.com> Date: Sat, 22 Nov 2025 20:57:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E5=B7=A6=E4=BE=A7?= =?UTF-8?q?=E9=80=9A=E5=AE=9D=E8=A7=A3=E6=9E=90=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=20(#14820)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 处理左侧通宝解析失败的情况 * fix: 更新调试图像保存路径至 debug/roguelike/coppers/unknown 目录 * fix: 优化通宝处理逻辑 * fix: 限制一下变量作用域 * fix: 移除ASST_DEBUG --- .../protocol/integrated-strategy-schema.md | 2 +- .../JieGarden/RoguelikeCoppersTaskPlugin.cpp | 33 ++++++++++++++----- .../JieGarden/RoguelikeCoppersTaskPlugin.h | 3 +- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/docs/zh-cn/protocol/integrated-strategy-schema.md b/docs/zh-cn/protocol/integrated-strategy-schema.md index 0f86ca925a..c9a7723c9a 100644 --- a/docs/zh-cn/protocol/integrated-strategy-schema.md +++ b/docs/zh-cn/protocol/integrated-strategy-schema.md @@ -835,7 +835,7 @@ MAA 使用以下方法识别和处理通宝: ::: info 注意 -- 如果 OCR 识别的通宝名称在配置文件中未找到,MAA 会保存调试图像到 `debug/roguelikeCoppers/` 目录,以供排查 +- 如果 OCR 识别的通宝名称在配置文件中未找到,MAA 会保存调试图像到 `debug/roguelike/coppers/unknown` 目录,以供排查 ::: diff --git a/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.cpp index 9dc8d2cc7f..07601943d7 100644 --- a/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.cpp @@ -197,10 +197,24 @@ bool asst::RoguelikeCoppersTaskPlugin::handle_exchange_mode() } // 处理左侧列的检测结果 - for (size_t row = 0; row < left_detections.size(); ++row) { - const auto& detection = left_detections[row]; + if (left_detections.size() != 1) { + Log.error( + __FUNCTION__, + std::format("| expected exactly one copper in left column, got {}", left_detections.size())); - Log.info(__FUNCTION__, std::format("| found copper: {} at ({},{}) is_cast: {}", detection.name, 0, row, false)); +#ifdef ASST_DEBUG + for (const auto& detection : left_detections) { + draw_detection_debug(image_draw, detection, cv::Scalar(0, 0, 255)); + } + save_debug_image(image_draw, "left_column_unexpected_count"); +#endif + return false; + } + + { + const auto& detection = left_detections[0]; + + Log.info(__FUNCTION__, std::format("| found copper: {} at ({},0) is_cast: {}", detection.name, 0, false)); #ifdef ASST_DEBUG // 调试模式下绘制检测结果(红色表示新拾取的通宝) @@ -208,11 +222,10 @@ bool asst::RoguelikeCoppersTaskPlugin::handle_exchange_mode() #endif // 创建新拾取的通宝对象 - auto copper_opt = - create_copper_from_name(detection.name, 0, static_cast(row + 1), false, detection.name_roi); + auto copper_opt = create_copper_from_name(detection.name, 0, 1, false, detection.name_roi); if (!copper_opt) { - Log.error(__FUNCTION__, std::format("| failed to create copper at ({},{})", 0, row)); - continue; + Log.error(__FUNCTION__, "| failed to create copper at (0,0)"); + return false; } auto copper = std::move(*copper_opt); @@ -220,6 +233,10 @@ bool asst::RoguelikeCoppersTaskPlugin::handle_exchange_mode() copper.type = RoguelikeCoppersConfig::get_type_from_template(detection.templ_name); m_new_copper = std::move(copper); + +#ifdef ASST_DEBUG + save_debug_image(image_draw, "new_copper"); +#endif } // ================================================= @@ -543,7 +560,6 @@ std::optional asst::RoguelikeCoppersTaskPlugin::create_co return std::nullopt; } -#ifdef ASST_DEBUG // 调试绘制辅助函数:在图像上绘制检测结果 void asst::RoguelikeCoppersTaskPlugin::draw_detection_debug( cv::Mat& image, @@ -603,4 +619,3 @@ void asst::RoguelikeCoppersTaskPlugin::save_debug_image(const cv::Mat& image, co Log.error(__FUNCTION__, "| failed to save debug image:", e.what()); } } -#endif diff --git a/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.h b/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.h index b4a205f730..886f83f167 100644 --- a/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/JieGarden/RoguelikeCoppersTaskPlugin.h @@ -66,13 +66,12 @@ private: const Rect& pos = Rect() // 位置信息,用于调试 ) const; -#ifdef ASST_DEBUG // 调试绘制辅助函数,在图像上绘制检测结果 void draw_detection_debug( cv::Mat& image, const RoguelikeCoppersAnalyzer::CopperDetection& detection, const cv::Scalar& color) const; -#endif + // 保存调试图像到文件 void save_debug_image(const cv::Mat& image, const std::string& suffix) const;