diff --git a/resource/tasks.json b/resource/tasks.json index 22f596d1dd..37630ab9b5 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -1121,7 +1121,6 @@ "rearDelay": 1000 }, "InfrastConfirmButton": { - "algorithm": "justReturn", "action": "clickRect", "specificRect": [ 1105, @@ -1129,7 +1128,20 @@ 150, 40 ], - "rearDelay": 1000 + "rearDelay": 500, + "Doc": "这个任务复用了,上半部分用来检测确认按钮点击成功没;下部部分用来点击", + "algorithm": "ocrDetect", + "cache": false, + "text": [ + "正在提交", + "反馈至神经" + ], + "roi": [ + 700, + 640, + 300, + 80 + ] }, "InfrastBottomLeftTab": { "algorithm": "justReturn", @@ -1146,7 +1158,7 @@ "template": "DormConfirm.png", "action": "clickSelf", "cache": false, - "rearDelay": 2000 + "rearDelay": 1000 }, "InfrastEnterFacility": { "algorithm": "justReturn", diff --git a/src/MeoAssistance/InfrastAbstractTask.cpp b/src/MeoAssistance/InfrastAbstractTask.cpp index 2bf91095a0..ad238e44b7 100644 --- a/src/MeoAssistance/InfrastAbstractTask.cpp +++ b/src/MeoAssistance/InfrastAbstractTask.cpp @@ -87,25 +87,42 @@ void asst::InfrastAbstractTask::await_swipe() sleep(extra_delay); } -void asst::InfrastAbstractTask::click_bottomleft_tab() +bool asst::InfrastAbstractTask::click_bottomleft_tab() { const auto task_ptr = resource.task().task_ptr("InfrastBottomLeftTab"); ctrler.click(task_ptr->specific_rect); sleep(task_ptr->rear_delay); + return true; } -void asst::InfrastAbstractTask::click_clear_button() +bool asst::InfrastAbstractTask::click_clear_button() { const auto task_ptr = resource.task().task_ptr("InfrastClearButton"); ctrler.click(task_ptr->specific_rect); sleep(task_ptr->rear_delay); + return true; } -void asst::InfrastAbstractTask::click_confirm_button() +bool asst::InfrastAbstractTask::click_confirm_button() { - const auto task_ptr = resource.task().task_ptr("InfrastConfirmButton"); + const auto task_ptr = std::dynamic_pointer_cast( + resource.task().task_ptr("InfrastConfirmButton")); ctrler.click(task_ptr->specific_rect); sleep(task_ptr->rear_delay); + + // 识别“正在提交反馈至神经”,如果网不好一直确认不了,就多等一会 + OcrImageAnalyzer analyzer; + analyzer.set_task_info(*task_ptr); + for (int i = 0; i != m_retry_times; ++i) { + const auto& image = ctrler.get_image(); + analyzer.set_image(image); + if (!analyzer.analyze()) { + sleep(task_ptr->rear_delay); + return true; + } + sleep(task_ptr->rear_delay); + } + return false; } void asst::InfrastAbstractTask::sync_swipe_of_operlist(bool reverse) diff --git a/src/MeoAssistance/InfrastAbstractTask.h b/src/MeoAssistance/InfrastAbstractTask.h index a6ebae658d..9def69c895 100644 --- a/src/MeoAssistance/InfrastAbstractTask.h +++ b/src/MeoAssistance/InfrastAbstractTask.h @@ -18,9 +18,9 @@ namespace asst { virtual void async_swipe_of_operlist(bool reverse = false); virtual void await_swipe(); - virtual void click_bottomleft_tab(); // 点击进入设施后,左下角的tab(我也不知道这玩意该叫啥) - virtual void click_clear_button(); // 点击干员选择页面的“清空选择”按钮 - virtual void click_confirm_button(); // 点击干员选择页面的“确认”按钮 + virtual bool click_bottomleft_tab(); // 点击进入设施后,左下角的tab(我也不知道这玩意该叫啥) + virtual bool click_clear_button(); // 点击干员选择页面的“清空选择”按钮 + virtual bool click_confirm_button(); // 点击干员选择页面的“确认”按钮 int m_last_swipe_id = 0; }; diff --git a/src/MeoAssistance/InfrastDormTask.cpp b/src/MeoAssistance/InfrastDormTask.cpp index ca36efa196..44c6438f6f 100644 --- a/src/MeoAssistance/InfrastDormTask.cpp +++ b/src/MeoAssistance/InfrastDormTask.cpp @@ -1,6 +1,7 @@ #include "InfrastDormTask.h" #include "MatchImageAnalyzer.h" +#include "OcrImageAnalyzer.h" #include "InfrastMoodImageAnalyzer.h" #include "Resource.h" #include "Controller.h" @@ -72,21 +73,35 @@ bool asst::InfrastDormTask::run() return true; } -void asst::InfrastDormTask::click_confirm_button() +bool asst::InfrastDormTask::click_confirm_button() { - InfrastAbstractTask::click_confirm_button(); + const auto task_ptr = std::dynamic_pointer_cast( + resource.task().task_ptr("InfrastConfirmButton")); + ctrler.click(task_ptr->specific_rect); + sleep(task_ptr->rear_delay); // 宿舍在把正在工作的干员换下来的时候,会有个二次确认的按钮 const auto& image = ctrler.get_image(); MatchImageAnalyzer cfm_analyzer(image); - - const auto task_ptr = std::dynamic_pointer_cast( + const auto sec_cfm_task_ptr = std::dynamic_pointer_cast( resource.task().task_ptr("InfrastDormConfirmButton")); - - cfm_analyzer.set_task_info(*task_ptr); - if (!cfm_analyzer.analyze()) { - return; + cfm_analyzer.set_task_info(*sec_cfm_task_ptr); + if (cfm_analyzer.analyze()) { + ctrler.click(cfm_analyzer.get_result().rect); + sleep(sec_cfm_task_ptr->rear_delay); } - ctrler.click(cfm_analyzer.get_result().rect); - sleep(task_ptr->rear_delay); + + // 识别“正在提交反馈至神经”,如果网不好一直确认不了,就多等一会 + OcrImageAnalyzer analyzer; + analyzer.set_task_info(*task_ptr); + for (int i = 0; i != m_retry_times; ++i) { + const auto& image = ctrler.get_image(); + analyzer.set_image(image); + if (!analyzer.analyze()) { + sleep(sec_cfm_task_ptr->rear_delay); + return true; + } + sleep(sec_cfm_task_ptr->rear_delay); + } + return false; } \ No newline at end of file diff --git a/src/MeoAssistance/InfrastDormTask.h b/src/MeoAssistance/InfrastDormTask.h index 7f6dd969a4..7d0098168a 100644 --- a/src/MeoAssistance/InfrastDormTask.h +++ b/src/MeoAssistance/InfrastDormTask.h @@ -16,7 +16,7 @@ namespace asst { const static std::string FacilityName; const static int MaxNumOfOpers = 5; private: - virtual void click_confirm_button() override; + virtual bool click_confirm_button() override; int m_cur_dorm_index = 0; int m_max_num_of_dorm = 4;