diff --git a/src/MeoAssistant/AbstractTask.cpp b/src/MeoAssistant/AbstractTask.cpp index ac888ab11b..37691402a7 100644 --- a/src/MeoAssistant/AbstractTask.cpp +++ b/src/MeoAssistant/AbstractTask.cpp @@ -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 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(); diff --git a/src/MeoAssistant/AbstractTask.h b/src/MeoAssistant/AbstractTask.h index 9969dbc79f..18fd96611a 100644 --- a/src/MeoAssistant/AbstractTask.h +++ b/src/MeoAssistant/AbstractTask.h @@ -35,6 +35,7 @@ namespace asst virtual AbstractTask& set_retry_times(int times) noexcept; virtual AbstractTask& set_ctrler(std::shared_ptr ctrler) noexcept; virtual AbstractTask& set_status(std::shared_ptr status) noexcept; + virtual AbstractTask& set_enable(bool enable) noexcept; template std::shared_ptr 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; diff --git a/src/MeoAssistant/AutoRecruitTask.cpp b/src/MeoAssistant/AutoRecruitTask.cpp index a914e3292f..0f75064b1b 100644 --- a/src/MeoAssistant/AutoRecruitTask.cpp +++ b/src/MeoAssistant/AutoRecruitTask.cpp @@ -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()) { diff --git a/src/MeoAssistant/FightTask.cpp b/src/MeoAssistant/FightTask.cpp index eb60707730..bbd38db2f4 100644 --- a/src/MeoAssistant/FightTask.cpp +++ b/src/MeoAssistant/FightTask.cpp @@ -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(); 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) diff --git a/src/MeoAssistant/MallTask.cpp b/src/MeoAssistant/MallTask.cpp index 171462f3ef..70b43531c6 100644 --- a/src/MeoAssistant/MallTask.cpp +++ b/src/MeoAssistant/MallTask.cpp @@ -9,15 +9,16 @@ asst::MallTask::MallTask(AsstCallback callback, void* callback_arg) m_shopping_task_ptr(std::make_shared(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 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; } diff --git a/src/MeoAssistant/PackageTask.cpp b/src/MeoAssistant/PackageTask.cpp index 4d6abcce73..efb19b0297 100644 --- a/src/MeoAssistant/PackageTask.cpp +++ b/src/MeoAssistant/PackageTask.cpp @@ -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) diff --git a/src/MeoAssistant/ProcessTask.cpp b/src/MeoAssistant/ProcessTask.cpp index 656b83e169..13f4922316 100644 --- a/src/MeoAssistant/ProcessTask.cpp +++ b/src/MeoAssistant/ProcessTask.cpp @@ -30,6 +30,10 @@ asst::ProcessTask::ProcessTask(AbstractTask&& abs, std::vector 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()) { diff --git a/src/MeoAssistant/RecruitTask.cpp b/src/MeoAssistant/RecruitTask.cpp index ea1a6192fb..f4a8d1f288 100644 --- a/src/MeoAssistant/RecruitTask.cpp +++ b/src/MeoAssistant/RecruitTask.cpp @@ -9,7 +9,7 @@ asst::RecruitTask::RecruitTask(AsstCallback callback, void* callback_arg) m_recruit_task_ptr(std::make_shared(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 select; + std::vector 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 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; }