mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 01:40:46 +08:00
perf.以一种更安全的方式禁用SubTask
This commit is contained in:
@@ -25,6 +25,10 @@ AbstractTask::AbstractTask(AsstCallback callback, void* callback_arg, std::strin
|
||||
|
||||
bool asst::AbstractTask::run()
|
||||
{
|
||||
if (!m_enable) {
|
||||
Log.info("task is disable, pass", basic_info().to_string());
|
||||
return true;
|
||||
}
|
||||
callback(AsstMsg::SubTaskStart, basic_info());
|
||||
for (m_cur_retry = 0; m_cur_retry <= m_retry_times; ++m_cur_retry) {
|
||||
if (_run()) {
|
||||
@@ -70,6 +74,12 @@ AbstractTask& asst::AbstractTask::set_status(std::shared_ptr<RuntimeStatus> stat
|
||||
return *this;
|
||||
}
|
||||
|
||||
AbstractTask& asst::AbstractTask::set_enable(bool enable) noexcept
|
||||
{
|
||||
m_enable = enable;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void asst::AbstractTask::clear_plugin() noexcept
|
||||
{
|
||||
m_plugins.clear();
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace asst
|
||||
virtual AbstractTask& set_retry_times(int times) noexcept;
|
||||
virtual AbstractTask& set_ctrler(std::shared_ptr<Controller> ctrler) noexcept;
|
||||
virtual AbstractTask& set_status(std::shared_ptr<RuntimeStatus> status) noexcept;
|
||||
virtual AbstractTask& set_enable(bool enable) noexcept;
|
||||
|
||||
template<typename PluginType>
|
||||
std::shared_ptr<PluginType> regiseter_plugin()
|
||||
@@ -63,6 +64,7 @@ namespace asst
|
||||
bool need_exit() const;
|
||||
bool save_image(const cv::Mat image, const std::string& dir);
|
||||
|
||||
bool m_enable = true;
|
||||
AsstCallback m_callback;
|
||||
void* m_callback_arg = nullptr;
|
||||
bool* m_exit_flag = nullptr;
|
||||
|
||||
@@ -109,8 +109,11 @@ bool asst::AutoRecruitTask::recruit_index(size_t index)
|
||||
bool asst::AutoRecruitTask::calc_and_recruit()
|
||||
{
|
||||
RecruitCalcTask recurit_task(m_callback, m_callback_arg, m_task_chain);
|
||||
recurit_task.set_retry_times(m_retry_times);
|
||||
recurit_task.set_param(m_select_level, true);
|
||||
recurit_task.set_param(m_select_level, true)
|
||||
.set_retry_times(m_retry_times)
|
||||
.set_exit_flag(m_exit_flag)
|
||||
.set_ctrler(m_ctrler)
|
||||
.set_status(m_status);
|
||||
|
||||
// 识别错误,放弃这个公招位,直接返回
|
||||
if (!recurit_task.run()) {
|
||||
|
||||
@@ -15,13 +15,15 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg)
|
||||
.set_times_limit("StartButton1", 0)
|
||||
.set_times_limit("StartButton2", 0)
|
||||
.set_times_limit("MedicineConfirm", 0)
|
||||
.set_times_limit("StoneConfirm", 0);
|
||||
.set_times_limit("StoneConfirm", 0)
|
||||
.set_enable(false);
|
||||
|
||||
// 进入对应的关卡
|
||||
m_stage_task_ptr->set_times_limit("StartButton1", 0)
|
||||
.set_times_limit("StartButton2", 0)
|
||||
.set_times_limit("MedicineConfirm", 0)
|
||||
.set_times_limit("StoneConfirm", 0);
|
||||
.set_times_limit("StoneConfirm", 0)
|
||||
.set_enable(false);
|
||||
|
||||
// 开始战斗任务
|
||||
m_fight_task_ptr->set_tasks({ "FightBegin" })
|
||||
@@ -32,6 +34,8 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg)
|
||||
m_stage_drops_plugin_ptr = m_fight_task_ptr->regiseter_plugin<StageDropsTaskPlugin>();
|
||||
m_stage_drops_plugin_ptr->set_retry_times(0);
|
||||
|
||||
m_subtasks.emplace_back(m_start_up_task_ptr);
|
||||
m_subtasks.emplace_back(m_stage_task_ptr);
|
||||
m_subtasks.emplace_back(m_fight_task_ptr);
|
||||
}
|
||||
|
||||
@@ -44,15 +48,10 @@ bool asst::FightTask::set_params(const json::value& params)
|
||||
std::string penguin_id = params.get("penguin_id", "");
|
||||
|
||||
if (!m_runned) {
|
||||
m_start_up_task_ptr->set_enable(true);
|
||||
|
||||
m_stage_task_ptr->set_enable(true);
|
||||
m_stage_task_ptr->set_tasks({ stage });
|
||||
|
||||
m_subtasks.clear();
|
||||
|
||||
if (!stage.empty()) {
|
||||
m_subtasks.emplace_back(m_start_up_task_ptr);
|
||||
m_subtasks.emplace_back(m_stage_task_ptr);
|
||||
}
|
||||
m_subtasks.emplace_back(m_fight_task_ptr);
|
||||
}
|
||||
|
||||
m_fight_task_ptr->set_times_limit("MedicineConfirm", mecidine)
|
||||
|
||||
@@ -9,15 +9,16 @@ asst::MallTask::MallTask(AsstCallback callback, void* callback_arg)
|
||||
m_shopping_task_ptr(std::make_shared<CreditShoppingTask>(callback, callback_arg, TaskType))
|
||||
{
|
||||
m_mall_task_ptr->set_tasks({ "MallBegin" });
|
||||
m_shopping_task_ptr->set_enable(false);
|
||||
|
||||
m_subtasks.emplace_back(m_mall_task_ptr);
|
||||
m_subtasks.emplace_back(nullptr); // reserved for m_shopping_task_ptr
|
||||
m_subtasks.emplace_back(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;
|
||||
@@ -34,10 +35,10 @@ bool asst::MallTask::set_params(const json::value& params)
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
shop_ref = m_shopping_task_ptr;
|
||||
m_shopping_task_ptr->set_enable(true);
|
||||
}
|
||||
else {
|
||||
shop_ref = nullptr;
|
||||
m_shopping_task_ptr->set_enable(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
#include "PackageTask.h"
|
||||
|
||||
#include "Resource.h"
|
||||
#include "Logger.hpp"
|
||||
|
||||
bool asst::PackageTask::run()
|
||||
{
|
||||
if (!m_enable) {
|
||||
Log.info("task is disable, pass", basic_info().to_string());
|
||||
return true;
|
||||
}
|
||||
m_runned = true;
|
||||
|
||||
const auto task_delay = Resrc.cfg().get_options().task_delay;
|
||||
@@ -12,9 +17,6 @@ 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)
|
||||
|
||||
@@ -30,6 +30,10 @@ asst::ProcessTask::ProcessTask(AbstractTask&& abs, std::vector<std::string> task
|
||||
|
||||
bool asst::ProcessTask::run()
|
||||
{
|
||||
if (!m_enable) {
|
||||
Log.info("task is disable, pass", basic_info().to_string());
|
||||
return true;
|
||||
}
|
||||
m_cur_tasks_name = m_raw_tasks_name;
|
||||
for (m_cur_retry = 0; m_cur_retry <= m_retry_times; ++m_cur_retry) {
|
||||
if (_run()) {
|
||||
|
||||
@@ -9,7 +9,7 @@ asst::RecruitTask::RecruitTask(AsstCallback callback, void* callback_arg)
|
||||
m_recruit_task_ptr(std::make_shared<AutoRecruitTask>(callback, callback_arg, TaskType))
|
||||
{
|
||||
m_recruit_begin_task_ptr->set_tasks({ "RecruitBegin" });
|
||||
m_subtasks.emplace_back(nullptr); // reversed for m_recruit_begin_task_ptr
|
||||
m_subtasks.emplace_back(m_recruit_begin_task_ptr);
|
||||
m_subtasks.emplace_back(m_recruit_task_ptr);
|
||||
}
|
||||
|
||||
@@ -19,14 +19,15 @@ bool asst::RecruitTask::set_params(const json::value& params)
|
||||
|| !params.contains("confirm") || !params.at("confirm").is_array()) {
|
||||
return false;
|
||||
}
|
||||
std::vector<int> select;
|
||||
|
||||
std::vector<int> select;
|
||||
for (const auto& select_num_json : params.at("select").as_array()) {
|
||||
if (!select_num_json.is_number()) {
|
||||
return false;
|
||||
}
|
||||
select.emplace_back(select_num_json.as_integer());
|
||||
}
|
||||
|
||||
std::vector<int> confirm;
|
||||
for (const auto& confirm_num_json : params.at("confirm").as_array()) {
|
||||
if (!confirm_num_json.is_number()) {
|
||||
@@ -40,11 +41,11 @@ bool asst::RecruitTask::set_params(const json::value& params)
|
||||
bool expedite = params.get("expedite", false);
|
||||
[[maybe_unused]] int expedite_times = params.get("expedite_times", 0);
|
||||
|
||||
if (times == 0 || confirm.empty()) { // 仅识别的情况
|
||||
m_subtasks.at(0) = nullptr;
|
||||
if (times <= 0 || confirm.empty()) { // 仅识别的情况
|
||||
m_recruit_begin_task_ptr->set_enable(false);
|
||||
}
|
||||
else {
|
||||
m_subtasks.at(0) = m_recruit_begin_task_ptr;
|
||||
m_recruit_begin_task_ptr->set_enable(true);
|
||||
}
|
||||
|
||||
m_recruit_task_ptr->set_max_times(times)
|
||||
@@ -53,5 +54,5 @@ bool asst::RecruitTask::set_params(const json::value& params)
|
||||
.set_select_level(std::move(select))
|
||||
.set_confirm_level(std::move(confirm));
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user