From 6fbe265d3dbfff33714c0e577b8bd0d7e2b3e994 Mon Sep 17 00:00:00 2001 From: Horror Proton <107091537+horror-proton@users.noreply.github.com> Date: Mon, 25 Jul 2022 18:41:32 +0800 Subject: [PATCH] refactor: clean up code --- src/MeoAssistant/AutoRecruitTask.cpp | 105 +-------------------------- src/MeoAssistant/RecruitTask.cpp | 23 +----- src/MeoAssistant/RecruitTask.h | 2 - 3 files changed, 4 insertions(+), 126 deletions(-) diff --git a/src/MeoAssistant/AutoRecruitTask.cpp b/src/MeoAssistant/AutoRecruitTask.cpp index 6928ed1698..877523883c 100644 --- a/src/MeoAssistant/AutoRecruitTask.cpp +++ b/src/MeoAssistant/AutoRecruitTask.cpp @@ -5,7 +5,6 @@ #include "Controller.h" #include "ProcessTask.h" #include "RecruitImageAnalyzer.h" -#include "RecruitCalcTask.h" #include "Logger.hpp" namespace asst::recruit_calc @@ -250,109 +249,6 @@ bool asst::AutoRecruitTask::recruit_one() return true; } -bool asst::AutoRecruitTask::calc_and_recruit() -{ - LogTraceFunction; - - int refresh_count = 0; // 点击刷新按钮的次数 - int cur_retry_times = 0; // 重新识别的次数,参考下面的两个 continue - const int refresh_limit = 3; // 点击刷新按钮的次数上限 - int maybe_level; - bool has_robot_tag; - - while (cur_retry_times < m_retry_times) { - RecruitCalcTask recruit_task(m_callback, m_callback_arg, m_task_chain); - recruit_task.set_param(m_select_level, true, m_skip_robot) - .set_retry_times(m_retry_times) - .set_exit_flag(m_exit_flag) - .set_ctrler(m_ctrler) - .set_status(m_status) - .set_task_id(m_task_id); - - // 识别错误,放弃这个公招位,直接返回 - if (!recruit_task.run()) { - json::value info = basic_info(); - info["what"] = "RecruitError"; - info["why"] = "识别错误"; - callback(AsstMsg::SubTaskError, info); - click_return_button(); - return true; - } - - has_robot_tag = recruit_task.get_has_robot_tag(); - maybe_level = recruit_task.get_maybe_level(); - if (need_exit()) { - return false; - } - // 尝试刷新 - if (m_need_refresh && maybe_level == 3 - && !recruit_task.get_has_special_tag() - && recruit_task.get_has_refresh() - && !(m_skip_robot && has_robot_tag)) { - if (refresh()) { - if (++refresh_count > refresh_limit) { - // 按理来说不会到这里,因为超过三次刷新的时候上面的 recruit_task.get_has_refresh() 应该是 false - // 报个错,返回 - json::value info = basic_info(); - info["what"] = "RecruitError"; - info["why"] = "刷新次数达到上限"; - info["details"] = json::object{ - { "refresh_limit", refresh_limit } - }; - callback(AsstMsg::SubTaskError, info); - click_return_button(); - return true; - } - else { - json::value info = basic_info(); - info["what"] = "RecruitTagsRefreshed"; - info["details"] = json::object{ - { "count", refresh_count }, - { "refresh_limit", refresh_limit } - }; - callback(AsstMsg::SubTaskExtraInfo, info); - Log.trace("recruit tags refreshed for the " + std::to_string(refresh_count) + "-th time, rerunning recruit task"); - continue; - } - } - } - // 如果时间没调整过,那 tag 十有八九也没选,重新试一次 - // 造成时间没调的原因可见: https://github.com/MaaAssistantArknights/MaaAssistantArknights/pull/300#issuecomment-1073287984 - // 这里如果时间没调整过,但是 tag 点上了,再来一次是不是会又把 tag 点掉? - if (!check_time_reduced()) { - ++cur_retry_times; - Log.warn("unreduced recruit check time detected, rerunning recruit task"); - continue; - } - - if (need_exit()) { - return false; - } - - if (!(m_skip_robot && has_robot_tag) && std::find(m_confirm_level.cbegin(), m_confirm_level.cend(), maybe_level) != m_confirm_level.cend()) { - if (!confirm()) { - return false; - } - } - else { - click_return_button(); - } - - return true; - } - - // 重试次数达到上限时报错并返回 - json::value info = basic_info(); - info["what"] = "RecruitError"; - info["why"] = "重试次数达到上限"; - info["details"] = json::object{ - { "m_retry_times", m_retry_times } - }; - callback(AsstMsg::SubTaskError, info); - click_return_button(); - return false; -} - bool asst::AutoRecruitTask::recruit_calc_task(bool& out_force_skip, int& out_selected) { LogTraceFunction; @@ -597,6 +493,7 @@ bool asst::AutoRecruitTask::recruit_now() bool asst::AutoRecruitTask::confirm() { + // TODO: use RecruitImageAnalyzer::m_confirm_rect or remove it // TODO: https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/902 ProcessTask confirm_task(*this, { "RecruitConfirm" }); return confirm_task.set_retry_times(5).run(); diff --git a/src/MeoAssistant/RecruitTask.cpp b/src/MeoAssistant/RecruitTask.cpp index d44a9ade6b..5d2b0bb54e 100644 --- a/src/MeoAssistant/RecruitTask.cpp +++ b/src/MeoAssistant/RecruitTask.cpp @@ -6,16 +6,9 @@ asst::RecruitTask::RecruitTask(const AsstCallback& callback, void* callback_arg) : PackageTask(callback, callback_arg, TaskType), - m_recruit_begin_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_auto_recruit_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_recruit_only_calc_task_ptr(std::make_shared(callback, callback_arg, TaskType)) + m_auto_recruit_task_ptr(std::make_shared(callback, callback_arg, TaskType)) { - m_recruit_begin_task_ptr->set_tasks({ "RecruitBegin" }); - m_recruit_only_calc_task_ptr->set_enable(false); - - m_subtasks.emplace_back(m_recruit_begin_task_ptr); m_subtasks.emplace_back(m_auto_recruit_task_ptr)->set_retry_times(5); - m_subtasks.emplace_back(m_recruit_only_calc_task_ptr); } bool asst::RecruitTask::set_params(const json::value& params) @@ -49,26 +42,16 @@ bool asst::RecruitTask::set_params(const json::value& params) [[maybe_unused]] int expedite_times = params.get("expedite_times", 0); bool skip_robot = params.get("skip_robot", true); - if (false) { // 仅识别的情况 - m_recruit_begin_task_ptr->set_enable(false); - m_recruit_only_calc_task_ptr->set_enable(true); - m_auto_recruit_task_ptr->set_enable(false); - m_recruit_only_calc_task_ptr->set_param(std::move(select), set_time); - } - else { - m_recruit_begin_task_ptr->set_enable(false); - m_recruit_only_calc_task_ptr->set_enable(false); - m_auto_recruit_task_ptr->set_enable(true); + m_auto_recruit_task_ptr->set_enable(true); - m_auto_recruit_task_ptr->set_max_times(times) + m_auto_recruit_task_ptr->set_max_times(times) .set_need_refresh(refresh) .set_use_expedited(expedite) .set_select_level(std::move(select)) .set_confirm_level(std::move(confirm)) .set_skip_robot(skip_robot) .set_set_time(set_time).set_retry_times(0); - } return true; } diff --git a/src/MeoAssistant/RecruitTask.h b/src/MeoAssistant/RecruitTask.h index 728ff27f51..ebb44a7843 100644 --- a/src/MeoAssistant/RecruitTask.h +++ b/src/MeoAssistant/RecruitTask.h @@ -18,8 +18,6 @@ namespace asst static constexpr const char* TaskType = "Recruit"; private: - std::shared_ptr m_recruit_begin_task_ptr = nullptr; std::shared_ptr m_auto_recruit_task_ptr = nullptr; - std::shared_ptr m_recruit_only_calc_task_ptr = nullptr; }; }