From 50ccafdf440ea9871bd14cc5b9bdf3e274a85300 Mon Sep 17 00:00:00 2001 From: MistEO Date: Wed, 9 Mar 2022 23:23:29 +0800 Subject: [PATCH] =?UTF-8?q?feat.=E6=96=B0=E5=A2=9E=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/集成文档.md | 31 ++++++++++--- src/MeoAssistant/Assistant.cpp | 23 ++++++++-- src/MeoAssistant/AwardTask.cpp | 11 +++++ src/MeoAssistant/AwardTask.h | 18 ++++++++ src/MeoAssistant/CreditShopImageAnalyzer.cpp | 22 +++++++++- src/MeoAssistant/CreditShopImageAnalyzer.h | 6 +++ src/MeoAssistant/CreditShoppingTask.cpp | 12 ++++++ src/MeoAssistant/CreditShoppingTask.h | 6 +++ src/MeoAssistant/FightTask.cpp | 17 +++++--- src/MeoAssistant/FightTask.h | 2 +- src/MeoAssistant/MallTask.cpp | 43 +++++++++++++++++++ src/MeoAssistant/MallTask.h | 22 ++++++++++ src/MeoAssistant/MeoAssistant.vcxproj | 6 +++ src/MeoAssistant/MeoAssistant.vcxproj.filters | 18 ++++++++ src/MeoAssistant/PackageTask.cpp | 3 ++ src/MeoAssistant/PackageTask.h | 2 +- src/MeoAssistant/StartUpTask.cpp | 13 +++--- src/MeoAssistant/StartUpTask.h | 2 +- src/MeoAssistant/VisitTask.cpp | 11 +++++ src/MeoAssistant/VisitTask.h | 18 ++++++++ 20 files changed, 258 insertions(+), 28 deletions(-) create mode 100644 src/MeoAssistant/AwardTask.cpp create mode 100644 src/MeoAssistant/AwardTask.h create mode 100644 src/MeoAssistant/MallTask.cpp create mode 100644 src/MeoAssistant/MallTask.h create mode 100644 src/MeoAssistant/VisitTask.cpp create mode 100644 src/MeoAssistant/VisitTask.h diff --git a/docs/集成文档.md b/docs/集成文档.md index 8cc886f690..e5dfa659bc 100644 --- a/docs/集成文档.md +++ b/docs/集成文档.md @@ -33,13 +33,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p - `StartUp` 开始唤醒 - -```jsonc -// 对应的任务参数 -{ - // 不支持参数设置 -} -``` + 不支持设置参数 - `Fight` 刷理智 @@ -54,6 +48,29 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p } ``` +- `Award` + 领取日常奖励 + 不支持设置参数 + +- `Visit` + 访问好友 + 不支持设置参数 + +- `Mall` + 领取信用及商店购物 + +```jsonc +// 对应的任务参数 +{ + "shopping": bool, // 是否购物,可选,默认 false + "shopping_list": [ // 购物列表,当 shopping 为 true 时必选 + string, // 商品名,如 "加急许可"、"家具零件" 等 + ... + ], + "is_black_list": bool // 购物列表是否是黑名单模式,可选,默认 false +} +``` + ### `AsstSetTaskParams` #### 接口原型 diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index dd692b44c8..bc81d8df2a 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -14,6 +14,9 @@ #include "FightTask.h" #include "StartUpTask.h" +#include "AwardTask.h" +#include "VisitTask.h" +#include "MallTask.h" using namespace asst; @@ -75,13 +78,25 @@ asst::Assistant::TaskId asst::Assistant::append_task(const std::string& type, co } std::shared_ptr ptr = nullptr; - if (type == "Fight") { + if (type == FightTask::TaskType) { ptr = std::make_shared(task_callback, (void*)this); - ptr->set_params(ret.value()); } - else if (type == "StartUp") { + else if (type == StartUpTask::TaskType) { ptr = std::make_shared(task_callback, (void*)this); - ptr->set_params(ret.value()); + } + else if (type == AwardTask::TaskType) { + ptr = std::make_shared(task_callback, (void*)this); + } + else if (type == VisitTask::TaskType) { + ptr = std::make_shared(task_callback, (void*)this); + } + else if (type == MallTask::TaskType) { + ptr = std::make_shared(task_callback, (void*)this); + } + + bool params_ret = ptr->set_params(ret.value()); + if (!params_ret) { + return 0; } std::unique_lock lock(m_mutex); diff --git a/src/MeoAssistant/AwardTask.cpp b/src/MeoAssistant/AwardTask.cpp new file mode 100644 index 0000000000..85602e5322 --- /dev/null +++ b/src/MeoAssistant/AwardTask.cpp @@ -0,0 +1,11 @@ +#include "AwardTask.h" + +#include "ProcessTask.h" + +asst::AwardTask::AwardTask(AsstCallback callback, void* callback_arg) + : PackageTask(callback, callback_arg, TaskType), + m_award_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)) +{ + m_award_task_ptr->set_tasks({ "AwardBegin" }); + m_subtasks.emplace_back(m_award_task_ptr); +} diff --git a/src/MeoAssistant/AwardTask.h b/src/MeoAssistant/AwardTask.h new file mode 100644 index 0000000000..c72dc2ef57 --- /dev/null +++ b/src/MeoAssistant/AwardTask.h @@ -0,0 +1,18 @@ +#pragma once +#include "PackageTask.h" + +namespace asst +{ + class ProcessTask; + + class AwardTask : public PackageTask + { + public: + AwardTask(AsstCallback callback, void* callback_arg); + virtual ~AwardTask() = default; + + static constexpr const char* TaskType = "Award"; + private: + std::shared_ptr m_award_task_ptr = nullptr; + }; +} diff --git a/src/MeoAssistant/CreditShopImageAnalyzer.cpp b/src/MeoAssistant/CreditShopImageAnalyzer.cpp index d6ffa2de48..41dfd74909 100644 --- a/src/MeoAssistant/CreditShopImageAnalyzer.cpp +++ b/src/MeoAssistant/CreditShopImageAnalyzer.cpp @@ -11,6 +11,18 @@ asst::CreditShopImageAnalyzer::CreditShopImageAnalyzer(const cv::Mat image, std: : AbstractImageAnalyzer(image, task_data) {} +void asst::CreditShopImageAnalyzer::set_black_list(std::vector black_list) +{ + m_shopping_list = std::move(black_list); + m_is_white_list = false; +} + +void asst::CreditShopImageAnalyzer::set_white_list(std::vector black_list) +{ + m_shopping_list = std::move(black_list); + m_is_white_list = true; +} + bool asst::CreditShopImageAnalyzer::analyze() { m_commoditys.clear(); @@ -63,9 +75,15 @@ bool asst::CreditShopImageAnalyzer::whether_to_buy_analyze() OcrImageAnalyzer ocr_analyzer(m_image, name_roi); ocr_analyzer.set_task_data(m_task_data); - ocr_analyzer.set_required(not_to_buy_task_ptr->text); + ocr_analyzer.set_required(m_shopping_list); if (ocr_analyzer.analyze()) { - //因为是不买的,有识别结果说明这个商品不买,直接跳过 + // 黑名单模式,有识别结果说明这个商品不买,直接跳过 + if (!m_is_white_list) { + continue; + } + } + // 白名单模式,没有识别结果说明这个商品不买,直接跳过 + else if (m_is_white_list) { continue; } diff --git a/src/MeoAssistant/CreditShopImageAnalyzer.h b/src/MeoAssistant/CreditShopImageAnalyzer.h index b3723eaa1d..2b5ae2653b 100644 --- a/src/MeoAssistant/CreditShopImageAnalyzer.h +++ b/src/MeoAssistant/CreditShopImageAnalyzer.h @@ -11,6 +11,9 @@ namespace asst virtual bool analyze() override; + void set_black_list(std::vector black_list); + void set_white_list(std::vector white_list); + const std::vector& get_result() const noexcept { return m_result; @@ -33,5 +36,8 @@ namespace asst std::vector m_commoditys; std::vector m_need_to_buy; std::vector m_result; + + std::vector m_shopping_list; + bool m_is_white_list = false; }; } diff --git a/src/MeoAssistant/CreditShoppingTask.cpp b/src/MeoAssistant/CreditShoppingTask.cpp index f1ce96c7e6..10fccbd73c 100644 --- a/src/MeoAssistant/CreditShoppingTask.cpp +++ b/src/MeoAssistant/CreditShoppingTask.cpp @@ -11,6 +11,18 @@ #include "OcrImageAnalyzer.h" #include "Resource.h" +void asst::CreditShoppingTask::set_black_list(std::vector black_list) +{ + m_shopping_list = std::move(black_list); + m_is_white_list = false; +} + +void asst::CreditShoppingTask::set_white_list(std::vector black_list) +{ + m_shopping_list = std::move(black_list); + m_is_white_list = true; +} + bool asst::CreditShoppingTask::_run() { const cv::Mat image = m_ctrler->get_image(); diff --git a/src/MeoAssistant/CreditShoppingTask.h b/src/MeoAssistant/CreditShoppingTask.h index b74e521b16..0bd7fcc1eb 100644 --- a/src/MeoAssistant/CreditShoppingTask.h +++ b/src/MeoAssistant/CreditShoppingTask.h @@ -14,7 +14,13 @@ namespace asst using AbstractTask::AbstractTask; virtual ~CreditShoppingTask() = default; + void set_black_list(std::vector black_list); + void set_white_list(std::vector white_list); + protected: virtual bool _run() override; + + std::vector m_shopping_list; + bool m_is_white_list = false; }; } diff --git a/src/MeoAssistant/FightTask.cpp b/src/MeoAssistant/FightTask.cpp index d7fa786699..174ce2a49d 100644 --- a/src/MeoAssistant/FightTask.cpp +++ b/src/MeoAssistant/FightTask.cpp @@ -4,10 +4,10 @@ #include "StageDropsTaskPlugin.h" asst::FightTask::FightTask(AsstCallback callback, void* callback_arg) - : PackageTask(callback, callback_arg, TaskChain), - m_start_up_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskChain)), - m_stage_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskChain)), - m_fight_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskChain)) + : PackageTask(callback, callback_arg, TaskType), + m_start_up_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)), + m_stage_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)), + m_fight_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)) { // 进入选关界面(主界面的“终端”点进去) m_start_up_task_ptr->set_tasks({ "StageBegin" }) @@ -24,10 +24,15 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg) .set_times_limit("StoneConfirm", 0); // 开始战斗任务 - m_fight_task_ptr->set_tasks({ "FightBegin" }); - + m_fight_task_ptr->set_tasks({ "FightBegin" }) + .set_times_limit("MedicineConfirm", 0) + .set_times_limit("StoneConfirm", 0) + .set_times_limit("StartButton1", INT_MAX) + .set_times_limit("StartButton2", INT_MAX); m_fight_task_ptr->regiseter_plugin() ->set_retry_times(0); + + m_subtasks.emplace_back(m_fight_task_ptr); } bool asst::FightTask::set_params(const json::value& params) diff --git a/src/MeoAssistant/FightTask.h b/src/MeoAssistant/FightTask.h index 2066faec40..363f9c0fb5 100644 --- a/src/MeoAssistant/FightTask.h +++ b/src/MeoAssistant/FightTask.h @@ -15,7 +15,7 @@ namespace asst virtual bool set_params(const json::value& params) override; - static constexpr const char* TaskChain = "Fight"; + static constexpr const char* TaskType = "Fight"; protected: std::shared_ptr m_start_up_task_ptr = nullptr; diff --git a/src/MeoAssistant/MallTask.cpp b/src/MeoAssistant/MallTask.cpp new file mode 100644 index 0000000000..171462f3ef --- /dev/null +++ b/src/MeoAssistant/MallTask.cpp @@ -0,0 +1,43 @@ +#include "MallTask.h" + +#include "ProcessTask.h" +#include "CreditShoppingTask.h" + +asst::MallTask::MallTask(AsstCallback callback, void* callback_arg) + : PackageTask(callback, callback_arg, TaskType), + m_mall_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_shopping_task_ptr(std::make_shared(callback, callback_arg, TaskType)) +{ + m_mall_task_ptr->set_tasks({ "MallBegin" }); + m_subtasks.emplace_back(m_mall_task_ptr); + m_subtasks.emplace_back(nullptr); // reserved for m_shopping_task_ptr +} + +bool asst::MallTask::set_params(const json::value& params) +{ + bool shopping = params.get("shopping", true); + + auto& shop_ref = m_subtasks.at(1); + if (shopping) { + if (params.contains("shopping_list") && params.at("shopping_list").is_array()) { + std::vector shopping_list; + for (auto& name : params.at("shopping_list").as_array()) { + shopping_list.emplace_back(name.as_string()); + } + if (params.get("is_black_list", false) == true) { + m_shopping_task_ptr->set_black_list(std::move(shopping_list)); + } + else { + m_shopping_task_ptr->set_white_list(std::move(shopping_list)); + } + } + else { + return false; + } + shop_ref = m_shopping_task_ptr; + } + else { + shop_ref = nullptr; + } + return true; +} diff --git a/src/MeoAssistant/MallTask.h b/src/MeoAssistant/MallTask.h new file mode 100644 index 0000000000..3f92c89317 --- /dev/null +++ b/src/MeoAssistant/MallTask.h @@ -0,0 +1,22 @@ +#pragma once +#include "PackageTask.h" + +namespace asst +{ + class ProcessTask; + class CreditShoppingTask; + + class MallTask : public PackageTask + { + public: + MallTask(AsstCallback callback, void* callback_arg); + virtual ~MallTask() = default; + + virtual bool set_params(const json::value& params) override; + + static constexpr const char* TaskType = "Mall"; + private: + std::shared_ptr m_mall_task_ptr = nullptr; + std::shared_ptr m_shopping_task_ptr = nullptr; + }; +} diff --git a/src/MeoAssistant/MeoAssistant.vcxproj b/src/MeoAssistant/MeoAssistant.vcxproj index 298b546582..5b91d0990a 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj +++ b/src/MeoAssistant/MeoAssistant.vcxproj @@ -25,9 +25,11 @@ + + @@ -75,6 +77,7 @@ + @@ -83,9 +86,11 @@ + + @@ -133,6 +138,7 @@ + diff --git a/src/MeoAssistant/MeoAssistant.vcxproj.filters b/src/MeoAssistant/MeoAssistant.vcxproj.filters index 1cc24af08f..d8378c5149 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj.filters +++ b/src/MeoAssistant/MeoAssistant.vcxproj.filters @@ -276,6 +276,15 @@ 头文件\Caller + + 头文件\Task + + + 头文件\Task + + + 头文件 + @@ -446,6 +455,15 @@ 源文件\Task + + 源文件\Task + + + 源文件\Task + + + 源文件 + diff --git a/src/MeoAssistant/PackageTask.cpp b/src/MeoAssistant/PackageTask.cpp index e1b221ac99..80253cc148 100644 --- a/src/MeoAssistant/PackageTask.cpp +++ b/src/MeoAssistant/PackageTask.cpp @@ -12,6 +12,9 @@ bool asst::PackageTask::run() if (need_exit()) { return false; } + if (!task_ptr) { + continue; + } task_ptr->set_exit_flag(m_exit_flag) .set_ctrler(m_ctrler) diff --git a/src/MeoAssistant/PackageTask.h b/src/MeoAssistant/PackageTask.h index 0d9556f0f6..e5f3b93e02 100644 --- a/src/MeoAssistant/PackageTask.h +++ b/src/MeoAssistant/PackageTask.h @@ -20,7 +20,7 @@ namespace asst virtual bool run() override; - virtual bool set_params(const json::value& params) = 0; + virtual bool set_params([[maybe_unused]] const json::value& params) { return true; } virtual AbstractTask& set_exit_flag(bool* exit_flag) noexcept; virtual AbstractTask& set_retry_times(int times) noexcept; diff --git a/src/MeoAssistant/StartUpTask.cpp b/src/MeoAssistant/StartUpTask.cpp index da0f21e30d..93862b6bd6 100644 --- a/src/MeoAssistant/StartUpTask.cpp +++ b/src/MeoAssistant/StartUpTask.cpp @@ -3,19 +3,20 @@ #include "ProcessTask.h" asst::StartUpTask::StartUpTask(AsstCallback callback, void* callback_arg) - : PackageTask(callback, callback_arg, TaskChain), - m_start_up_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskChain)) + : PackageTask(callback, callback_arg, TaskType), + m_start_up_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)) { m_start_up_task_ptr->set_tasks({ "StartUp" }) .set_times_limit("ReturnToTerminal", 0) .set_times_limit("Terminal", 0); + m_subtasks.emplace_back(m_start_up_task_ptr); } bool asst::StartUpTask::set_params([[maybe_unused]] const json::value& params) { - if (!runned) { - m_subtasks.clear(); - m_subtasks.emplace_back(m_start_up_task_ptr); - } + //if (!runned) { + // m_subtasks.clear(); + // m_subtasks.emplace_back(m_start_up_task_ptr); + //} return true; } diff --git a/src/MeoAssistant/StartUpTask.h b/src/MeoAssistant/StartUpTask.h index 3ded043dbb..01920bf8b1 100644 --- a/src/MeoAssistant/StartUpTask.h +++ b/src/MeoAssistant/StartUpTask.h @@ -13,7 +13,7 @@ namespace asst virtual bool set_params(const json::value& params) override; - static constexpr const char* TaskChain = "StartUp"; + static constexpr const char* TaskType = "StartUp"; protected: std::shared_ptr m_start_up_task_ptr = nullptr; diff --git a/src/MeoAssistant/VisitTask.cpp b/src/MeoAssistant/VisitTask.cpp new file mode 100644 index 0000000000..4735cee5bb --- /dev/null +++ b/src/MeoAssistant/VisitTask.cpp @@ -0,0 +1,11 @@ +#include "VisitTask.h" + +#include "ProcessTask.h" + +asst::VisitTask::VisitTask(AsstCallback callback, void* callback_arg) + : PackageTask(callback, callback_arg, TaskType), + m_visit_task_ptr(std::make_shared(m_callback, m_callback_arg, TaskType)) +{ + m_visit_task_ptr->set_tasks({ "VisitBegin" }); + m_subtasks.emplace_back(m_visit_task_ptr); +} diff --git a/src/MeoAssistant/VisitTask.h b/src/MeoAssistant/VisitTask.h new file mode 100644 index 0000000000..5706eeb827 --- /dev/null +++ b/src/MeoAssistant/VisitTask.h @@ -0,0 +1,18 @@ +#pragma once +#include "PackageTask.h" + +namespace asst +{ + class ProcessTask; + + class VisitTask : public PackageTask + { + public: + VisitTask(AsstCallback callback, void* callback_arg); + virtual ~VisitTask() = default; + + static constexpr const char* TaskType = "Visit"; + private: + std::shared_ptr m_visit_task_ptr = nullptr; + }; +}