From a372a21acc2736c049bb8ef551e172ebc79f193c Mon Sep 17 00:00:00 2001 From: MistEO Date: Mon, 1 Nov 2021 23:30:41 +0800 Subject: [PATCH] =?UTF-8?q?perf.=E4=B8=BA=E6=BB=91=E5=8A=A8=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=B9=B2=E5=91=98=E5=A2=9E=E5=8A=A0=E5=AE=B9=E9=94=99?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 2 +- src/MeoAssistance/InfrastOfficeTask.cpp | 38 ++++++++++------- src/MeoAssistance/InfrastPowerTask.cpp | 47 ++++++++++++--------- src/MeoAssistance/InfrastProductionTask.cpp | 42 ++++++++++++++---- src/MeoAssistance/InfrastReceptionTask.cpp | 22 ++++++---- 5 files changed, 97 insertions(+), 54 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index db86a52161..3ea7564dbf 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -905,7 +905,7 @@ 300 ], "preDelay": 1000, - "rearDelay": 1000, + "rearDelay": 300, "Doc": "这里的preDelay作为滑动duration使用,rearDelay作为滑动额外延时使用" }, "InfrastOperListSwipeEnd": { diff --git a/src/MeoAssistance/InfrastOfficeTask.cpp b/src/MeoAssistance/InfrastOfficeTask.cpp index 0407b85471..8c6b21ca9e 100644 --- a/src/MeoAssistance/InfrastOfficeTask.cpp +++ b/src/MeoAssistance/InfrastOfficeTask.cpp @@ -18,26 +18,32 @@ bool asst::InfrastOfficeTask::run() swipe_to_the_right_of_main_ui(); enter_facility(FacilityName, 0); - click_bottomleft_tab(); - swipe_to_the_left_of_operlist(); - opers_detect_with_swipe(); - swipe_to_the_left_of_operlist(); + constexpr int retry_times = 1; + for (int i = 0; i <= retry_times; ++i) { + swipe_to_the_left_of_operlist(); + opers_detect_with_swipe(); + swipe_to_the_left_of_operlist(); - auto find_iter = std::find_if(m_all_available_opers.begin(), m_all_available_opers.end(), - [&](const InfrastOperSkillInfo& info) -> bool { - return info.selected; - }); - // 如果之前有干员在,那就不换人,直接退出办公室 - if (find_iter != m_all_available_opers.end()) { - m_all_available_opers.erase(find_iter); + auto find_iter = std::find_if(m_all_available_opers.begin(), m_all_available_opers.end(), + [&](const InfrastOperSkillInfo& info) -> bool { + return info.selected; + }); + // 如果之前有干员在,那就不换人,直接退出办公室 + if (find_iter != m_all_available_opers.end()) { + m_all_available_opers.erase(find_iter); + } + else { + optimal_calc(); + bool ret = opers_choose(); + if (!ret) { + m_all_available_opers.clear(); + continue; + } + } + break; } - else { - optimal_calc(); - opers_choose(); - } - click_confirm_button(); click_return_button(); diff --git a/src/MeoAssistance/InfrastPowerTask.cpp b/src/MeoAssistance/InfrastPowerTask.cpp index b7887d603b..87b8ad0805 100644 --- a/src/MeoAssistance/InfrastPowerTask.cpp +++ b/src/MeoAssistance/InfrastPowerTask.cpp @@ -24,29 +24,36 @@ bool asst::InfrastPowerTask::run() if (!enter_oper_list_page()) { return false; } - swipe_to_the_left_of_operlist(); - - if (m_all_available_opers.empty()) { - opers_detect_with_swipe(); + constexpr int retry_times = 1; + for (int i = 0; i <= retry_times; ++i) { swipe_to_the_left_of_operlist(); - } - else { - opers_detect(); - } - auto find_iter = std::find_if(m_all_available_opers.begin(), m_all_available_opers.end(), - [&](const InfrastOperSkillInfo& info) -> bool { - return info.selected; - }); - // 如果之前有干员在,那就不换人,直接退出当前发电站 - if (find_iter != m_all_available_opers.end()) { - m_all_available_opers.erase(find_iter); - } - else { - optimal_calc(); - opers_choose(); - } + if (m_all_available_opers.empty()) { + opers_detect_with_swipe(); + swipe_to_the_left_of_operlist(); + } + else { + opers_detect(); + } + auto find_iter = std::find_if(m_all_available_opers.begin(), m_all_available_opers.end(), + [&](const InfrastOperSkillInfo& info) -> bool { + return info.selected; + }); + // 如果之前有干员在,那就不换人,直接退出当前发电站 + if (find_iter != m_all_available_opers.end()) { + m_all_available_opers.erase(find_iter); + } + else { + optimal_calc(); + bool ret = opers_choose(); + if (!ret) { + m_all_available_opers.clear(); + continue; + } + } + break; + } click_confirm_button(); click_return_button(); } diff --git a/src/MeoAssistance/InfrastProductionTask.cpp b/src/MeoAssistance/InfrastProductionTask.cpp index a0575710cc..1b432f2539 100644 --- a/src/MeoAssistance/InfrastProductionTask.cpp +++ b/src/MeoAssistance/InfrastProductionTask.cpp @@ -74,18 +74,27 @@ bool asst::InfrastProductionTask::shift_facility_list() /* 进入干员选择页面 */ ctrler.click(add_button); sleep(add_task_ptr->rear_delay); - click_clear_button(); - swipe_to_the_left_of_operlist(); - if (m_all_available_opers.empty()) { - opers_detect_with_swipe(); + constexpr int retry_times = 1; + for (int i = 0; i <= retry_times; ++i) { + click_clear_button(); swipe_to_the_left_of_operlist(); + + if (m_all_available_opers.empty()) { + opers_detect_with_swipe(); + swipe_to_the_left_of_operlist(); + } + else { + opers_detect(); + } + optimal_calc(); + bool ret = opers_choose(); + if (!ret) { + m_all_available_opers.clear(); + continue; + } + break; } - else { - opers_detect(); - } - optimal_calc(); - opers_choose(); click_confirm_button(); } return true; @@ -313,6 +322,7 @@ bool asst::InfrastProductionTask::optimal_calc() bool asst::InfrastProductionTask::opers_choose() { + bool has_error = false; while (true) { const auto& image = ctrler.get_image(); @@ -326,6 +336,20 @@ bool asst::InfrastProductionTask::opers_choose() auto cur_all_info = skills_analyzer.get_result(); + // 这个情况一般是滑动/识别出错了,把所有的干员都滑过去了 + if (cur_all_info.empty()) { + if (!has_error) { + has_error = true; + // 倒回去再来一遍 + swipe_to_the_left_of_operlist(); + continue; + } + else { + // 如果已经出过一次错了,那就可能不是opers_choose出错,而是之前的opers_detect出错了 + return false; + } + } + std::vector selected_hash; for (auto opt_iter = m_optimal_opers.begin(); opt_iter != m_optimal_opers.end();) { auto find_iter = std::find_if(cur_all_info.cbegin(), cur_all_info.cend(), diff --git a/src/MeoAssistance/InfrastReceptionTask.cpp b/src/MeoAssistance/InfrastReceptionTask.cpp index f5d7f7a59e..c4ea58a56b 100644 --- a/src/MeoAssistance/InfrastReceptionTask.cpp +++ b/src/MeoAssistance/InfrastReceptionTask.cpp @@ -151,17 +151,23 @@ bool asst::InfrastReceptionTask::shift() ctrler.click(add_analyzer.get_result().rect); sleep(add_task_ptr->rear_delay); - swipe_to_the_left_of_operlist(); - click_clear_button(); + constexpr int retry_times = 1; + for (int i = 0; i <= retry_times; ++i) { + swipe_to_the_left_of_operlist(); + click_clear_button(); - opers_detect_with_swipe(); - swipe_to_the_left_of_operlist(); - - optimal_calc(); - opers_choose(); + opers_detect_with_swipe(); + swipe_to_the_left_of_operlist(); + optimal_calc(); + bool ret = opers_choose(); + if (!ret) { + m_all_available_opers.clear(); + continue; + } + break; + } click_confirm_button(); - return true; }