From d2d98903d61dcfd9b27f0318bc01e6287ed5e2ba Mon Sep 17 00:00:00 2001 From: MistEO Date: Thu, 23 Jun 2022 23:32:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E4=B8=AD=E4=BF=AE=E6=94=B9=E5=88=B7=E7=90=86=E6=99=BA=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/Assistant.cpp | 19 +-- src/MeoAsstGui/Helper/AsstProxy.cs | 121 ++++++++++++------ .../UserControl/FightSettingsUserControl.xaml | 25 ++-- .../ViewModels/TaskQueueViewModel.cs | 39 ++++++ 4 files changed, 142 insertions(+), 62 deletions(-) diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index e382389b19..054a389bfa 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -88,15 +88,15 @@ else if (type == TASK::TaskType) { ptr = std::make_shared(task_callback, s if (false) {} ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(FightTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(StartUpTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(AwardTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(VisitTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(MallTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(InfrastTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(RecruitTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(RoguelikeTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(CopilotTask) - ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(DepotTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(StartUpTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(AwardTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(VisitTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(MallTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(InfrastTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(RecruitTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(RoguelikeTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(CopilotTask) + ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(DepotTask) #ifdef ASST_DEBUG ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH(DebugTask) #endif @@ -238,6 +238,7 @@ void Assistant::working_proc() task_callback(run_msg, callback_json, this); if (!m_thread_idle && m_tasks_list.empty()) { + callback_json["runned_tasks"] = json::array(runned_tasks); task_callback(AsstMsg::AllTasksCompleted, callback_json, this); runned_tasks.clear(); } diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 7e62bd66a8..203b7a37ad 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -10,6 +10,7 @@ // but WITHOUT ANY WARRANTY using System; +using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; @@ -59,6 +60,11 @@ namespace MeoAsstGui [DllImport("MeoAssistant.dll")] private static extern bool AsstSetTaskParams(AsstHandle handle, TaskId id, byte[] task_params); + private static bool AsstSetTaskParams(AsstHandle handle, TaskId id, string task_params) + { + return AsstSetTaskParams(handle, id, Encoding.UTF8.GetBytes(task_params)); + } + [DllImport("MeoAssistant.dll")] private static extern bool AsstStart(AsstHandle handle); [DllImport("MeoAssistant.dll")] private static extern bool AsstStop(AsstHandle handle); @@ -289,8 +295,8 @@ namespace MeoAsstGui if (runned_tasks.Count == 1) { var unique_runned_task = (TaskId)runned_tasks[0]; - if (unique_runned_task == _latestCopilotTaskId - || unique_runned_task == _latestRecruitCalcTaskId) + if (unique_runned_task == (_latestTaskId.TryGetValue(TaskType.Copilot, out var copilotTaskId) ? copilotTaskId : 0) + || unique_runned_task == (_latestTaskId.TryGetValue(TaskType.RecruitCalc, out var recruitCalcTaskId) ? recruitCalcTaskId : 0)) { isMainTaskQueueAllCompleted = false; } @@ -309,6 +315,7 @@ namespace MeoAsstGui //mainModel.CheckAndShutdown(); mainModel.CheckAfterComplete(); } + _latestTaskId.Clear(); break; } } @@ -777,9 +784,33 @@ namespace MeoAsstGui return AsstAppendTask(_handle, type, JsonConvert.SerializeObject(task_params)); } - private TaskId _latestFightTaskId = 0; + private bool AsstSetTaskParamsWithEncoding(TaskId id, JObject task_params = null) + { + if (id == 0) + { + return false; + } + task_params = task_params ?? new JObject(); + return AsstSetTaskParams(_handle, id, JsonConvert.SerializeObject(task_params)); + } - public bool AsstAppendFight(string stage, int max_medicine, int max_stone, int max_times, string drops_item_id, int drops_item_quantity) + private enum TaskType + { + StartUp, + Fight, + Recruit, + Infrast, + Visit, + Mall, + Award, + Roguelike, + RecruitCalc, + Copilot + }; + + private Dictionary _latestTaskId = new Dictionary(); + + private JObject serializeFightTaskParams(string stage, int max_medicine, int max_stone, int max_times, string drops_item_id, int drops_item_quantity) { var task_params = new JObject(); task_params["stage"] = stage; @@ -796,51 +827,58 @@ namespace MeoAsstGui task_params["client_type"] = settings.ClientType; task_params["penguin_id"] = settings.PenguinId; task_params["server"] = "CN"; - _latestFightTaskId = AsstAppendTaskWithEncoding("Fight", task_params); - return _latestFightTaskId != 0; + return task_params; } - private TaskId _latestAwardTaskId = 0; + public bool AsstAppendFight(string stage, int max_medicine, int max_stone, int max_times, string drops_item_id, int drops_item_quantity) + { + var task_params = serializeFightTaskParams(stage, max_medicine, max_stone, max_times, drops_item_id, drops_item_quantity); + TaskId id = AsstAppendTaskWithEncoding("Fight", task_params); + _latestTaskId[TaskType.Fight] = id; + return id != 0; + } + + public bool AsstSetFightTaskParams(string stage, int max_medicine, int max_stone, int max_times, string drops_item_id, int drops_item_quantity) + { + var task_params = serializeFightTaskParams(stage, max_medicine, max_stone, max_times, drops_item_id, drops_item_quantity); + return AsstSetTaskParamsWithEncoding(_latestTaskId.TryGetValue(TaskType.Fight, out var task_id) ? task_id : 0, task_params); + } public bool AsstAppendAward() { - _latestAwardTaskId = AsstAppendTaskWithEncoding("Award"); - return _latestAwardTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("Award"); + _latestTaskId[TaskType.Award] = id; + return id != 0; } - private TaskId _latestStartupTaskId = 0; - public bool AsstAppendStartUp(string client_type, bool enable) { var task_params = new JObject(); task_params["client_type"] = client_type; task_params["start_game_enable"] = enable; - _latestStartupTaskId = AsstAppendTaskWithEncoding("StartUp", task_params); - return _latestStartupTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("StartUp", task_params); + _latestTaskId[TaskType.StartUp] = id; + return id != 0; } - private TaskId _latestVisitTaskId = 0; - public bool AsstAppendVisit() { - _latestVisitTaskId = AsstAppendTaskWithEncoding("Visit"); - return _latestVisitTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("Visit"); + _latestTaskId[TaskType.Visit] = id; + return id != 0; } - private TaskId _latestMallTaskId = 0; - public bool AsstAppendMall(bool with_shopping, string[] firstlist, string[] blacklist) { var task_params = new JObject(); task_params["shopping"] = with_shopping; task_params["buy_first"] = new JArray { firstlist }; task_params["blacklist"] = new JArray { blacklist }; - _latestMallTaskId = AsstAppendTaskWithEncoding("Mall", task_params); - return _latestMallTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("Mall", task_params); + _latestTaskId[TaskType.Mall] = id; + return id != 0; } - private TaskId _latestRecruitTaskId = 0; - public bool AsstAppendRecruit(int max_times, int[] select_level, int required_len, int[] confirm_level, int confirm_len, bool need_refresh, bool use_expedited, bool skip_robot) { var task_params = new JObject(); @@ -852,12 +890,11 @@ namespace MeoAsstGui task_params["expedite"] = use_expedited; task_params["expedite_times"] = max_times; task_params["skip_robot"] = skip_robot; - _latestRecruitTaskId = AsstAppendTaskWithEncoding("Recruit", task_params); - return _latestRecruitTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("Recruit", task_params); + _latestTaskId[TaskType.Recruit] = id; + return id != 0; } - private TaskId _latestInfrastTaskId = 0; - public bool AsstAppendInfrast(int work_mode, string[] order, int order_len, string uses_of_drones, double dorm_threshold) { var task_params = new JObject(); @@ -866,22 +903,20 @@ namespace MeoAsstGui task_params["drones"] = uses_of_drones; task_params["threshold"] = dorm_threshold; task_params["replenish"] = true; - _latestInfrastTaskId = AsstAppendTaskWithEncoding("Infrast", task_params); - return _latestInfrastTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("Infrast", task_params); + _latestTaskId[TaskType.Infrast] = id; + return id != 0; } - private TaskId _latestRoguelikeTaskId = 0; - public bool AsstAppendRoguelike(int mode) { var task_params = new JObject(); task_params["mode"] = mode; - _latestRoguelikeTaskId = AsstAppendTaskWithEncoding("Roguelike", task_params); - return _latestRoguelikeTaskId != 0; + TaskId id = AsstAppendTaskWithEncoding("Roguelike", task_params); + _latestTaskId[TaskType.Roguelike] = id; + return id != 0; } - private TaskId _latestRecruitCalcTaskId = 0; - public bool AsstStartRecruitCalc(int[] select_level, int required_len, bool set_time) { var task_params = new JObject(); @@ -892,20 +927,20 @@ namespace MeoAsstGui task_params["set_time"] = true; task_params["expedite"] = false; task_params["expedite_times"] = 0; - _latestRecruitCalcTaskId = AsstAppendTaskWithEncoding("Recruit", task_params); - return _latestRecruitCalcTaskId != 0 && AsstStart(); + TaskId id = AsstAppendTaskWithEncoding("Recruit", task_params); + _latestTaskId[TaskType.RecruitCalc] = id; + return id != 0; } - private TaskId _latestCopilotTaskId = 0; - public bool AsstStartCopilot(string stage_name, string filename, bool formation) { var task_params = new JObject(); task_params["stage_name"] = stage_name; task_params["filename"] = filename; task_params["formation"] = formation; - _latestCopilotTaskId = AsstAppendTaskWithEncoding("Copilot", task_params); - return _latestCopilotTaskId != 0 && AsstStart(); + TaskId id = AsstAppendTaskWithEncoding("Copilot", task_params); + _latestTaskId[TaskType.Copilot] = id; + return id != 0; } public bool AsstStart() @@ -915,7 +950,9 @@ namespace MeoAsstGui public bool AsstStop() { - return AsstStop(_handle); + bool ret = AsstStop(_handle); + _latestTaskId.Clear(); + return ret; } public void AsstDestroy() diff --git a/src/MeoAsstGui/UserControl/FightSettingsUserControl.xaml b/src/MeoAsstGui/UserControl/FightSettingsUserControl.xaml index 5d278e9c43..a1c94cf62c 100644 --- a/src/MeoAsstGui/UserControl/FightSettingsUserControl.xaml +++ b/src/MeoAsstGui/UserControl/FightSettingsUserControl.xaml @@ -4,11 +4,13 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:hc="https://handyorg.github.io/handycontrol" - xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding" mc:Ignorable="d" + xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding" xmlns:vm="clr-namespace:MeoAsstGui;assembly=MeoAsstGui" + xmlns:s="https://github.com/canton7/Stylet" + xmlns:local="clr-namespace:MeoAsstGui" d:DataContext="{d:DesignInstance {x:Type vm:TaskQueueViewModel}}" - d:DesignHeight="200" d:DesignWidth="300"> + d:DesignHeight="500" d:DesignWidth="300"> @@ -17,32 +19,32 @@ + - - + - - + - - + - + - @@ -68,5 +70,6 @@ SelectedValuePath="Value" SelectedValue="{Binding Stage}" /> +