From f903d110e4c90fc75e49a57b608ed98ea310e698 Mon Sep 17 00:00:00 2001 From: MistEO Date: Wed, 26 Oct 2022 23:48:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E6=97=B6=E5=9B=9E=E8=B0=83=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8C=E6=96=B0=E5=A2=9ETaskChainStopped?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/2442 --- docs/3.2-回调消息协议.md | 4 ++- docs/en-us/3.2-CALLBACK_SCHEMA.md | 4 ++- docs/ja-jp/3.2-コールバックAPI.md | 4 ++- docs/zh-tw/3.2-回呼訊息協定.md | 4 ++- src/MeoAssistant/Assistant.cpp | 10 ++++--- src/MeoAssistant/Utils/AsstMsg.h | 6 ++++- src/MeoAsstGui/Helper/AsstProxy.cs | 26 +++++++++++++++++-- .../ViewModels/TaskQueueViewModel.cs | 6 ++++- src/Python/asst.py | 9 +++++-- 9 files changed, 60 insertions(+), 13 deletions(-) diff --git a/docs/3.2-回调消息协议.md b/docs/3.2-回调消息协议.md index 43b68bb716..13283a271b 100644 --- a/docs/3.2-回调消息协议.md +++ b/docs/3.2-回调消息协议.md @@ -25,12 +25,14 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom TaskChainStart = 10001, // 任务链开始 TaskChainCompleted = 10002, // 任务链完成 TaskChainExtraInfo = 10003, // 任务链额外信息 + TaskChainStopped = 10004, // 任务链手动停止 /* SubTask Info */ SubTaskError = 20000, // 原子任务执行/识别错误 SubTaskStart = 20001, // 原子任务开始 SubTaskCompleted = 20002, // 原子任务完成 - SubTaskExtraInfo = 20003 // 原子任务额外信息 + SubTaskExtraInfo = 20003, // 原子任务额外信息 + SubTaskStopped = 20004, // 原子任务手动停止 }; ``` diff --git a/docs/en-us/3.2-CALLBACK_SCHEMA.md b/docs/en-us/3.2-CALLBACK_SCHEMA.md index 4e66a09549..2234154205 100644 --- a/docs/en-us/3.2-CALLBACK_SCHEMA.md +++ b/docs/en-us/3.2-CALLBACK_SCHEMA.md @@ -24,11 +24,13 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom TaskChainStart, // Task chain starts TaskChainCompleted, // Task chain completes TaskChainExtraInfo, // Extra information about task chain + TaskChainStopped, // Task chain stopped /* SubTask Info */ SubTaskError = 20000, // Errors in subtask execution/recognition SubTaskStart, // Subtask starts SubTaskCompleted, // Subtask completes - SubTaskExtraInfo // Extra information about subtask + SubTaskExtraInfo, // Extra information about subtask + SubTaskStopped, // Subtask stopped }; ``` diff --git a/docs/ja-jp/3.2-コールバックAPI.md b/docs/ja-jp/3.2-コールバックAPI.md index 2f73c833c5..759122d552 100644 --- a/docs/ja-jp/3.2-コールバックAPI.md +++ b/docs/ja-jp/3.2-コールバックAPI.md @@ -24,11 +24,13 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom TaskChainStart, // 一連のタスク開始 TaskChainCompleted, // 一連のタスク完了 TaskChainExtraInfo, // 一連のタスクの追加情報 + TaskChainStopped, /* SubTask Info */ SubTaskError = 20000, // サブタスク 実行/認識におけるエラー SubTaskStart, // サブタスク 実行 SubTaskCompleted, // サブタスク 完了 - SubTaskExtraInfo // サブタスクの追加情報 + SubTaskExtraInfo, // サブタスクの追加情報 + SubTaskStopped, }; ``` diff --git a/docs/zh-tw/3.2-回呼訊息協定.md b/docs/zh-tw/3.2-回呼訊息協定.md index 11cf4f5c2f..634f57f798 100644 --- a/docs/zh-tw/3.2-回呼訊息協定.md +++ b/docs/zh-tw/3.2-回呼訊息協定.md @@ -24,11 +24,13 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom TaskChainStart, // 任務鏈開始 TaskChainCompleted, // 任務鏈完成 TaskChainExtraInfo, // 任務鏈額外資訊 + TaskChainStopped, // 任務鏈手動停止 /* SubTask Info */ SubTaskError = 20000, // 原子任務執行/辨識錯誤 SubTaskStart, // 原子任務開始 SubTaskCompleted, // 原子任務完成 - SubTaskExtraInfo // 原子任務額外資訊 + SubTaskExtraInfo, // 原子任務額外資訊 + SubTaskStopped, // 原子任務手動停止 }; ``` diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index 03ca59c8fb..176473f438 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -262,11 +262,15 @@ void Assistant::working_proc() } lock.unlock(); - // We don't consider a task failed when user stop it. - auto msg = ret || m_thread_idle ? AsstMsg::TaskChainCompleted : AsstMsg::TaskChainError; + auto msg = m_thread_idle ? AsstMsg::TaskChainStopped + : (ret ? AsstMsg::TaskChainCompleted : AsstMsg::TaskChainError); task_callback(msg, callback_json, this); - if (!m_thread_idle && m_tasks_list.empty()) { + if (!m_thread_idle) { + continue; + } + + if (m_tasks_list.empty()) { callback_json["finished_tasks"] = json::array(finished_tasks); task_callback(AsstMsg::AllTasksCompleted, callback_json, this); finished_tasks.clear(); diff --git a/src/MeoAssistant/Utils/AsstMsg.h b/src/MeoAssistant/Utils/AsstMsg.h index 7e3fbb51c4..2dbf7671e5 100644 --- a/src/MeoAssistant/Utils/AsstMsg.h +++ b/src/MeoAssistant/Utils/AsstMsg.h @@ -20,11 +20,13 @@ namespace asst TaskChainStart, // 任务链开始 TaskChainCompleted, // 任务链完成 TaskChainExtraInfo, // 任务链额外信息 + TaskChainStopped, // 任务链停止(手动停止) /* SubTask Info */ SubTaskError = 20000, // 原子任务执行/识别错误 SubTaskStart, // 原子任务开始 SubTaskCompleted, // 原子任务完成 - SubTaskExtraInfo // 原子任务额外信息 + SubTaskExtraInfo, // 原子任务额外信息 + SubTaskStopped, // 原子任务停止(手动停止) }; inline std::ostream& operator<<(std::ostream& os, const AsstMsg& type) @@ -40,11 +42,13 @@ namespace asst { AsstMsg::TaskChainStart, "TaskChainStart" }, { AsstMsg::TaskChainCompleted, "TaskChainCompleted" }, { AsstMsg::TaskChainExtraInfo, "TaskChainExtraInfo" }, + { AsstMsg::TaskChainStopped, "TaskChainStopped" }, /* SubTask Info */ { AsstMsg::SubTaskError, "SubTaskError" }, { AsstMsg::SubTaskStart, "SubTaskStart" }, { AsstMsg::SubTaskCompleted, "SubTaskCompleted" }, { AsstMsg::SubTaskExtraInfo, "SubTaskExtraInfo" }, + { AsstMsg::SubTaskStopped, "SubTaskStopped" }, }; return os << _type_name.at(type); } diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 1550f83c9a..c501292d55 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -324,6 +324,7 @@ namespace MeoAsstGui case AsstMsg.TaskChainStart: case AsstMsg.TaskChainCompleted: case AsstMsg.TaskChainExtraInfo: + case AsstMsg.TaskChainStopped: ProcTaskChainMsg(msg, details); break; @@ -425,11 +426,22 @@ namespace MeoAsstGui var settingsModel = _container.Get(); var copilotModel = _container.Get(); + bool isCoplitTaskChain = taskChain == "Copilot"; + switch (msg) { + case AsstMsg.TaskChainStopped: + mainModel.SetStopped(); + if (isCoplitTaskChain) + { + copilotModel.Idle = true; + } + + break; + case AsstMsg.TaskChainError: mainModel.AddLog(Localization.GetString("TaskError") + taskChain, LogColor.Error); - if (taskChain == "Copilot") + if (isCoplitTaskChain) { copilotModel.Idle = true; copilotModel.AddLog(Localization.GetString("CombatError"), LogColor.Error); @@ -457,7 +469,7 @@ namespace MeoAsstGui } mainModel.AddLog(Localization.GetString("CompleteTask") + taskChain); - if (taskChain == "Copilot") + if (isCoplitTaskChain) { copilotModel.Idle = true; copilotModel.AddLog(Localization.GetString("CompleteCombat"), LogColor.Info); @@ -1561,6 +1573,11 @@ namespace MeoAsstGui /// TaskChainExtraInfo, + /// + /// 任务链手动停止 + /// + TaskChainStopped, + /* SubTask Info */ /// @@ -1582,6 +1599,11 @@ namespace MeoAsstGui /// 原子任务额外信息。 /// SubTaskExtraInfo, + + /// + /// 原子任务手动停止 + /// + SubTaskStopped, } } diff --git a/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs b/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs index b0f79d02f8..83dcf48788 100644 --- a/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs +++ b/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs @@ -751,7 +751,6 @@ namespace MeoAsstGui /// public async void Stop() { - Idle = true; // 提前将 Idle 置为 true Stopping = true; AddLog(Localization.GetString("Stopping")); var task = Task.Run(() => @@ -759,7 +758,12 @@ namespace MeoAsstGui return _container.Get().AsstStop(); }); await task; + } + + public void SetStopped() + { AddLog(Localization.GetString("Stopped")); + Idle = true; Stopping = false; } diff --git a/src/Python/asst.py b/src/Python/asst.py index 38c7189cdb..388bdd2b8f 100644 --- a/src/Python/asst.py +++ b/src/Python/asst.py @@ -46,13 +46,14 @@ class Asst: Asst.__lib = ctypes.CDLL(str(Asst.__libpath)) Asst.__set_lib_properties() - ret: bool = True; + ret: bool = True if user_dir: ret &= Asst.__lib.AsstSetUserDir(str(user_dir).encode('utf-8')) ret &= Asst.__lib.AsstLoadResource(str(path).encode('utf-8')) if incremental_path: - ret &= Asst.__lib.AsstLoadResource(str(incremental_path).encode('utf-8')) + ret &= Asst.__lib.AsstLoadResource( + str(incremental_path).encode('utf-8')) return ret @@ -226,6 +227,8 @@ class Message(Enum): TaskChainExtraInfo = auto() + TaskChainStopped = auto() + SubTaskError = 20000 SubTaskStart = auto() @@ -233,3 +236,5 @@ class Message(Enum): SubTaskCompleted = auto() SubTaskExtraInfo = auto() + + SubTaskStopped = auto()