mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
Merge branch 'MaaAssistantArknights:dev' into dev
This commit is contained in:
@@ -30,6 +30,15 @@
|
||||
// - SwipeToTheLeft: 滑动到最左侧
|
||||
// - SwipeToTheRight: 滑动到最右侧
|
||||
|
||||
"sub": [ "SubTaskName1", "SubTaskName2" ],
|
||||
// 可选项,子任务。会在执行完当前任务后,依次执行每一个子任务
|
||||
// 可以套娃,子任务再套子任务。但要注意不要写出了死循环
|
||||
|
||||
"subErrorIgnored": true, // 可选项,是否忽略子任务的错误。
|
||||
// 不填写默认 true
|
||||
// 为 false 时,若某个子任务出错,则不继续执行后续任务(相当于本任务出错了)
|
||||
// 为 true 时,子任务是否出错没有影响
|
||||
|
||||
"next": [ "OtherTaskName1", "OtherTaskName2"],
|
||||
// 可选项,表示执行完当前任务后,下一个要执行的任务
|
||||
// 会从前往后依次去识别,去执行第一个匹配上的
|
||||
|
||||
@@ -219,6 +219,8 @@ namespace asst
|
||||
AlgorithmType::Invalid;
|
||||
ProcessTaskAction action = // 要进行的操作
|
||||
ProcessTaskAction::Invalid;
|
||||
std::vector<std::string> sub; // 子任务(列表)
|
||||
bool sub_error_ignored = true; // 子任务如果失败了,是否继续执行剩下的任务
|
||||
std::vector<std::string> next; // 下一个可能的任务(列表)
|
||||
int max_times = INT_MAX; // 任务最多执行多少次
|
||||
std::vector<std::string> exceeded_next; // 达到最多次数了之后,下一个可能的任务(列表)
|
||||
|
||||
@@ -224,6 +224,13 @@ bool ProcessTask::_run()
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const std::string& sub : cur_task_ptr->sub) {
|
||||
bool sub_ret = ProcessTask(*this, { sub }).run();
|
||||
if (!sub_ret && !cur_task_ptr->sub_error_ignored) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
callback(AsstMsg::SubTaskCompleted, info);
|
||||
|
||||
if (cur_task_ptr->next.empty()) {
|
||||
|
||||
@@ -189,11 +189,19 @@ bool asst::TaskData::parse(const json::value& json)
|
||||
task_info_ptr->roi = Rect();
|
||||
}
|
||||
|
||||
if (task_json.contains("sub")) {
|
||||
for (const json::value& sub : task_json.at("sub").as_array()) {
|
||||
task_info_ptr->sub.emplace_back(sub.as_string());
|
||||
}
|
||||
}
|
||||
task_info_ptr->sub_error_ignored = task_json.get("subErrorIgnored", true);
|
||||
|
||||
if (task_json.contains("next")) {
|
||||
for (const json::value& next : task_json.at("next").as_array()) {
|
||||
task_info_ptr->next.emplace_back(next.as_string());
|
||||
}
|
||||
}
|
||||
|
||||
if (task_json.contains("rectMove")) {
|
||||
const json::array& move_arr = task_json.at("rectMove").as_array();
|
||||
task_info_ptr->rect_move = Rect(
|
||||
|
||||
Reference in New Issue
Block a user