mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-20 02:55:38 +08:00
feat.新增支持部分任务
This commit is contained in:
31
docs/集成文档.md
31
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`
|
||||
|
||||
#### 接口原型
|
||||
|
||||
@@ -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<PackageTask> ptr = nullptr;
|
||||
if (type == "Fight") {
|
||||
if (type == FightTask::TaskType) {
|
||||
ptr = std::make_shared<FightTask>(task_callback, (void*)this);
|
||||
ptr->set_params(ret.value());
|
||||
}
|
||||
else if (type == "StartUp") {
|
||||
else if (type == StartUpTask::TaskType) {
|
||||
ptr = std::make_shared<StartUpTask>(task_callback, (void*)this);
|
||||
ptr->set_params(ret.value());
|
||||
}
|
||||
else if (type == AwardTask::TaskType) {
|
||||
ptr = std::make_shared<AwardTask>(task_callback, (void*)this);
|
||||
}
|
||||
else if (type == VisitTask::TaskType) {
|
||||
ptr = std::make_shared<VisitTask>(task_callback, (void*)this);
|
||||
}
|
||||
else if (type == MallTask::TaskType) {
|
||||
ptr = std::make_shared<MallTask>(task_callback, (void*)this);
|
||||
}
|
||||
|
||||
bool params_ret = ptr->set_params(ret.value());
|
||||
if (!params_ret) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::unique_lock<std::mutex> lock(m_mutex);
|
||||
|
||||
11
src/MeoAssistant/AwardTask.cpp
Normal file
11
src/MeoAssistant/AwardTask.cpp
Normal file
@@ -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<ProcessTask>(m_callback, m_callback_arg, TaskType))
|
||||
{
|
||||
m_award_task_ptr->set_tasks({ "AwardBegin" });
|
||||
m_subtasks.emplace_back(m_award_task_ptr);
|
||||
}
|
||||
18
src/MeoAssistant/AwardTask.h
Normal file
18
src/MeoAssistant/AwardTask.h
Normal file
@@ -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<ProcessTask> m_award_task_ptr = nullptr;
|
||||
};
|
||||
}
|
||||
@@ -11,6 +11,18 @@ asst::CreditShopImageAnalyzer::CreditShopImageAnalyzer(const cv::Mat image, std:
|
||||
: AbstractImageAnalyzer(image, task_data)
|
||||
{}
|
||||
|
||||
void asst::CreditShopImageAnalyzer::set_black_list(std::vector<std::string> black_list)
|
||||
{
|
||||
m_shopping_list = std::move(black_list);
|
||||
m_is_white_list = false;
|
||||
}
|
||||
|
||||
void asst::CreditShopImageAnalyzer::set_white_list(std::vector<std::string> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@ namespace asst
|
||||
|
||||
virtual bool analyze() override;
|
||||
|
||||
void set_black_list(std::vector<std::string> black_list);
|
||||
void set_white_list(std::vector<std::string> white_list);
|
||||
|
||||
const std::vector<Rect>& get_result() const noexcept
|
||||
{
|
||||
return m_result;
|
||||
@@ -33,5 +36,8 @@ namespace asst
|
||||
std::vector<Rect> m_commoditys;
|
||||
std::vector<Rect> m_need_to_buy;
|
||||
std::vector<Rect> m_result;
|
||||
|
||||
std::vector<std::string> m_shopping_list;
|
||||
bool m_is_white_list = false;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -11,6 +11,18 @@
|
||||
#include "OcrImageAnalyzer.h"
|
||||
#include "Resource.h"
|
||||
|
||||
void asst::CreditShoppingTask::set_black_list(std::vector<std::string> black_list)
|
||||
{
|
||||
m_shopping_list = std::move(black_list);
|
||||
m_is_white_list = false;
|
||||
}
|
||||
|
||||
void asst::CreditShoppingTask::set_white_list(std::vector<std::string> 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();
|
||||
|
||||
@@ -14,7 +14,13 @@ namespace asst
|
||||
using AbstractTask::AbstractTask;
|
||||
virtual ~CreditShoppingTask() = default;
|
||||
|
||||
void set_black_list(std::vector<std::string> black_list);
|
||||
void set_white_list(std::vector<std::string> white_list);
|
||||
|
||||
protected:
|
||||
virtual bool _run() override;
|
||||
|
||||
std::vector<std::string> m_shopping_list;
|
||||
bool m_is_white_list = false;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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<ProcessTask>(m_callback, m_callback_arg, TaskChain)),
|
||||
m_stage_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskChain)),
|
||||
m_fight_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskChain))
|
||||
: PackageTask(callback, callback_arg, TaskType),
|
||||
m_start_up_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskType)),
|
||||
m_stage_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskType)),
|
||||
m_fight_task_ptr(std::make_shared<ProcessTask>(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<StageDropsTaskPlugin>()
|
||||
->set_retry_times(0);
|
||||
|
||||
m_subtasks.emplace_back(m_fight_task_ptr);
|
||||
}
|
||||
|
||||
bool asst::FightTask::set_params(const json::value& params)
|
||||
|
||||
@@ -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<ProcessTask> m_start_up_task_ptr = nullptr;
|
||||
|
||||
43
src/MeoAssistant/MallTask.cpp
Normal file
43
src/MeoAssistant/MallTask.cpp
Normal file
@@ -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<ProcessTask>(callback, callback_arg, TaskType)),
|
||||
m_shopping_task_ptr(std::make_shared<CreditShoppingTask>(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<std::string> 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;
|
||||
}
|
||||
22
src/MeoAssistant/MallTask.h
Normal file
22
src/MeoAssistant/MallTask.h
Normal file
@@ -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<ProcessTask> m_mall_task_ptr = nullptr;
|
||||
std::shared_ptr<CreditShoppingTask> m_shopping_task_ptr = nullptr;
|
||||
};
|
||||
}
|
||||
@@ -25,9 +25,11 @@
|
||||
<ClInclude Include="AsstTypes.h" />
|
||||
<ClInclude Include="AsstMsg.h" />
|
||||
<ClInclude Include="AutoRecruitTask.h" />
|
||||
<ClInclude Include="AwardTask.h" />
|
||||
<ClInclude Include="BattleImageAnalyzer.h" />
|
||||
<ClInclude Include="BattlePerspectiveImageAnalyzer.h" />
|
||||
<ClInclude Include="FightTask.h" />
|
||||
<ClInclude Include="MallTask.h" />
|
||||
<ClInclude Include="PackageTask.h" />
|
||||
<ClInclude Include="RoguelikeBattleTaskPlugin.h" />
|
||||
<ClInclude Include="CreditShopImageAnalyzer.h" />
|
||||
@@ -75,6 +77,7 @@
|
||||
<ClInclude Include="TilePack.h" />
|
||||
<ClInclude Include="Version.h" />
|
||||
<ClInclude Include="Controller.h" />
|
||||
<ClInclude Include="VisitTask.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="AbstractConfiger.cpp" />
|
||||
@@ -83,9 +86,11 @@
|
||||
<ClCompile Include="AbstractTask.cpp" />
|
||||
<ClCompile Include="AbstractTaskPlugin.cpp" />
|
||||
<ClCompile Include="AutoRecruitTask.cpp" />
|
||||
<ClCompile Include="AwardTask.cpp" />
|
||||
<ClCompile Include="BattleImageAnalyzer.cpp" />
|
||||
<ClCompile Include="BattlePerspectiveImageAnalyzer.cpp" />
|
||||
<ClCompile Include="FightTask.cpp" />
|
||||
<ClCompile Include="MallTask.cpp" />
|
||||
<ClCompile Include="PackageTask.cpp" />
|
||||
<ClCompile Include="RoguelikeBattleTaskPlugin.cpp" />
|
||||
<ClCompile Include="CreditShopImageAnalyzer.cpp" />
|
||||
@@ -133,6 +138,7 @@
|
||||
<ClCompile Include="TemplResource.cpp" />
|
||||
<ClCompile Include="TilePack.cpp" />
|
||||
<ClCompile Include="Controller.cpp" />
|
||||
<ClCompile Include="VisitTask.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\resource\config.json" />
|
||||
|
||||
@@ -276,6 +276,15 @@
|
||||
<ClInclude Include="..\..\include\AsstPort.h">
|
||||
<Filter>头文件\Caller</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AwardTask.h">
|
||||
<Filter>头文件\Task</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="VisitTask.h">
|
||||
<Filter>头文件\Task</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MallTask.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Controller.cpp">
|
||||
@@ -446,6 +455,15 @@
|
||||
<ClCompile Include="StartUpTask.cpp">
|
||||
<Filter>源文件\Task</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AwardTask.cpp">
|
||||
<Filter>源文件\Task</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="VisitTask.cpp">
|
||||
<Filter>源文件\Task</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MallTask.cpp">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\resource\config.json">
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<ProcessTask>(m_callback, m_callback_arg, TaskChain))
|
||||
: PackageTask(callback, callback_arg, TaskType),
|
||||
m_start_up_task_ptr(std::make_shared<ProcessTask>(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;
|
||||
}
|
||||
|
||||
@@ -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<ProcessTask> m_start_up_task_ptr = nullptr;
|
||||
|
||||
11
src/MeoAssistant/VisitTask.cpp
Normal file
11
src/MeoAssistant/VisitTask.cpp
Normal file
@@ -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<ProcessTask>(m_callback, m_callback_arg, TaskType))
|
||||
{
|
||||
m_visit_task_ptr->set_tasks({ "VisitBegin" });
|
||||
m_subtasks.emplace_back(m_visit_task_ptr);
|
||||
}
|
||||
18
src/MeoAssistant/VisitTask.h
Normal file
18
src/MeoAssistant/VisitTask.h
Normal file
@@ -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<ProcessTask> m_visit_task_ptr = nullptr;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user