From d4c1f4e7deb6480cf85ccde9ea9c687cbc851cb7 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Tue, 19 Sep 2023 20:34:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20debug=20=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E4=B8=8B=20tasks.json=20=E6=A3=80=E6=9F=A5=E6=9C=AA?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=97=B6=E7=9A=84=E8=AE=BF=E9=97=AE=E8=B6=8A?= =?UTF-8?q?=E7=95=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Config/TaskData.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/MaaCore/Config/TaskData.cpp b/src/MaaCore/Config/TaskData.cpp index cb7f95288e..38c6fc472f 100644 --- a/src/MaaCore/Config/TaskData.cpp +++ b/src/MaaCore/Config/TaskData.cpp @@ -187,6 +187,11 @@ bool asst::TaskData::parse(const json::value& json) std::string_view name = task_queue.front(); task_queue.pop(); auto task = get(name); // 这里会提前展开任务 + if (task == nullptr) [[unlikely]] { + Log.error("Task", name, "not successfully generated"); + validity = false; + continue; + } auto check_tasklist = [&](const tasklist_t& task_list, std::string_view list_type, bool enable_justreturn_check = false) { std::unordered_set tasks_set {}; @@ -195,10 +200,6 @@ bool asst::TaskData::parse(const json::value& json) if (tasks_set.contains(task_name)) [[unlikely]] { continue; } - if (!checking_task_set.contains(task_name)) { - task_queue.emplace(task_name_view(task_name)); - checking_task_set.emplace(task_name_view(task_name)); - } // 检查是否有 JustReturn 任务不是最后一个任务 if (enable_justreturn_check && !justreturn_task_name.empty()) [[unlikely]] { Log.error((std::string(name) += "->") += list_type, @@ -210,11 +211,16 @@ bool asst::TaskData::parse(const json::value& json) if (auto ptr = get_raw(task_name); ptr == nullptr) [[unlikely]] { Log.error(task_name, "in", (std::string(name) += "->") += list_type, "is null"); validity = false; + continue; } else if (ptr->algorithm == AlgorithmType::JustReturn) { justreturn_task_name = ptr->name; } + if (!checking_task_set.contains(task_name)) { + task_queue.emplace(task_name_view(task_name)); + checking_task_set.emplace(task_name_view(task_name)); + } tasks_set.emplace(task_name_view(task_name)); }