fix: 线索板上有线索时无法一键放置线索

This commit is contained in:
uye
2026-01-08 01:19:34 +08:00
parent be4a96a06f
commit 2288392dde
3 changed files with 29 additions and 8 deletions

View File

@@ -6,9 +6,11 @@
#include "Controller/Controller.h"
#include "Task/ProcessTask.h"
#include "Utils/Logger.hpp"
#include "Utils/StringMisc.hpp"
#include "Vision/Infrast/InfrastClueVacancyImageAnalyzer.h"
#include "Vision/Matcher.h"
#include "Vision/MultiMatcher.h"
#include "Vision/RegionOCRer.h"
bool asst::InfrastReceptionTask::_run()
{
@@ -156,9 +158,27 @@ bool asst::InfrastReceptionTask::proc_clue_vacancy()
cv::Mat image = ctrler()->get_image();
// 优先检测官服新增的“快捷置入”按钮,如果存在则点击一次执行批量置入,跳过逐个置入流程
// 优先检测官服新增的“快捷置入”按钮,如果存在则尝试根据数字与空位一致时批量置入
if (ProcessTask(*this, { "InfrastClueQuickInsert" }).set_retry_times(3).run()) {
return true;
InfrastClueVacancyImageAnalyzer vacancy_analyzer(image);
vacancy_analyzer.set_to_be_analyzed(clue_suffix);
vacancy_analyzer.analyze();
const int vacancy_cnt = static_cast<int>(vacancy_analyzer.get_vacancy().size());
const auto confirm_task = Task.get("InfrastClueQuickInsertConfirm");
if (vacancy_cnt > 0 && confirm_task != nullptr) {
RegionOCRer ocr_analyzer(image);
ocr_analyzer.set_task_info(confirm_task);
if (auto ocr_res = ocr_analyzer.analyze()) {
int available = 0;
if (utils::chars_to_number(ocr_res->text, available) && available == vacancy_cnt) {
Rect click_rect = confirm_task->roi.move(confirm_task->rect_move);
ctrler()->click(click_rect);
return true;
}
}
}
}
for (const std::string& clue : clue_suffix) {