diff --git a/resource/config.json b/resource/config.json index 740b67aefb..936c7d69a7 100644 --- a/resource/config.json +++ b/resource/config.json @@ -44,7 +44,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "BlueStacks": { "devices": "[Adb] devices", @@ -61,7 +62,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "MuMuEmulator": { "devices": "[Adb] devices", @@ -78,7 +80,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "LDPlayer": { "devices": "[Adb] devices", @@ -95,7 +98,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] shell \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "Nox": { "devices": "[Adb] devices", @@ -112,7 +116,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "XYAZ": { "devices": "[Adb] devices", @@ -129,7 +134,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] shell \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "WSA": { "devices": "[Adb] devices", @@ -147,7 +153,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] shell \"screencap -d [DisplayId] | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -d [DisplayId] -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" }, "Compatible": { "devices": "[Adb] devices", @@ -164,7 +171,8 @@ "screencapRawWithGzip": "[Adb] -s [AdbSerial] exec-out \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", - "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]" + "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" } } } diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index 89d03ce20e..b29f5c6ec5 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -13,6 +13,7 @@ #include "FightTask.h" #include "StartUpTask.h" +#include "CloseDownTask.h" #include "AwardTask.h" #include "VisitTask.h" #include "MallTask.h" @@ -89,6 +90,7 @@ 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(CloseDownTask) 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) diff --git a/src/MeoAssistant/CloseDownTask.cpp b/src/MeoAssistant/CloseDownTask.cpp new file mode 100644 index 0000000000..087fbe3c79 --- /dev/null +++ b/src/MeoAssistant/CloseDownTask.cpp @@ -0,0 +1,12 @@ +#include "CloseDownTask.h" + +#include + +#include "ProcessTask.h" + +asst::CloseDownTask::CloseDownTask(AsstCallback callback, void* callback_arg) + : PackageTask(std::move(callback), callback_arg, TaskType), + m_stop_game_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)) +{ + m_subtasks.emplace_back(m_stop_game_task_ptr); +} diff --git a/src/MeoAssistant/CloseDownTask.h b/src/MeoAssistant/CloseDownTask.h new file mode 100644 index 0000000000..dc5848ae41 --- /dev/null +++ b/src/MeoAssistant/CloseDownTask.h @@ -0,0 +1,19 @@ +#pragma once +#include "PackageTask.h" +#include "StopGameTaskPlugin.h" + +namespace asst +{ + class ProcessTask; + + class CloseDownTask final : public PackageTask + { + public: + CloseDownTask(AsstCallback callback, void* callback_arg); + virtual ~CloseDownTask() = default; + + static constexpr const char* TaskType = "CloseDown"; + private: + std::shared_ptr m_stop_game_task_ptr = nullptr; + }; +} diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 893e45c643..6dbbbcb8fc 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -785,6 +785,16 @@ std::optional asst::Controller::start_game(const std::string& client_type, return std::nullopt; } +std::optional asst::Controller::stop_game(bool block) +{ + std::string cur_cmd = m_adb.stop; + int id = push_cmd(cur_cmd); + if (block) { + wait(id); + } + return id; +} + int asst::Controller::click(const Point& p, bool block) { int x = static_cast(p.x * m_control_scale); @@ -1112,6 +1122,7 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a m_adb.screencap_encode = cmd_replace(adb_cfg.screencap_encode); m_adb.release = cmd_replace(adb_cfg.release); m_adb.start = cmd_replace(adb_cfg.start); + m_adb.stop = cmd_replace(adb_cfg.stop); if (m_support_socket && !m_server_started) { std::string bind_address; diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index cbb044fdf7..7077784dfc 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -41,6 +41,7 @@ namespace asst /* 开启游戏、点击和滑动都是异步执行,返回该任务的id */ std::optional start_game(const std::string& client_type, bool block = true); + std::optional stop_game(bool block = true); int click(const Point& p, bool block = true); int click(const Rect& rect, bool block = true); @@ -126,6 +127,7 @@ namespace asst std::string release; std::string start; + std::string stop; /* propertities */ enum class ScreencapEndOfLine diff --git a/src/MeoAssistant/GeneralConfiger.cpp b/src/MeoAssistant/GeneralConfiger.cpp index 3b1f840d27..d41a59227f 100644 --- a/src/MeoAssistant/GeneralConfiger.cpp +++ b/src/MeoAssistant/GeneralConfiger.cpp @@ -44,6 +44,7 @@ bool asst::GeneralConfiger::parse(const json::value& json) adb.screencap_encode = cfg_json.at("screencapEncode").as_string(); adb.release = cfg_json.at("release").as_string(); adb.start = cfg_json.at("start").as_string(); + adb.stop = cfg_json.at("stop").as_string(); //adb.pullscreen = cfg_json.at("pullscreen").as_string(); m_adb_cfg[name] = std::move(adb); diff --git a/src/MeoAssistant/GeneralConfiger.h b/src/MeoAssistant/GeneralConfiger.h index 1b9cf0bf33..db1000ae92 100644 --- a/src/MeoAssistant/GeneralConfiger.h +++ b/src/MeoAssistant/GeneralConfiger.h @@ -54,6 +54,7 @@ namespace asst std::string screencap_encode; std::string release; std::string start; + std::string stop; }; class GeneralConfiger : public AbstractConfiger diff --git a/src/MeoAssistant/MeoAssistant.vcxproj b/src/MeoAssistant/MeoAssistant.vcxproj index d35224f08d..21b1cc44ad 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj +++ b/src/MeoAssistant/MeoAssistant.vcxproj @@ -25,6 +25,7 @@ + @@ -91,6 +92,7 @@ + @@ -107,6 +109,7 @@ + @@ -174,6 +177,7 @@ + diff --git a/src/MeoAssistant/MeoAssistant.vcxproj.filters b/src/MeoAssistant/MeoAssistant.vcxproj.filters index 4b62fdbed2..f6435d17a4 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj.filters +++ b/src/MeoAssistant/MeoAssistant.vcxproj.filters @@ -339,6 +339,12 @@ 头文件\Task + + 头文件 + + + 头文件 + @@ -581,6 +587,12 @@ 源文件\Task + + 源文件 + + + 源文件 + diff --git a/src/MeoAssistant/StopGameTaskPlugin.cpp b/src/MeoAssistant/StopGameTaskPlugin.cpp new file mode 100644 index 0000000000..bf5c198c01 --- /dev/null +++ b/src/MeoAssistant/StopGameTaskPlugin.cpp @@ -0,0 +1,10 @@ +#include "StopGameTaskPlugin.h" + +#include "Controller.h" + +using namespace asst; + +bool StopGameTaskPlugin::_run() +{ + return m_ctrler->stop_game().has_value(); +} diff --git a/src/MeoAssistant/StopGameTaskPlugin.h b/src/MeoAssistant/StopGameTaskPlugin.h new file mode 100644 index 0000000000..3255a112fc --- /dev/null +++ b/src/MeoAssistant/StopGameTaskPlugin.h @@ -0,0 +1,23 @@ +#pragma once + +#include "AbstractTaskPlugin.h" +#include "AsstTypes.h" + +namespace asst +{ + + class StopGameTaskPlugin : public AbstractTaskPlugin + { + public: + using AbstractTaskPlugin::AbstractTaskPlugin; + virtual ~StopGameTaskPlugin() noexcept override = default; + + virtual bool verify(AsstMsg msg, const json::value& details) const override + { + std::ignore = msg; std::ignore = details; return true; + } + + protected: + bool _run() override; + }; +} diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 288c74a67e..dab0f4f97a 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -815,6 +815,7 @@ namespace MeoAsstGui private enum TaskType { StartUp, + CloseDown, Fight, Recruit, Infrast, @@ -879,6 +880,13 @@ namespace MeoAsstGui return id != 0; } + public bool AsstStartCloseDown() + { + TaskId id = AsstAppendTaskWithEncoding("CloseDown"); + _latestTaskId[TaskType.CloseDown] = id; + return id != 0 && AsstStart(); + } + public bool AsstAppendVisit() { TaskId id = AsstAppendTaskWithEncoding("Visit"); diff --git a/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs b/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs index 7ed887f024..c2a291337b 100644 --- a/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs +++ b/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs @@ -109,6 +109,7 @@ namespace MeoAsstGui ActionAfterCompletedList = new List> { new GenericCombData{ Display="无动作",Value=ActionType.DoNothing }, + new GenericCombData{ Display="退出 明日方舟",Value=ActionType.StopGame }, new GenericCombData{ Display="退出 MAA",Value=ActionType.ExitSelf }, new GenericCombData{ Display="关闭模拟器",Value=ActionType.ExitEmulator }, new GenericCombData{ Display="退出并关闭模拟器",Value=ActionType.ExitEmulatorAndSelf }, @@ -349,6 +350,11 @@ namespace MeoAsstGui return; } + if (ActionAfterCompleted == ActionType.StopGame) + { + ret &= asstProxy.AsstStartCloseDown(); + } + ret &= asstProxy.AsstStart(); if (ret) @@ -608,6 +614,7 @@ namespace MeoAsstGui public enum ActionType { DoNothing, + StopGame, ExitSelf, ExitEmulator, ExitEmulatorAndSelf,