From 6e9c1914c2a43d08973b7ad14942b06bdab1d320 Mon Sep 17 00:00:00 2001 From: lhhxxxxx Date: Sat, 4 Jun 2022 23:15:03 +0800 Subject: [PATCH] underlying codes implement --- resource/config.json | 4 ++++ src/MeoAssistant/AsstTypes.h | 6 ++++++ src/MeoAssistant/Controller.cpp | 16 ++++++++++++++++ src/MeoAssistant/Controller.h | 6 +++++- src/MeoAssistant/GeneralConfiger.cpp | 6 ++++++ src/MeoAssistant/GeneralConfiger.h | 12 ++++++++++++ 6 files changed, 49 insertions(+), 1 deletion(-) diff --git a/resource/config.json b/resource/config.json index 03f138bdd2..bf793c7fe3 100644 --- a/resource/config.json +++ b/resource/config.json @@ -18,6 +18,10 @@ "cmdFormat_Doc": "命令格式,想打印详细信息可以尝试添加 -v -i" } }, + "intent": { + "Official": "com.hypergryph.arknights/com.u8.sdk.U8UnityContext", + "Bilibili": "com.hypergryph.arknights.bilibili/com.u8.sdk.U8UnityContext" + }, "connection": { "General": { "devices": "[Adb] devices", diff --git a/src/MeoAssistant/AsstTypes.h b/src/MeoAssistant/AsstTypes.h index 1a8490a980..86f0d37f52 100644 --- a/src/MeoAssistant/AsstTypes.h +++ b/src/MeoAssistant/AsstTypes.h @@ -158,6 +158,12 @@ namespace asst double score = 0.0; Rect rect; }; + + enum class ServerType + { + Official, + Bilibili + }; } namespace std diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 9ab6a6249f..31e990a0e4 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -522,6 +522,21 @@ cv::Mat asst::Controller::get_resized_image() const return resized_mat; } +int asst::Controller::start_game(const ServerType& server_type, bool block) +{ + if (auto intent_name = Resrc.cfg().get_intent_name(server_type)) + { + std::string cur_cmd = utils::string_replace_all(m_adb.start, "[Intent]", intent_name.value()); + int id = push_cmd(cur_cmd); + if (block) + { + wait(id); + } + return id; + } + return -1; +} + int asst::Controller::click(const Point& p, bool block) { int x = static_cast(p.x * m_control_scale); @@ -828,6 +843,7 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a m_adb.screencap_raw_with_gzip = cmd_replace(adb_cfg.screencap_raw_with_gzip); 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); return true; } diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 47e2d117bb..7fb9101f30 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -37,7 +37,9 @@ namespace asst cv::Mat get_image(bool raw = false); std::vector get_image_encode() const; - // 点击和滑动都是异步执行,返回该任务的id + // 开启/置顶游戏、点击和滑动都是异步执行,返回该任务的id + int start_game(const ServerType& server_type = asst::ServerType::Official, bool block = true); + int click(const Point& p, bool block = true); int click(const Rect& rect, bool block = true); int click_without_scale(const Point& p, bool block = true); @@ -108,6 +110,8 @@ namespace asst std::string screencap_encode; std::string release; + std::string start; + /* propertities */ enum class ScreencapEndOfLine { diff --git a/src/MeoAssistant/GeneralConfiger.cpp b/src/MeoAssistant/GeneralConfiger.cpp index 47c372bcb1..d9e65a78f4 100644 --- a/src/MeoAssistant/GeneralConfiger.cpp +++ b/src/MeoAssistant/GeneralConfiger.cpp @@ -28,6 +28,11 @@ bool asst::GeneralConfiger::parse(const json::value& json) m_options.aip_ocr.client_id = aip_ocr.get("clientId", std::string()); m_options.aip_ocr.client_secret = aip_ocr.get("clientSerect", std::string()); } + + const json::value& intent_json = json.at("intent"); + m_intent_name[asst::ServerType::Official] = intent_json.at("Official").as_string(); + m_intent_name[asst::ServerType::Bilibili] = intent_json.at("Bilibili").as_string(); + } for (const auto& [name, cfg_json] : json.at("connection").as_object()) { @@ -45,6 +50,7 @@ bool asst::GeneralConfiger::parse(const json::value& json) adb.screencap_raw_with_gzip = cfg_json.at("screencapRawWithGzip").as_string(); 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.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 cb1ee76c99..6cd7121dd7 100644 --- a/src/MeoAssistant/GeneralConfiger.h +++ b/src/MeoAssistant/GeneralConfiger.h @@ -53,6 +53,7 @@ namespace asst std::string screencap_raw_with_gzip; std::string screencap_encode; std::string release; + std::string start; }; class GeneralConfiger : public AbstractConfiger @@ -83,6 +84,16 @@ namespace asst } } + [[nodiscard]] std::optional get_intent_name(const asst::ServerType& server_type) const + { + if (auto iter = m_intent_name.find(server_type); + iter != m_intent_name.cend()) + { + return iter->second; + } + return std::nullopt; + } + void set_options(Options opt) noexcept { m_options = std::move(opt); @@ -94,5 +105,6 @@ namespace asst std::string m_version; Options m_options; std::unordered_map m_adb_cfg; + std::unordered_map m_intent_name; }; }