feat.新增支持部分任务

This commit is contained in:
MistEO
2022-03-09 23:23:29 +08:00
parent 78d574f185
commit 50ccafdf44
20 changed files with 258 additions and 28 deletions

View File

@@ -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`
#### 接口原型

View File

@@ -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);

View 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);
}

View 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;
};
}

View File

@@ -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;
}

View File

@@ -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;
};
}

View File

@@ -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();

View File

@@ -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;
};
}

View File

@@ -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)

View File

@@ -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;

View 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;
}

View 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;
};
}

View File

@@ -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" />

View File

@@ -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">

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View 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);
}

View 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;
};
}