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; }