diff --git a/MeoAssistance/include/Assistance.h b/MeoAssistance/include/Assistance.h index 2e033f1e75..b2a7b73636 100644 --- a/MeoAssistance/include/Assistance.h +++ b/MeoAssistance/include/Assistance.h @@ -44,6 +44,7 @@ namespace asst { bool set_param(const std::string& type, const std::string& param, const std::string& value); static constexpr int MatchTaskRetryTimesDefault = 60; + static constexpr int OpenRecruitTaskRetyrTimesDefault = 5; private: static void working_proc(Assistance* p_this); diff --git a/MeoAssistance/include/Task.h b/MeoAssistance/include/Task.h index e437f1a697..1d69420933 100644 --- a/MeoAssistance/include/Task.h +++ b/MeoAssistance/include/Task.h @@ -250,6 +250,6 @@ namespace asst { } private: std::vector m_text_vec; - bool m_need_click; + bool m_need_click = false; }; } diff --git a/MeoAssistance/src/Assistance.cpp b/MeoAssistance/src/Assistance.cpp index 4c83e85257..66d303901f 100644 --- a/MeoAssistance/src/Assistance.cpp +++ b/MeoAssistance/src/Assistance.cpp @@ -187,7 +187,7 @@ void Assistance::start_ocr_test_task(std::vector text_vec, bool nee m_condvar.notify_one(); } -void asst::Assistance::start_open_recruit(const std::vector& required_level, bool set_time) +void Assistance::start_open_recruit(const std::vector& required_level, bool set_time) { DebugTraceFunction; if (!m_thread_idle || !m_inited) @@ -199,6 +199,8 @@ void asst::Assistance::start_open_recruit(const std::vector& required_level auto task_ptr = std::make_shared(task_callback, (void*)this); task_ptr->set_param(required_level, set_time); + task_ptr->set_retry_times(OpenRecruitTaskRetyrTimesDefault); + task_ptr->set_task_chain("OpenRecruit"); m_tasks_queue.emplace(task_ptr); m_thread_idle = false; diff --git a/MeoAssistance/src/Task.cpp b/MeoAssistance/src/Task.cpp index 5607e11cdc..86fcb2fbc9 100644 --- a/MeoAssistance/src/Task.cpp +++ b/MeoAssistance/src/Task.cpp @@ -142,7 +142,12 @@ bool MatchTask::run() m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); return false; } - m_callback(AsstMsg::TaskStart, json::object{ { "task_type", "MatchTask" } }, m_callback_arg); + + json::value task_start_json = json::object{ + { "task_type", "MatchTask" }, + { "task_chain", m_task_chain}, + }; + m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg); Rect rect; auto&& ret = match_image(&rect); @@ -186,7 +191,7 @@ bool MatchTask::run() case MatchTaskType::DoNothing: break; case MatchTaskType::Stop: - m_callback(AsstMsg::TaskStop, json::value(), m_callback_arg); + m_callback(AsstMsg::TaskStop, json::object{ {"task_chain", m_task_chain} }, m_callback_arg); need_stop = true; break; case MatchTaskType::PrintWindow: @@ -231,6 +236,22 @@ bool MatchTask::run() std::optional MatchTask::match_image(Rect* matched_rect) { + // 如果当前仅有一个任务,且这个任务的阈值是0(说明是justreturn的),就不抓图像识别了,直接返回就行 + if (m_cur_tasks_name.size() == 1 + && Configer::get_instance().m_all_tasks_info[m_cur_tasks_name[0]].templ_threshold == 0) { + json::value callback_json; + callback_json["threshold"] = 0.0; + callback_json["algorithm"] = "JustReturn"; + callback_json["rect"] = json::array({ 0, 0, 0, 0 }); + callback_json["name"] = m_cur_tasks_name[0]; + callback_json["algorithm_id"] = static_cast::type>(AlgorithmType::JustReturn); + callback_json["value"] = 0; + + m_callback(AsstMsg::ImageFindResult, callback_json, m_callback_arg); + m_callback(AsstMsg::ImageMatched, callback_json, m_callback_arg); + return m_cur_tasks_name[0]; + } + const cv::Mat& cur_image = get_format_image(); if (cur_image.empty() || cur_image.rows < 100) { return std::nullopt; @@ -246,7 +267,7 @@ std::optional MatchTask::match_image(Rect* matched_rect) json::value callback_json; bool matched = false; - if (algorithm == AlgorithmType::JustReturn) { + if (algorithm == AlgorithmType::JustReturn) { // 加了上面“如果当前仅有一个任务,……”的逻辑,这个if应该走不到了(但还能走到下面的else if),考虑可以删了 callback_json["threshold"] = 0.0; callback_json["algorithm"] = "JustReturn"; matched = true; @@ -334,7 +355,11 @@ bool OpenRecruitTask::run() return false; } - m_callback(AsstMsg::TaskStart, json::object{ { "task_type", "OpenRecruitTask" } }, m_callback_arg); + json::value task_start_json = json::object{ + { "task_type", "OpenRecruitTask" }, + { "task_chain", m_task_chain}, + }; + m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg); /* Find all text */ std::vector