From df2f7b2416fb6b2a9bd4333d4cc99afee999555b Mon Sep 17 00:00:00 2001 From: lhhxxxxx Date: Wed, 8 Jun 2022 18:23:22 +0800 Subject: [PATCH 01/14] feat. allow drag a file --- src/MeoAsstGui/ViewModels/CopilotViewModel.cs | 26 +++++++++++++++++++ src/MeoAsstGui/Views/CopilotView.xaml | 4 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/MeoAsstGui/ViewModels/CopilotViewModel.cs b/src/MeoAsstGui/ViewModels/CopilotViewModel.cs index b397ae7900..67a85efb4d 100644 --- a/src/MeoAsstGui/ViewModels/CopilotViewModel.cs +++ b/src/MeoAsstGui/ViewModels/CopilotViewModel.cs @@ -18,12 +18,15 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Windows.Forms; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Notification.Wpf.Constants; using Notification.Wpf.Controls; using Stylet; using StyletIoC; +using DragEventArgs = System.Windows.DragEventArgs; +using Screen = Stylet.Screen; namespace MeoAsstGui { @@ -182,6 +185,29 @@ namespace MeoAsstGui } } + public void DropFile(object sender, DragEventArgs e) + { + if (!e.Data.GetDataPresent(DataFormats.FileDrop)) + { + return; + } + var filename = ((Array)e.Data.GetData(DataFormats.FileDrop))?.GetValue(0).ToString(); + if (filename == null) + { + return; + } + if (filename.EndsWith(".json")) + { + Filename = filename; + } + else + { + Filename = ""; + ClearLog(); + AddLog("此文件非json文件","darkred"); + } + } + private bool _form = false; public bool Form diff --git a/src/MeoAsstGui/Views/CopilotView.xaml b/src/MeoAsstGui/Views/CopilotView.xaml index 089862a50e..4b273e3ab0 100644 --- a/src/MeoAsstGui/Views/CopilotView.xaml +++ b/src/MeoAsstGui/Views/CopilotView.xaml @@ -9,7 +9,9 @@ mc:Ignorable="d" xmlns:vm="clr-namespace:MeoAsstGui;assembly=MeoAsstGui" d:DataContext="{d:DesignInstance {x:Type vm:CopilotViewModel}}" - d:DesignHeight="495" d:DesignWidth="800"> + d:DesignHeight="495" d:DesignWidth="800" + AllowDrop="True" + Drop="{s:Action DropFile}"> From ed76f009ac9e8536cf0ac7a69b37fe760386464b Mon Sep 17 00:00:00 2001 From: MistEO Date: Wed, 8 Jun 2022 22:03:09 +0800 Subject: [PATCH 02/14] =?UTF-8?q?fix.=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=8F=A6?= =?UTF-8?q?=E4=B8=80=E7=A7=8D=E5=88=B7=E7=90=86=E6=99=BA=E4=B8=AD=E9=80=94?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=B4=A9=E6=BA=83=E7=9A=84=E9=87=8D=E8=BF=9E?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=EF=BC=9B=E5=B9=B6=E9=87=8D=E6=9E=84=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/maa_tasks_schema.json | 6 +- docs/任务流程协议.md | 2 + resource/tasks.json | 53 +++++++---------- src/MeoAssistant/Assistant.cpp | 3 +- src/MeoAssistant/AsstTypes.h | 4 +- src/MeoAssistant/FightTask.cpp | 4 +- .../GameCrashRestartTaskPlugin.cpp | 7 ++- src/MeoAssistant/ProcessTask.cpp | 58 +++++++++++-------- src/MeoAssistant/ProcessTask.h | 2 + src/MeoAssistant/TaskData.cpp | 7 ++- src/MeoAsstGui/Helper/AsstProxy.cs | 2 +- 11 files changed, 81 insertions(+), 67 deletions(-) diff --git a/docs/maa_tasks_schema.json b/docs/maa_tasks_schema.json index 06430a4984..a9972cfdc9 100644 --- a/docs/maa_tasks_schema.json +++ b/docs/maa_tasks_schema.json @@ -69,6 +69,10 @@ "$ref": "#/definitions/TaskNameList", "description": "可选项,表示达到了最大执行次数后要执行的任务\n不填写时,达到了最大执行次数则停止;填写后就执行这里的,而不是 next 里的" }, + "onErrorNext": { + "$ref": "#/definitions/TaskNameList", + "description": "可选项,表示执行出错时,后续要执行的任务" + }, "preDelay": { "type": "number", "description": "可选项,表示识别到后延迟多久才执行 action,单位毫秒;不填写时默认 0" @@ -218,4 +222,4 @@ ] } } -} \ No newline at end of file +} diff --git a/docs/任务流程协议.md b/docs/任务流程协议.md index f41d3900a2..3ca63c8e8e 100644 --- a/docs/任务流程协议.md +++ b/docs/任务流程协议.md @@ -53,6 +53,8 @@ "exceededNext": [ "OtherTaskName1", "OtherTaskName2" ], // 可选项,表示达到了最大执行次数后要执行的任务 // 不填写时,达到了最大执行次数则停止;填写后就执行这里的,而不是 next 里的 + "onErrorNext": [ "OtherTaskName1", "OtherTaskName2" ], + // 可选项,表示执行出错时,后续要执行的任务 "preDelay": 1000, // 可选项,表示识别到后延迟多久才执行 action,单位毫秒;不填写时默认 0 "rearDelay": 1000, // 可选项,表示 action 执行完后延迟多久才去识别 next, 单位毫秒;不填写时默认 0 diff --git a/resource/tasks.json b/resource/tasks.json index 1ab86c866d..9d744e6e50 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -1283,39 +1283,10 @@ "StartButton2", "UseMedicine", "UseStone", - "NoStone", - "MaybeCrashAndRestartGame" - ] - }, - "MaybeCrashAndRestartGame": { - "ClickCorner_Doc": "一般能点这么多下还不行的,多半是游戏崩了,所以重启游戏试试", - "Doc": "本任务注册了插件 GameCrashRestartTaskPlugin", - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 1000, - 120, - 270, - 10 + "NoStone" ], - "rearDelay": 3000, - "next": [ - "EndOfAction", - "StartButton1", - "StartButton2", - "UseMedicine", - "UseStone", - "NoStone", - "GameStart", - "StartToWakeUp", - "StartUpConnectingFlag", - "StartLoginBServer", - "Terminal", - "CloseAnno", - "TodaysSupplies", - "ReturnToTerminal", - "OfflineConfirm", - "StageSNFlag" + "onErrorNext": [ + "RestartGameAndContinueFighting" ] }, "EndOfAction": { @@ -1352,6 +1323,24 @@ "UseStone", "NoStone", "EndOfAction" + ], + "onErrorNext": [ + "RestartGameAndContinueFighting" + ] + }, + "RestartGameAndContinueFighting": { + "algorithm": "JustReturn", + "action": "DoNothing", + "rearDelay": 5000, + "next": [ + "GameStart", + "StartToWakeUp", + "StartUpConnectingFlag", + "StartLoginBServer", + "Terminal", + "CloseAnno", + "TodaysSupplies", + "OfflineConfirm" ] }, "UseMedicine": { diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index c2667cc2e1..9531ac3efd 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -322,5 +322,6 @@ void asst::Assistant::append_callback(AsstMsg msg, json::value detail) void Assistant::clear_cache() { m_status->clear_number(); - //Task.clear_cache(); + m_status->clear_rect(); + m_status->clear_str(); } diff --git a/src/MeoAssistant/AsstTypes.h b/src/MeoAssistant/AsstTypes.h index 18d77de3be..417afee185 100644 --- a/src/MeoAssistant/AsstTypes.h +++ b/src/MeoAssistant/AsstTypes.h @@ -98,7 +98,7 @@ namespace asst } Rect move(Rect move) const { - return {x + move.x, y + move.y, move.width, move.height}; + return { x + move.x, y + move.y, move.width, move.height }; } int x = 0; @@ -158,7 +158,6 @@ namespace asst double score = 0.0; Rect rect; }; - } namespace std @@ -225,6 +224,7 @@ namespace asst std::vector next; // 下一个可能的任务(列表) int max_times = INT_MAX; // 任务最多执行多少次 std::vector exceeded_next; // 达到最多次数了之后,下一个可能的任务(列表) + std::vector on_error_next; // 任务出错之后要去执行什么 std::vector reduce_other_times; // 执行了该任务后,需要减少别的任务的执行次数。例如执行了吃理智药,则说明上一次点击蓝色开始行动按钮没生效,所以蓝色开始行动要-1 asst::Rect specific_rect; // 指定区域,目前仅针对ClickRect任务有用,会点这个区域 int pre_delay = 0; // 执行该任务前的延时 diff --git a/src/MeoAssistant/FightTask.cpp b/src/MeoAssistant/FightTask.cpp index 5e3945f95d..58d40aecb7 100644 --- a/src/MeoAssistant/FightTask.cpp +++ b/src/MeoAssistant/FightTask.cpp @@ -37,7 +37,9 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg) .set_times_limit("MedicineConfirm", 0) .set_times_limit("StoneConfirm", 0) .set_times_limit("StartButton1", INT_MAX) - .set_times_limit("StartButton2", INT_MAX); + .set_times_limit("StartButton2", INT_MAX) + .set_ignore_error(false); + m_stage_drops_plugin_ptr = m_fight_task_ptr->regiseter_plugin(); m_stage_drops_plugin_ptr->set_retry_times(0); m_game_restart_plugin_ptr = m_fight_task_ptr->regiseter_plugin(); diff --git a/src/MeoAssistant/GameCrashRestartTaskPlugin.cpp b/src/MeoAssistant/GameCrashRestartTaskPlugin.cpp index 2fda43d6b8..e334a74893 100644 --- a/src/MeoAssistant/GameCrashRestartTaskPlugin.cpp +++ b/src/MeoAssistant/GameCrashRestartTaskPlugin.cpp @@ -1,13 +1,16 @@ #include "GameCrashRestartTaskPlugin.h" +#include "RuntimeStatus.h" + bool asst::GameCrashRestartTaskPlugin::verify(AsstMsg msg, const json::value& details) const { - if (msg != AsstMsg::SubTaskCompleted + if (msg != AsstMsg::SubTaskStart || details.get("subtask", std::string()) != "ProcessTask") { return false; } - if (details.at("details").at("task").as_string() == "MaybeCrashAndRestartGame") { + if (details.at("details").at("task").as_string() == "RestartGameAndContinueFighting" + && m_status->get_number("LastStartButton2")) { return true; } else { diff --git a/src/MeoAssistant/ProcessTask.cpp b/src/MeoAssistant/ProcessTask.cpp index 67aa931b81..0816a79a5f 100644 --- a/src/MeoAssistant/ProcessTask.cpp +++ b/src/MeoAssistant/ProcessTask.cpp @@ -49,13 +49,9 @@ bool asst::ProcessTask::run() return false; } sleep(m_task_delay); - - if (!on_run_fails()) { - return false; - } } callback(AsstMsg::SubTaskError, basic_info()); - return false; + return on_run_fails(); } ProcessTask& asst::ProcessTask::set_task_delay(int delay) noexcept @@ -66,6 +62,7 @@ ProcessTask& asst::ProcessTask::set_task_delay(int delay) noexcept asst::ProcessTask& asst::ProcessTask::set_tasks(std::vector tasks_name) noexcept { + m_cur_retry = 0; m_raw_tasks_name = std::move(tasks_name); return *this; } @@ -99,7 +96,6 @@ bool ProcessTask::_run() Log.info(info.to_string()); Rect rect; - std::shared_ptr cur_task_ptr = nullptr; auto front_task_ptr = Task.get(m_cur_tasks_name.front()); // 可能有配置错误,导致不存在对应的任务 @@ -109,7 +105,7 @@ bool ProcessTask::_run() } // 如果第一个任务是JustReturn的,那就没必要再截图并计算了 if (front_task_ptr->algorithm == AlgorithmType::JustReturn) { - cur_task_ptr = front_task_ptr; + m_cur_task_ptr = front_task_ptr; } else { const auto image = m_ctrler->get_image(); @@ -120,15 +116,15 @@ bool ProcessTask::_run() if (!analyzer.analyze()) { return false; } - cur_task_ptr = analyzer.get_result(); + m_cur_task_ptr = analyzer.get_result(); rect = analyzer.get_rect(); } if (need_exit()) { return false; } - std::string cur_name = cur_task_ptr->name; + std::string cur_name = m_cur_task_ptr->name; - const auto& res_move = cur_task_ptr->rect_move; + const auto& res_move = m_cur_task_ptr->rect_move; if (!res_move.empty()) { rect.x += res_move.x; rect.y += res_move.y; @@ -138,7 +134,7 @@ bool ProcessTask::_run() int& exec_times = m_exec_times[cur_name]; - int max_times = cur_task_ptr->max_times; + int max_times = m_cur_task_ptr->max_times; if (auto iter = m_times_limit.find(cur_name); iter != m_times_limit.cend()) { max_times = iter->second; @@ -151,7 +147,7 @@ bool ProcessTask::_run() { "max_times", max_times } }; Log.info("exec times exceeded the limit", info.to_string()); - m_cur_tasks_name = cur_task_ptr->exceeded_next; + m_cur_tasks_name = m_cur_task_ptr->exceeded_next; sleep(m_task_delay); continue; } @@ -161,23 +157,23 @@ bool ProcessTask::_run() info["details"] = json::object{ { "task", cur_name }, - { "action", static_cast(cur_task_ptr->action) }, + { "action", static_cast(m_cur_task_ptr->action) }, { "exec_times", exec_times }, { "max_times", max_times }, - { "algorithm", static_cast(cur_task_ptr->algorithm) } + { "algorithm", static_cast(m_cur_task_ptr->algorithm) } }; callback(AsstMsg::SubTaskStart, info); // 前置固定延时 - if (!sleep(cur_task_ptr->pre_delay)) { + if (!sleep(m_cur_task_ptr->pre_delay)) { return false; } bool need_stop = false; - switch (cur_task_ptr->action) { + switch (m_cur_task_ptr->action) { case ProcessTaskAction::ClickRect: - rect = cur_task_ptr->specific_rect; + rect = m_cur_task_ptr->specific_rect; [[fallthrough]]; case ProcessTaskAction::ClickSelf: exec_click_task(rect); @@ -189,11 +185,11 @@ bool ProcessTask::_run() } break; case ProcessTaskAction::SwipeToTheLeft: case ProcessTaskAction::SwipeToTheRight: - exec_swipe_task(cur_task_ptr->action); + exec_swipe_task(m_cur_task_ptr->action); break; case ProcessTaskAction::SlowlySwipeToTheLeft: case ProcessTaskAction::SlowlySwipeToTheRight: - exec_slowly_swipe_task(cur_task_ptr->action); + exec_slowly_swipe_task(m_cur_task_ptr->action); break; case ProcessTaskAction::DoNothing: break; @@ -210,7 +206,7 @@ bool ProcessTask::_run() // 减少其他任务的执行次数 // 例如,进入吃理智药的界面了,相当于上一次点蓝色开始行动没生效 // 所以要给蓝色开始行动的次数减一 - for (const std::string& reduce : cur_task_ptr->reduce_other_times) { + for (const std::string& reduce : m_cur_task_ptr->reduce_other_times) { auto& v = m_exec_times[reduce]; if (v > 0) { --v; @@ -218,7 +214,7 @@ bool ProcessTask::_run() } // 后置固定延时 - int rear_delay = cur_task_ptr->rear_delay; + int rear_delay = m_cur_task_ptr->rear_delay; if (auto iter = m_rear_delay.find(cur_name); iter != m_rear_delay.cend()) { rear_delay = iter->second; @@ -227,10 +223,10 @@ bool ProcessTask::_run() return false; } - for (const std::string& sub : cur_task_ptr->sub) { + for (const std::string& sub : m_cur_task_ptr->sub) { LogTraceScope("Sub: " + sub); bool sub_ret = ProcessTask(*this, { sub }).run(); - if (!sub_ret && !cur_task_ptr->sub_error_ignored) { + if (!sub_ret && !m_cur_task_ptr->sub_error_ignored) { Log.error("Sub error and not ignored", sub); return false; } @@ -238,20 +234,32 @@ bool ProcessTask::_run() callback(AsstMsg::SubTaskCompleted, info); - if (cur_task_ptr->next.empty()) { + if (m_cur_task_ptr->next.empty()) { need_stop = true; } if (need_stop) { return true; } - m_cur_tasks_name = cur_task_ptr->next; + m_cur_tasks_name = m_cur_task_ptr->next; sleep(m_task_delay); } return true; } +bool asst::ProcessTask::on_run_fails() +{ + LogTraceFunction; + + if (!m_cur_task_ptr || m_cur_task_ptr->on_error_next.empty()) { + return false; + } + + set_tasks(m_cur_task_ptr->on_error_next); + return run(); +} + void ProcessTask::exec_click_task(const Rect& matched_rect) { m_ctrler->click(matched_rect); diff --git a/src/MeoAssistant/ProcessTask.h b/src/MeoAssistant/ProcessTask.h index d30e03fdb1..98e39a1e89 100644 --- a/src/MeoAssistant/ProcessTask.h +++ b/src/MeoAssistant/ProcessTask.h @@ -24,11 +24,13 @@ namespace asst protected: virtual bool _run() override; + virtual bool on_run_fails() override; void exec_click_task(const Rect& matched_rect); void exec_swipe_task(ProcessTaskAction action); void exec_slowly_swipe_task(ProcessTaskAction action); + std::shared_ptr m_cur_task_ptr = nullptr; std::vector m_raw_tasks_name; std::vector m_cur_tasks_name; std::unordered_map m_rear_delay; diff --git a/src/MeoAssistant/TaskData.cpp b/src/MeoAssistant/TaskData.cpp index 7c23e79396..d6ebabc49b 100644 --- a/src/MeoAssistant/TaskData.cpp +++ b/src/MeoAssistant/TaskData.cpp @@ -160,8 +160,11 @@ bool asst::TaskData::parse(const json::value& json) task_info_ptr->exceeded_next.emplace_back(excceed_next.as_string()); } } - else { - task_info_ptr->exceeded_next.emplace_back("Stop"); + if (task_json.contains("onErrorNext")) { + const json::array& on_error_next_arr = task_json.at("onErrorNext").as_array(); + for (const json::value& on_error_next : on_error_next_arr) { + task_info_ptr->on_error_next.emplace_back(on_error_next.as_string()); + } } task_info_ptr->pre_delay = task_json.get("preDelay", 0); task_info_ptr->rear_delay = task_json.get("rearDelay", 0); diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 54c17f836a..2e25236389 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -383,7 +383,7 @@ namespace MeoAsstGui mainModel.AddLog("投资达到上限", "darkcyan"); break; - case "MaybeCrashAndRestartGame": + case "RestartGameAndContinueFighting": mainModel.AddLog("游戏崩溃,重新启动", "darkgoldenrod"); break; From 6759ebbaad20d18a3f2f9b8747109e45953f6179 Mon Sep 17 00:00:00 2001 From: MistEO Date: Wed, 8 Jun 2022 22:06:48 +0800 Subject: [PATCH 03/14] =?UTF-8?q?fix.=E4=BF=AE=E5=A4=8D=E5=85=AC=E6=8B=9B?= =?UTF-8?q?=E5=BC=B9=E4=B8=80=E5=A4=A7=E5=A0=86=E9=80=9A=E7=9F=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAsstGui/Helper/AsstProxy.cs | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 2e25236389..768de8f32c 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -604,16 +604,6 @@ namespace MeoAsstGui } break; - case "RecruitSpecialTag": - { - string special = subTaskDetails["tag"].ToString(); - using (var toast = new ToastNotification("公招提示")) - { - toast.AppendContentText(special).ShowRecruit(); - } - } - break; - case "RecruitResult": { string resultContent = string.Empty; @@ -635,13 +625,6 @@ namespace MeoAsstGui resultContent += "\n\n"; } recruitModel.RecruitResult = resultContent; - if (level >= 5) - { - using (var toast = new ToastNotification($"公招出 {level} 星了哦!")) - { - toast.AppendContentText(new string('★', level)).ShowRecruit(row: 2); - } - } } break; } From 8536fb853c89f64bc28aae9ba8aa369029a7003f Mon Sep 17 00:00:00 2001 From: MistEO Date: Wed, 8 Jun 2022 22:14:43 +0800 Subject: [PATCH 04/14] =?UTF-8?q?fix.=E4=BF=AE=E5=A4=8D=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E6=8C=87=E6=8C=A5=E5=A4=B1=E8=B4=A5=E5=90=8E?= =?UTF-8?q?=E5=8D=A1=E4=BD=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/resource/tasks.json b/resource/tasks.json index 9d744e6e50..f718e796b7 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -1263,6 +1263,10 @@ "UseMedicine", "UseStone", "NoStone", + "StartToWakeUp", + "StartUpConnectingFlag", + "StartLoginBServer", + "OfflineConfirm", "ClickCornerAfterPRTS_2" ] }, @@ -1283,7 +1287,12 @@ "StartButton2", "UseMedicine", "UseStone", - "NoStone" + "NoStone", + "GameStart", + "StartToWakeUp", + "StartUpConnectingFlag", + "StartLoginBServer", + "OfflineConfirm" ], "onErrorNext": [ "RestartGameAndContinueFighting" @@ -1489,6 +1498,9 @@ "StartLoginBServer", "OfflineConfirm", "StartButton1" + ], + "onErrorNext": [ + "ClickCornerAfterPRTS_1" ] }, "OfflineConfirmAfterBattle": { From 02b13f16e5d9588c23a19369c560624debb5ba0b Mon Sep 17 00:00:00 2001 From: lhhxxxxx <91231470+lhhxxxxx@users.noreply.github.com> Date: Thu, 9 Jun 2022 00:12:59 +0800 Subject: [PATCH 05/14] =?UTF-8?q?Update=20=E9=9B=86=E6=88=90=E6=96=87?= =?UTF-8?q?=E6=A1=A3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/集成文档.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/集成文档.md b/docs/集成文档.md index 89978650a4..ac0df6bdac 100644 --- a/docs/集成文档.md +++ b/docs/集成文档.md @@ -33,7 +33,15 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p - `StartUp` 开始唤醒 - 不支持设置参数 + +```jsonc +// 对应的任务参数 +{ + "client_type": string, // 客户端版本,可选,默认为空 + // 选项:"Official" | "Bilibili" + "start_game_enable": bool, // 是否自动启动客户端,可选,默认不启动 +} +``` - `Fight` 刷理智 From 909562b3b7049faaf6085761c4651934567f2416 Mon Sep 17 00:00:00 2001 From: MistEO Date: Thu, 9 Jun 2022 00:18:56 +0800 Subject: [PATCH 06/14] =?UTF-8?q?feat.=E6=96=B0=E5=A2=9E=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=A8=A1=E6=8B=9F=E5=99=A8=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=A3=80=E6=9F=A5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E5=8A=9F=E8=83=BD=E3=80=82=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=BA=9B=E7=95=8C=E9=9D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 1 + src/MeoAssistant/StartUpTask.cpp | 3 +- src/MeoAsstGui/Helper/AsstProxy.cs | 17 ++- src/MeoAsstGui/MeoAsstGui.csproj | 2 +- .../UserControl/StartSettingsUserControl.xaml | 48 +++++--- .../UserControl/ToastSettingsUserControl.xaml | 29 +++-- .../VersionUpdateSettingsUserControl.xaml | 4 +- .../ViewModels/SettingsViewModel.cs | 114 +++++++++++++++--- .../{StartAppModel.cs => StartSelfModel.cs} | 5 +- .../ViewModels/TaskQueueViewModel.cs | 2 +- .../ViewModels/VersionUpdateViewModel.cs | 10 +- src/MeoAsstGui/Views/SettingsView.xaml | 6 +- 12 files changed, 175 insertions(+), 66 deletions(-) rename src/MeoAsstGui/ViewModels/{StartAppModel.cs => StartSelfModel.cs} (97%) diff --git a/resource/tasks.json b/resource/tasks.json index f718e796b7..51001dcf4e 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -779,6 +779,7 @@ "TodaysSupplies", "ReturnToTerminal", "OfflineConfirm", + "EndOfAction", "StageSNFlag" ] }, diff --git a/src/MeoAssistant/StartUpTask.cpp b/src/MeoAssistant/StartUpTask.cpp index 7508377335..d4696b960b 100644 --- a/src/MeoAssistant/StartUpTask.cpp +++ b/src/MeoAssistant/StartUpTask.cpp @@ -11,7 +11,8 @@ asst::StartUpTask::StartUpTask(AsstCallback callback, void* callback_arg) { m_start_up_task_ptr->set_tasks({ "StartUp" }) .set_times_limit("ReturnToTerminal", 0) - .set_times_limit("Terminal", 0); + .set_times_limit("Terminal", 0) + .set_times_limit("EndOfAction", 0); m_subtasks.emplace_back(m_start_game_task_ptr); m_subtasks.emplace_back(m_start_up_task_ptr); } diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 768de8f32c..45778fd628 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -12,6 +12,7 @@ using System; using System.Runtime.InteropServices; using System.Text; +using System.Threading.Tasks; using System.Windows; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -86,8 +87,20 @@ namespace MeoAsstGui Environment.Exit(0); }); } - var tvm = _container.Get(); - tvm.Idle = true; + var mainModel = _container.Get(); + mainModel.Idle = true; + var settingsModel = _container.Get(); + if (settingsModel.RunDirectly) + { + Execute.OnUIThread(() => + { + Task.Run(() => + { + settingsModel.TryToStartEmulator(); + }); + mainModel.LinkStart(); + }); + } } [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)] diff --git a/src/MeoAsstGui/MeoAsstGui.csproj b/src/MeoAsstGui/MeoAsstGui.csproj index bc1485c184..50f5fe3bbd 100644 --- a/src/MeoAsstGui/MeoAsstGui.csproj +++ b/src/MeoAsstGui/MeoAsstGui.csproj @@ -138,7 +138,7 @@ VersionUpdateSettingsUserControl.xaml - + diff --git a/src/MeoAsstGui/UserControl/StartSettingsUserControl.xaml b/src/MeoAsstGui/UserControl/StartSettingsUserControl.xaml index 218e84cf6c..b630147429 100644 --- a/src/MeoAsstGui/UserControl/StartSettingsUserControl.xaml +++ b/src/MeoAsstGui/UserControl/StartSettingsUserControl.xaml @@ -8,31 +8,39 @@ mc:Ignorable="d" xmlns:vm="clr-namespace:MeoAsstGui;assembly=MeoAsstGui" d:DataContext="{d:DesignInstance {x:Type vm:SettingsViewModel}}" - d:DesignHeight="90" d:DesignWidth="400"> + d:DesignHeight="300" d:DesignWidth="400"> - - - + + - - - - - - - - + + + + + + + + + + + +