diff --git a/MeoAssistance/include/Assistance.h b/MeoAssistance/include/Assistance.h index 4cdae8e411..b194ffd2a5 100644 --- a/MeoAssistance/include/Assistance.h +++ b/MeoAssistance/include/Assistance.h @@ -36,17 +36,23 @@ namespace asst { bool print_window(const std::string& filename, bool block = true); - // for debug - bool find_text_and_click(const std::string& text, bool block = true); - // for debug - void find_and_clac_tags(bool need_click = true); + // 计算公开招募,需要当前处在选择公招Tag的页面 + // 参数: + // required_level:需要的等级,最优组合的最低等级,在required_level中,才会进行点击 + // set_time:是否自动设置时间(9小时) + // 返回值: + // std::vector< std::pair < Tags名vector,这个Tags组合可能出的干员组合 > > + std::optional, OperCombs>>> + open_recruit(const std::vector& required_level, bool set_time = true); private: static void working_proc(Assistance* pThis); - // pair cv::Mat get_format_image(); void set_control_scale(int cur_width, int cur_height); + // for debug + bool find_text_and_click(const std::string& text, bool block = true); + std::shared_ptr m_pWindow = nullptr; std::shared_ptr m_pView = nullptr; std::shared_ptr m_pCtrl = nullptr; diff --git a/MeoAssistance/include/AsstAux.h b/MeoAssistance/include/AsstAux.h index a646a9f631..4e0f7075d1 100644 --- a/MeoAssistance/include/AsstAux.h +++ b/MeoAssistance/include/AsstAux.h @@ -46,9 +46,9 @@ namespace asst { return buff; } - static std::string GbkToUtf8(const std::string & gbk_str) + static std::string GbkToUtf8(const std::string& gbk_str) { - const char * src_str = gbk_str.c_str(); + const char* src_str = gbk_str.c_str(); int len = MultiByteToWideChar(CP_ACP, 0, src_str, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); @@ -63,7 +63,7 @@ namespace asst { return strTemp; } - static std::string Utf8ToGbk(const std::string & utf8_str) + static std::string Utf8ToGbk(const std::string& utf8_str) { const char* src_str = utf8_str.c_str(); int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0); @@ -79,4 +79,46 @@ namespace asst { if (szGBK) delete[] szGBK; return strTemp; } + + + template::value>::type> + std::string VectorToString(const std::vector& vector, bool to_gbk = false) { + if (vector.empty()) { + return std::string(); + } + static const std::string inter = " ,"; + std::string str; + for (const T& ele : vector) { + if (to_gbk) { + str += Utf8ToGbk(ele) + inter; + } + else { + str += ele + inter; + } + } + + if (!str.empty()) { + str.erase(str.size() - inter.size(), inter.size()); + } + return str; + } + + template::value>::type> + std::string VectorToString(const std::vector& vector) { + if (vector.empty()) { + return std::string(); + } + static const std::string inter = " ,"; + std::string str; + for (const T& ele : vector) { + str += std::to_string(ele) + inter; + } + + if (!str.empty()) { + str.erase(str.size() - inter.size(), inter.size()); + } + return str; + } } \ No newline at end of file diff --git a/MeoAssistance/include/AsstCaller.h b/MeoAssistance/include/AsstCaller.h index 85894eac10..7c435febd1 100644 --- a/MeoAssistance/include/AsstCaller.h +++ b/MeoAssistance/include/AsstCaller.h @@ -6,14 +6,16 @@ extern "C" { #endif -extern MEOAPI_PORT asst::Assistance* CreateAsst(); -extern MEOAPI_PORT void DestoryAsst(asst::Assistance* p_asst); -extern MEOAPI_PORT bool AsstCatchEmulator(asst::Assistance* p_asst); -extern MEOAPI_PORT void AsstStart(asst::Assistance* p_asst, const char* task); -extern MEOAPI_PORT void AsstStop(asst::Assistance* p_asst); -extern MEOAPI_PORT bool AsstSetParam(asst::Assistance* p_asst, const char* type, const char* param, const char* value); -extern MEOAPI_PORT bool AsstGetParam(asst::Assistance* p_asst, const char* type, const char* param, char * buffer, int buffer_size); -extern MEOAPI_PORT bool CheckVersionUpdate(char * tag_buffer, int tag_bufsize, char * html_url_buffer, int html_bufsize, char * body_buffer, int body_bufsize); +MEOAPI_PORT asst::Assistance* CreateAsst(); +MEOAPI_PORT void DestoryAsst(asst::Assistance* p_asst); +MEOAPI_PORT bool AsstCatchEmulator(asst::Assistance* p_asst); +MEOAPI_PORT void AsstStart(asst::Assistance* p_asst, const char* task); +MEOAPI_PORT void AsstStop(asst::Assistance* p_asst); +MEOAPI_PORT bool AsstSetParam(asst::Assistance* p_asst, const char* type, const char* param, const char* value); +MEOAPI_PORT bool AsstGetParam(asst::Assistance* p_asst, const char* type, const char* param, char * buffer, int buffer_size); +MEOAPI_PORT bool AsstRunOpenRecruit(asst::Assistance* p_asst, const int required_level[], bool set_time, char * result_buffer, int bufsize, int& maybe_level); + +MEOAPI_PORT bool CheckVersionUpdate(char* tag_buffer, int tag_bufsize, char* html_url_buffer, int html_bufsize, char* body_buffer, int body_bufsize); #ifdef __cplusplus } diff --git a/MeoAssistance/include/AsstDef.h b/MeoAssistance/include/AsstDef.h index 42a178745b..b461172509 100644 --- a/MeoAssistance/include/AsstDef.h +++ b/MeoAssistance/include/AsstDef.h @@ -33,7 +33,9 @@ namespace asst { PrintWindow, ClickSelf = 8 | BasicClick, ClickRect = 16 | BasicClick, - ClickRand = 32 | BasicClick + ClickRand = 32 | BasicClick, + Ocr = 64, + OcrAndClick = Ocr | BasicClick }; static bool operator&(const TaskType& lhs, const TaskType& rhs) { @@ -102,15 +104,14 @@ namespace asst { TextArea() = default; TextArea(const TextArea&) = default; TextArea(TextArea&&) = default; - template - TextArea(TextArg&& text_arg, RectArgs &&... rect_args) - : text(std::forward(text_arg)), + template + TextArea(std::string text, RectArgs &&... rect_args) + : text(std::move(text)), rect(std::forward(rect_args)...) { - static_assert(std::is_constructible::value, - "Parameter can't be used to construct a std::string"); static_assert(std::is_constructible::value, "Parameter can't be used to construct a asst::Rect"); } + operator std::string() const { return text; } std::string text; Rect rect; }; @@ -158,6 +159,7 @@ namespace asst { asst::Rect specific_area; // 指定区域,目前仅针对ClickRect任务有用,会点这个区域 int pre_delay = 0; // 执行该任务前的延时 int rear_delay = 0; // 执行该任务后的延时 + int retry_times = INT_MAX; // 未找到图像时的重试次数 }; struct Options { @@ -188,5 +190,6 @@ namespace asst { std::vector opers; int max_level = 0; int min_level = 0; + bool has_level_1 = false; // 是否有一星干员 }; } \ No newline at end of file diff --git a/MeoAssistance/include/Logger.hpp b/MeoAssistance/include/Logger.hpp index 961923673a..77626b5bc3 100644 --- a/MeoAssistance/include/Logger.hpp +++ b/MeoAssistance/include/Logger.hpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "AsstAux.h" #include "AsstPort.h" diff --git a/MeoAssistance/src/Assistance.cpp b/MeoAssistance/src/Assistance.cpp index 808ac02e37..0b7003e4ff 100644 --- a/MeoAssistance/src/Assistance.cpp +++ b/MeoAssistance/src/Assistance.cpp @@ -198,7 +198,8 @@ bool asst::Assistance::find_text_and_click(const std::string& text, bool block) return m_pCtrl->click(result.value()); } -void asst::Assistance::find_and_clac_tags(bool need_click) +std::optional, OperCombs>>> + asst::Assistance::open_recruit(const std::vector& required_level, bool set_time) { DebugTraceFunction; @@ -206,44 +207,39 @@ void asst::Assistance::find_and_clac_tags(bool need_click) const cv::Mat& image = get_format_image(); set_control_scale(image.cols, image.rows); + lock.unlock(); // 后面的计算耗时太长,先解锁 - lock.unlock(); - - if (need_click) { + if (set_time) { start("RecruitTime"); } std::vector