From b2cde7665a75265f18accf97228f5925e2d4fa8a Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 30 Jul 2022 00:33:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=B9=B2=E5=91=98=E4=B8=8D=E9=80=89=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=B8=B4=E6=97=B6=E6=8B=9B?= =?UTF-8?q?=E5=8B=9F=E7=9A=84=E7=B2=BE=E4=BA=8C=E5=B9=B2=E5=91=98=E4=B8=8D?= =?UTF-8?q?=E9=80=89=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AsstBattleDef.h | 1 + src/MeoAssistant/OcrImageAnalyzer.cpp | 8 +++++++- src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp | 5 +++-- src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp | 6 ++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/MeoAssistant/AsstBattleDef.h b/src/MeoAssistant/AsstBattleDef.h index f78d860a7d..48d3df0921 100644 --- a/src/MeoAssistant/AsstBattleDef.h +++ b/src/MeoAssistant/AsstBattleDef.h @@ -126,6 +126,7 @@ namespace asst Rect rect; int elite = 0; int level = 0; + bool required = false; }; using BattleAttackRange = std::vector; diff --git a/src/MeoAssistant/OcrImageAnalyzer.cpp b/src/MeoAssistant/OcrImageAnalyzer.cpp index ba7b3be165..c59b3085d3 100644 --- a/src/MeoAssistant/OcrImageAnalyzer.cpp +++ b/src/MeoAssistant/OcrImageAnalyzer.cpp @@ -213,8 +213,14 @@ void asst::OcrImageAnalyzer::sort_result_by_required() m_req_cache.emplace(m_required.at(i), i + 1); } + // 不在 m_required 中的将被排在最后 std::sort(get_result().begin(), get_result().end(), [&m_req_cache](const auto& lhs, const auto& rhs) -> bool { - return m_req_cache[lhs.text] < m_req_cache[rhs.text]; + size_t lvalue = m_req_cache[lhs.text]; + size_t rvalue = m_req_cache[rhs.text]; + if (lvalue == 0) { + return false; + } + return lvalue < rvalue; }); } diff --git a/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp b/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp index 054b99dd06..3351748ad9 100644 --- a/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp +++ b/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp @@ -15,12 +15,12 @@ bool asst::RoguelikeRecruitImageAnalyzer::analyze() analyzer.set_replace( Task.get("CharsNameOcrReplace")->replace_map); - analyzer.set_required(Resrc.roguelike_recruit().get_oper_order()); - if (!analyzer.analyze()) { return false; } + const auto& order = Resrc.roguelike_recruit().get_oper_order(); + analyzer.set_required(order); analyzer.sort_result_by_required(); for (const auto& [_, rect, name] : analyzer.get_result()) { @@ -32,6 +32,7 @@ bool asst::RoguelikeRecruitImageAnalyzer::analyze() info.name = name; info.elite = elite; info.level = level; + info.required = std::find(order.cbegin(), order.cend(), name) != order.cend(); Log.info(__FUNCTION__, name, elite, level, rect.to_string()); m_result.emplace_back(std::move(info)); diff --git a/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp b/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp index 5a1a540894..b6c6a15f81 100644 --- a/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeRecruitTaskPlugin.cpp @@ -57,6 +57,9 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() if (!recruited) { for (const auto& info : oper_list) { + if (!info.required) { + continue; + } // 拿个精一 50 以上的 if (info.elite == 0 || (info.elite == 1 && info.level < 50)) { @@ -71,6 +74,9 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() Log.info("All are lower"); // 随便招个精一的 for (const auto& info : oper_list) { + if (!info.required) { + continue; + } if (info.elite == 0) { continue; }