From d50245fc64f76fa4465a3f90b053f4cdee724cf0 Mon Sep 17 00:00:00 2001 From: status102 Date: Wed, 29 Nov 2023 12:22:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AF=B9=E7=90=86=E6=99=BA=E8=8D=AF?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E7=BB=93=E6=9E=9C=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/Fight/MedicineCounterPlugin.cpp | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/MaaCore/Task/Fight/MedicineCounterPlugin.cpp b/src/MaaCore/Task/Fight/MedicineCounterPlugin.cpp index 98215ca0fe..5590ed3809 100644 --- a/src/MaaCore/Task/Fight/MedicineCounterPlugin.cpp +++ b/src/MaaCore/Task/Fight/MedicineCounterPlugin.cpp @@ -41,12 +41,13 @@ bool asst::MedicineCounterPlugin::_run() return false; } - // 移除超量使用的药品后,再次获取药品数量 - // 如果移除后没有使用任何药品,则单独返回数据;进入插件时应当有使用至少一瓶药 + // 移除超量使用的理智药后,再次获取理智药数量 + // 如果移除后没有使用任何理智药,则单独返回数据;进入插件时应当有使用至少一瓶药 auto refresh_medicine_count = [&]() { image = ctrler()->get_image(); auto count = init_count(image); if (!count) { + // 判断是不是还在使用理智药的页面 Matcher matcher(image); matcher.set_task_info("UseMedicine"); if (!matcher.analyze()) [[unlikely]] { @@ -114,19 +115,21 @@ bool asst::MedicineCounterPlugin::_run() std::optional asst::MedicineCounterPlugin::init_count(cv::Mat image) { int use = 0; - MultiMatcher multiMatcher(image); - multiMatcher.set_task_info("MedicineReduceIcon"); - if (!multiMatcher.analyze()) { + MultiMatcher multi_matcher(image); + multi_matcher.set_task_info("MedicineReduceIcon"); + if (!multi_matcher.analyze()) { Log.error(__FUNCTION__, "medicine reduce icon analyze failed"); return std::nullopt; } std::vector medicines; - auto using_count_task = Task.get("UsingMedicineCount"); - auto inventory_task = Task.get("MedicineInventory"); - auto expiring_task = Task.get("MedicineExpiringTime"); + static const auto& using_count_task = Task.get("UsingMedicineCount"); + static const auto& inventory_task = Task.get("MedicineInventory"); + static const auto& expiring_task = Task.get("MedicineExpiringTime"); - for (const auto& result : multiMatcher.get_result()) { + auto match_result = multi_matcher.get_result(); + sort_by_horizontal_(match_result);// 排序以保证结果为从左到右 + for (const auto& result : match_result) { auto using_rect = result.rect.move(using_count_task->rect_move); auto inventory_rect = result.rect.move(inventory_task->rect_move); auto expiring_rect = result.rect.move(expiring_task->rect_move);