mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-17 18:01:26 +08:00
refactor: clean up code
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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<ProcessTask>(callback, callback_arg, TaskType)),
|
||||
m_auto_recruit_task_ptr(std::make_shared<AutoRecruitTask>(callback, callback_arg, TaskType)),
|
||||
m_recruit_only_calc_task_ptr(std::make_shared<RecruitCalcTask>(callback, callback_arg, TaskType))
|
||||
m_auto_recruit_task_ptr(std::make_shared<AutoRecruitTask>(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;
|
||||
}
|
||||
|
||||
@@ -18,8 +18,6 @@ namespace asst
|
||||
static constexpr const char* TaskType = "Recruit";
|
||||
|
||||
private:
|
||||
std::shared_ptr<ProcessTask> m_recruit_begin_task_ptr = nullptr;
|
||||
std::shared_ptr<AutoRecruitTask> m_auto_recruit_task_ptr = nullptr;
|
||||
std::shared_ptr<RecruitCalcTask> m_recruit_only_calc_task_ptr = nullptr;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user