diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 99555a6137..f2a33a5458 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -80,7 +80,8 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst m_roguelike_task_ptr->register_plugin(m_config_ptr); m_roguelike_task_ptr->register_plugin(m_config_ptr); m_roguelike_task_ptr->register_plugin(m_config_ptr); - m_roguelike_task_ptr->register_plugin(m_config_ptr); + m_cp_ptr = m_roguelike_task_ptr->register_plugin( + m_config_ptr); // 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加亿点。先这样凑合用 for (int i = 0; i != 999; ++i) { @@ -220,7 +221,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params) // 是否检查坍缩范式,非CLP_PDS模式下默认为False, CLP_PDS模式下默认为True m_config_ptr->set_check_clp_pds( params.get("check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS)); - m_config_ptr->set_double_check_clp_pds( + m_cp_ptr->set_double_check_clp_pds( params.get("double_check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS)); } diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.h b/src/MaaCore/Task/Interface/RoguelikeTask.h index 459327be5e..9ce0cb1144 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.h +++ b/src/MaaCore/Task/Interface/RoguelikeTask.h @@ -8,6 +8,7 @@ namespace asst class RoguelikeInvestTaskPlugin; class RoguelikeDebugTaskPlugin; class RoguelikeCustomStartTaskPlugin; + class RoguelikeCollapsalParadigmTaskPlugin; class RoguelikeTask : public InterfaceTask { @@ -25,6 +26,6 @@ namespace asst std::shared_ptr m_invest_ptr = nullptr; std::shared_ptr m_debug_ptr = nullptr; std::shared_ptr m_custom_ptr = nullptr; - + std::shared_ptr m_cp_ptr = nullptr; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 846bf3b388..30d03d91e8 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -107,8 +107,6 @@ namespace asst // ------------------ 坍缩范式 ------------------ void set_check_clp_pds(bool value) { m_check_clp_pds = value; } bool get_check_clp_pds() const { return m_check_clp_pds; } - void set_double_check_clp_pds(bool value) { m_double_check_clp_pds = value; } - bool get_double_check_clp_pds() const { return m_double_check_clp_pds; } private: // ------------------ 密文板 ------------------ @@ -119,8 +117,8 @@ namespace asst bool m_use_foldartal = true; // 是否使用密文板 // ------------------ 坍缩范式 ------------------ - bool m_check_clp_pds = false; // 是否检查坍缩范式 - bool m_double_check_clp_pds = false; // 是否反复检查坍缩范式 + bool m_check_clp_pds = false; // 是否检查坍缩范式 + /* 以下为局内数据,每次重置 */ public: diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp index 4fb3f9d0e4..1cb2956f5e 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp @@ -83,7 +83,8 @@ bool asst::RoguelikeCollapsalParadigmTaskPlugin::verify( } } - if (!m_config->get_need_check_panel() && m_config->get_double_check_clp_pds() && msg == AsstMsg::SubTaskCompleted + if (msg == AsstMsg::SubTaskCompleted && !m_config->get_need_check_panel() + && m_config->get_double_check_clp_pds() && m_panel_triggers.find(task_name) == m_panel_triggers.end()) { m_config->set_need_check_panel(true); m_verification_check = true; diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h index bc9fa13916..9fb9001497 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h @@ -1,64 +1,66 @@ #pragma once #include "../AbstractRoguelikeTaskPlugin.h" #include "Common/AsstTypes.h" -#include "Vision/OCRer.h" #include "Config/TaskData.h" +#include "Vision/OCRer.h" namespace asst { - class RoguelikeCollapsalParadigmTaskPlugin : public AbstractRoguelikeTaskPlugin +class RoguelikeCollapsalParadigmTaskPlugin : public AbstractRoguelikeTaskPlugin +{ +public: + RoguelikeCollapsalParadigmTaskPlugin( + const AsstCallback& callback, + Assistant* inst, + std::string_view task_chain, + std::shared_ptr config); + // using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; + virtual ~RoguelikeCollapsalParadigmTaskPlugin() override = default; + virtual bool verify(AsstMsg msg, const json::value& details) const override; + + static bool enabled(std::shared_ptr config) { - public: - RoguelikeCollapsalParadigmTaskPlugin( - const AsstCallback& callback, - Assistant* inst, - std::string_view task_chain, - std::shared_ptr config); - - // using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; - virtual ~RoguelikeCollapsalParadigmTaskPlugin() override = default; + return config->get_theme() == RoguelikeTheme::Sami && config->get_check_clp_pds(); + } - static bool enabled(std::shared_ptr config) { - return config->get_theme() == RoguelikeTheme::Sami && config->get_check_clp_pds(); - } +public: + void set_double_check_clp_pds(bool value) { m_double_check_clp_pds = value; } + bool check_collapsal_paradigm_banner(); - public: - virtual bool verify(AsstMsg msg, const json::value& details) const override; +protected: + virtual bool _run() override; - bool check_collapsal_paradigm_banner(); + bool new_zone() const; - protected: - virtual bool _run() override; + bool check_collapsal_paradigm_panel(); - bool new_zone() const; + void toggle_collapsal_status_panel(); + void exit_then_restart(); + void exit_then_stop(); + void wait_for_loading(unsigned int millisecond = 0); + void wait_for_stage(unsigned int millisecond = 0); + void clp_pd_callback(std::string cur, int deepen_or_weaken = 0, std::string prev = ""); - bool check_collapsal_paradigm_panel(); +private: + mutable bool m_check_banner = false; + mutable bool m_check_panel = false; + mutable bool m_verification_check = false; - void toggle_collapsal_status_panel(); - void exit_then_restart(); - void exit_then_stop(); - void wait_for_loading(unsigned int millisecond = 0); - void wait_for_stage(unsigned int millisecond = 0); - void clp_pd_callback(std::string cur, int deepen_or_weaken = 0, std::string prev = ""); + std::string m_deepen_text; - private: - mutable bool m_check_banner = false; - mutable bool m_check_panel = false; - mutable bool m_verification_check = false; + std::unordered_set m_banner_triggers_start; - std::string m_deepen_text; + std::unordered_set m_banner_triggers_completed; - std::unordered_set m_banner_triggers_start; + mutable std::string m_zone; - std::unordered_set m_banner_triggers_completed; + Rect m_roi; // 屏幕上方居中区域,点击以检查坍缩状态 + Point m_swipe_begin; // 滑动起点 + Point m_swipe_end; // 滑动终点 - mutable std::string m_zone; + std::unordered_set m_panel_triggers; + std::unordered_map m_zone_dict; - Rect m_roi; // 屏幕上方居中区域,点击以检查坍缩状态 - Point m_swipe_begin; // 滑动起点 - Point m_swipe_end; // 滑动终点 - - std::unordered_set m_panel_triggers; - std::unordered_map m_zone_dict; - }; + bool m_double_check_clp_pds = false; // 是否反复检查坍缩范式 +}; }