mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 17:57:01 +08:00
perf: 优化CopilotTask参数设置 (#7631)
* perf: 优化CopilotTask参数设置逻辑 * perf: 调整参数顺序 * perf: format
This commit is contained in:
@@ -26,6 +26,8 @@ asst::CopilotTask::CopilotTask(const AsstCallback& callback, Assistant* inst)
|
||||
|
||||
m_subtasks.emplace_back(m_task_file_reload_task_ptr);
|
||||
m_subtasks.emplace_back(m_navigate_task_ptr);
|
||||
|
||||
m_not_use_prts_task_ptr->set_tasks({ "NotUsePrts" }).set_retry_times(0);
|
||||
m_subtasks.emplace_back(m_not_use_prts_task_ptr);
|
||||
|
||||
// 选择突袭模式
|
||||
@@ -66,6 +68,16 @@ bool asst::CopilotTask::set_params(const json::value& params)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool need_navigate = params.get("need_navigate", false); // 是否在当前页面左右滑动寻找关卡,启用战斗列表则为true
|
||||
std::string navigate_name = params.get("navigate_name", std::string()); // 导航的关卡名
|
||||
bool is_adverse = params.get("is_adverse", false); // 是否为突袭关卡
|
||||
bool use_sanity_potion = params.get("use_sanity_potion", false); // 是否吃理智药
|
||||
bool with_formation = params.get("formation", false); // 是否使用自动编队
|
||||
int select_formation = params.get("select_formation", 0); // 选择第几个编队,0为不选择
|
||||
bool add_trust = params.get("add_trust", false); // 是否自动补信赖
|
||||
bool add_user_additional = params.get("add_user_additional", false); // 是否自动补用户自定义干员
|
||||
std::string support_unit_name = params.get("support_unit_name", std::string());
|
||||
|
||||
auto filename_opt = params.find<std::string>("filename");
|
||||
if (!filename_opt) {
|
||||
Log.error("CopilotTask set_params failed, stage_name or filename not found");
|
||||
@@ -75,6 +87,7 @@ bool asst::CopilotTask::set_params(const json::value& params)
|
||||
static const std::regex maa_regex(R"(^maa://(\d+)$)");
|
||||
std::smatch match;
|
||||
|
||||
m_task_file_reload_task_ptr->set_enable(need_navigate);
|
||||
if (std::regex_match(*filename_opt, match, maa_regex)) {
|
||||
if (!Copilot.parse_magic_code(match[1].str())) {
|
||||
Log.error("CopilotConfig parse failed");
|
||||
@@ -96,21 +109,33 @@ bool asst::CopilotTask::set_params(const json::value& params)
|
||||
return false;
|
||||
}
|
||||
|
||||
m_medicine_task_ptr->set_enable(params.get("use_sanity_potion", false));
|
||||
if (!navigate_name.empty()) {
|
||||
Task.get<OcrTaskInfo>(navigate_name + "@Copilot@ClickStageName")->text = { navigate_name };
|
||||
Task.get<OcrTaskInfo>(navigate_name + "@Copilot@ClickedCorrectStage")->text = { navigate_name };
|
||||
m_navigate_task_ptr->set_tasks({ navigate_name + "@Copilot@StageNavigationBegin" });
|
||||
}
|
||||
else {
|
||||
m_navigate_task_ptr->set_tasks({});
|
||||
}
|
||||
|
||||
// 选择指定编队
|
||||
m_formation_task_ptr->set_select_formation(params.get("select_formation", 0));
|
||||
m_navigate_task_ptr->set_enable(need_navigate);
|
||||
m_adverse_select_task_ptr->set_enable(need_navigate && is_adverse);
|
||||
m_not_use_prts_task_ptr->set_enable(need_navigate); // 不使用代理指挥
|
||||
m_medicine_task_ptr->set_enable(use_sanity_potion);
|
||||
|
||||
// 自动补信赖
|
||||
m_formation_task_ptr->set_add_trust(params.get("add_trust", false));
|
||||
m_formation_task_ptr->set_add_user_additional(params.get("add_user_additional", false));
|
||||
auto user_additional_opt = params.find<json::array>("user_additional");
|
||||
if (!user_additional_opt) {
|
||||
Log.error("add_user_additional not found");
|
||||
// 关卡名含有"TR"的为教学关,不需要编队
|
||||
m_formation_task_ptr->set_enable(with_formation && navigate_name.find("TR") == std::string::npos);
|
||||
m_formation_task_ptr->set_select_formation(select_formation);
|
||||
m_formation_task_ptr->set_add_trust(add_trust);
|
||||
m_formation_task_ptr->set_add_user_additional(add_user_additional);
|
||||
m_formation_task_ptr->set_support_unit_name(std::move(support_unit_name));
|
||||
|
||||
if (auto opt = params.find<json::array>("user_additional"); !opt) {
|
||||
Log.warn("add_user_additional not found");
|
||||
}
|
||||
else {
|
||||
std::vector<std::pair<std::string, int>> user_additional;
|
||||
for (const auto& op : user_additional_opt.value()) {
|
||||
for (const auto& op : *opt) {
|
||||
std::string name = op.get("name", std::string());
|
||||
if (name.empty()) {
|
||||
continue;
|
||||
@@ -120,41 +145,12 @@ bool asst::CopilotTask::set_params(const json::value& params)
|
||||
m_formation_task_ptr->set_user_additional(std::move(user_additional));
|
||||
}
|
||||
|
||||
// 是否在当前页面左右滑动寻找关卡
|
||||
// 启用队列的话,这项为true
|
||||
bool need_navigate = params.get("need_navigate", false);
|
||||
m_task_file_reload_task_ptr->set_enable(need_navigate);
|
||||
m_battle_task_ptr->set_wait_until_end(need_navigate);
|
||||
|
||||
// 不使用代理指挥
|
||||
m_not_use_prts_task_ptr->set_enable(need_navigate);
|
||||
m_not_use_prts_task_ptr->set_tasks({ "NotUsePrts", "Stop" });
|
||||
|
||||
bool is_adverse = params.get("is_adverse", false);
|
||||
m_adverse_select_task_ptr->set_enable(need_navigate && is_adverse);
|
||||
|
||||
std::string m_navigate_name = params.get("navigate_name", std::string());
|
||||
if (!m_navigate_name.empty()) {
|
||||
Task.get<OcrTaskInfo>(m_navigate_name + "@Copilot@ClickStageName")->text = { m_navigate_name };
|
||||
Task.get<OcrTaskInfo>(m_navigate_name + "@Copilot@ClickedCorrectStage")->text = { m_navigate_name };
|
||||
m_navigate_task_ptr->set_tasks({ m_navigate_name + "@Copilot@StageNavigationBegin" });
|
||||
}
|
||||
else {
|
||||
m_navigate_task_ptr->set_tasks({});
|
||||
}
|
||||
m_navigate_task_ptr->set_enable(need_navigate);
|
||||
|
||||
bool with_formation = params.get("formation", false);
|
||||
// 关卡名含有"TR"的为教学关,不需要编队
|
||||
m_formation_task_ptr->set_enable(with_formation && m_navigate_name.find("TR") == std::string::npos);
|
||||
|
||||
std::string support_unit_name = params.get("support_unit_name", std::string());
|
||||
m_formation_task_ptr->set_support_unit_name(std::move(support_unit_name));
|
||||
|
||||
size_t loop_times = params.get("loop_times", 1);
|
||||
if (need_navigate) {
|
||||
// 如果没三星就中止
|
||||
Task.get<OcrTaskInfo>("Copilot@BattleStartPreFlag")->text.emplace_back(m_navigate_name);
|
||||
Task.get<OcrTaskInfo>("Copilot@BattleStartPreFlag")->text.emplace_back(navigate_name);
|
||||
m_stop_task_ptr->set_tasks({ "Copilot@ClickCornerUntilEndOfAction" });
|
||||
m_stop_task_ptr->set_enable(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user