mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 09:50:40 +08:00
feat: 自动战斗新增战斗列表选项
This commit is contained in:
@@ -3,33 +3,48 @@
|
||||
#include <regex>
|
||||
|
||||
#include "Config/Miscellaneous/CopilotConfig.h"
|
||||
#include "Config/TaskData.h"
|
||||
#include "Task/Miscellaneous/BattleFormationTask.h"
|
||||
#include "Task/Miscellaneous/BattleProcessTask.h"
|
||||
#include "Task/Miscellaneous/CopilotListNotificationPlugin.h"
|
||||
#include "Task/Miscellaneous/TaskFileReloadTask.h"
|
||||
#include "Task/ProcessTask.h"
|
||||
#include "Utils/Logger.hpp"
|
||||
#include "Utils/Platform.hpp"
|
||||
|
||||
asst::CopilotTask::CopilotTask(const AsstCallback& callback, Assistant* inst)
|
||||
: InterfaceTask(callback, inst, TaskType),
|
||||
m_task_file_reload_task_ptr(std::make_shared<TaskFileReloadTask>(callback, inst, TaskType)),
|
||||
m_navigate_task_ptr(std::make_shared<ProcessTask>(callback, inst, TaskType)),
|
||||
m_not_use_prts_task_ptr(std::make_shared<ProcessTask>(callback, inst, TaskType)),
|
||||
m_adverse_select_task_ptr(std::make_shared<ProcessTask>(callback, inst, TaskType)),
|
||||
m_formation_task_ptr(std::make_shared<BattleFormationTask>(callback, inst, TaskType)),
|
||||
m_battle_task_ptr(std::make_shared<BattleProcessTask>(callback, inst, TaskType)),
|
||||
m_stop_task_ptr(std::make_shared<ProcessTask>(callback, inst, TaskType))
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
m_subtasks.emplace_back(m_task_file_reload_task_ptr);
|
||||
m_subtasks.emplace_back(m_navigate_task_ptr);
|
||||
m_subtasks.emplace_back(m_not_use_prts_task_ptr);
|
||||
|
||||
// 选择突袭模式
|
||||
m_adverse_select_task_ptr->set_tasks({ "ChangeToAdverseDifficulty", "AdverseConfirm" });
|
||||
m_subtasks.emplace_back(m_adverse_select_task_ptr);
|
||||
|
||||
auto start_1_tp = std::make_shared<ProcessTask>(callback, inst, TaskType);
|
||||
start_1_tp->set_tasks({ "BattleStartPre" }).set_retry_times(0).set_ignore_error(true);
|
||||
m_subtasks.emplace_back(start_1_tp);
|
||||
|
||||
m_subtasks.emplace_back(m_formation_task_ptr);
|
||||
m_subtasks.emplace_back(m_formation_task_ptr)->set_retry_times(0);
|
||||
|
||||
auto start_2_tp = std::make_shared<ProcessTask>(callback, inst, TaskType);
|
||||
start_2_tp->set_tasks({ "BattleStartAll" }).set_ignore_error(false);
|
||||
m_copilot_list_notification_ptr = start_2_tp->register_plugin<CopilotListNotificationPlugin>();
|
||||
m_subtasks.emplace_back(start_2_tp);
|
||||
|
||||
m_subtasks.emplace_back(m_battle_task_ptr)->set_retry_times(0);
|
||||
|
||||
m_stop_task_ptr->set_tasks({ "ClickCornerUntilStartButton" });
|
||||
m_stop_task_ptr->set_enable(false);
|
||||
m_subtasks.emplace_back(m_stop_task_ptr);
|
||||
}
|
||||
@@ -56,10 +71,14 @@ bool asst::CopilotTask::set_params(const json::value& params)
|
||||
Log.error("CopilotConfig parse failed");
|
||||
return false;
|
||||
}
|
||||
m_task_file_reload_task_ptr->set_magic_code(match[1].str());
|
||||
}
|
||||
else if (!Copilot.load(utils::path(*filename_opt))) {
|
||||
Log.error("CopilotConfig parse failed");
|
||||
return false;
|
||||
else {
|
||||
if (!Copilot.load(utils::path(*filename_opt))) {
|
||||
Log.error("CopilotConfig parse failed");
|
||||
return false;
|
||||
}
|
||||
m_task_file_reload_task_ptr->set_path(std::move(*filename_opt));
|
||||
}
|
||||
|
||||
m_stage_name = Copilot.get_stage_name();
|
||||
@@ -70,6 +89,8 @@ bool asst::CopilotTask::set_params(const json::value& params)
|
||||
|
||||
bool with_formation = params.get("formation", false);
|
||||
m_formation_task_ptr->set_enable(with_formation);
|
||||
|
||||
// 自动补信赖
|
||||
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");
|
||||
@@ -88,21 +109,46 @@ 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_not_use_prts_task_ptr->set_enable(need_navigate && with_formation);
|
||||
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());
|
||||
Task.get<OcrTaskInfo>(m_navigate_name + "@Copilot@ClickStageName")->text = { m_navigate_name };
|
||||
Task.get<OcrTaskInfo>(m_navigate_name + "@Copilot@ClickedCorrectStage")->text = { m_navigate_name };
|
||||
Task.get(m_navigate_name + "@Copilot@FullStageNavigation")->specific_rect = Rect(600, 100, 20, 20);
|
||||
m_navigate_task_ptr->set_tasks({ m_navigate_name + "@Copilot@StageNavigationBegin" });
|
||||
m_navigate_task_ptr->set_enable(need_navigate);
|
||||
|
||||
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 (loop_times > 1) {
|
||||
m_stop_task_ptr->set_tasks({ "ClickCornerUntilStartButton" });
|
||||
m_stop_task_ptr->set_enable(true);
|
||||
|
||||
// 追加
|
||||
m_subtasks.reserve(m_subtasks.size() * loop_times);
|
||||
auto raw_end = m_subtasks.end();
|
||||
for (size_t i = 1; i < loop_times; ++i) {
|
||||
// FIXME: 如果多次调用 set_params,这里复制的会有问题
|
||||
m_subtasks.insert(m_subtasks.end(), m_subtasks.begin(), raw_end);
|
||||
}
|
||||
m_stop_task_ptr->set_enable(true);
|
||||
}
|
||||
else {
|
||||
m_stop_task_ptr->set_enable(false);
|
||||
else if (need_navigate) {
|
||||
Task.get<OcrTaskInfo>("Copilot@BattleStartPreFlag")->text.emplace_back(m_navigate_name);
|
||||
m_stop_task_ptr->set_tasks({ "Copilot@ClickCornerUntilStartButton" });
|
||||
m_stop_task_ptr->set_enable(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user