diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 5ac34a4f94..87c1823bae 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -224,9 +224,6 @@ 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_cp_ptr->set_double_check_clp_pds( - params.get("double_check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS)); - } const auto& ptr = m_custom_ptr; @@ -240,5 +237,12 @@ bool asst::RoguelikeTask::set_params(const json::value& params) RoguelikeCustomType::UseNonfriendSupport, params.get("use_nonfriend_support", false) ? "1" : "0"); // 是否可以是非好友助战干员 + // ———————— plugin configuration ———————————————————————————————— + for (const TaskPluginPtr& plugin : m_roguelike_task_ptr->get_plugins()) { + if (RoguelikeTaskPluginPtr roguelike_plugin = std::dynamic_pointer_cast(plugin)) { + roguelike_plugin->config(params); + } + } + return true; } diff --git a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h index 3f89760a06..51ea58f4c6 100644 --- a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h @@ -15,7 +15,12 @@ namespace asst virtual void reset_variable() {} + // 根据 params 设置插件专用参数, 当插件不适用时关闭 m_enable + virtual void config([[maybe_unused]] const json::value& params) {} + protected: std::shared_ptr m_config; }; + + using RoguelikeTaskPluginPtr = std::shared_ptr; } diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp index 793249798a..b42e927941 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp @@ -10,13 +10,20 @@ #include -asst::RoguelikeCollapsalParadigmTaskPlugin::RoguelikeCollapsalParadigmTaskPlugin( - const AsstCallback& callback, - Assistant* inst, - std::string_view task_chain, - std::shared_ptr config) - : AbstractRoguelikeTaskPlugin(callback, inst, task_chain, config) +void asst::RoguelikeCollapsalParadigmTaskPlugin::config(const json::value& params) { + // ———————— 检查适用主题 ———————————————————————— + const std::string& theme = m_config->get_theme(); + if (theme != RoguelikeTheme::Sami) { + m_enable = false; + return; + } + + // ———————— 根据 params 设置插件 ———————————————— + const RoguelikeMode& mode = m_config->get_mode(); + m_double_check_clp_pds = params.get("double_check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS); + + // ———————— 从 tasks.json 获取插件设置 ——————————— // 由于仅有萨米肉鸽使用,任务名暂定写死 std::shared_ptr bannerCheckConfig = Task.get("Sami@Roguelike@CheckCollapsalParadigms_bannerCheckConfig"); diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h index 9fb9001497..792f0d25ac 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h @@ -9,15 +9,10 @@ namespace asst class RoguelikeCollapsalParadigmTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - RoguelikeCollapsalParadigmTaskPlugin( - const AsstCallback& callback, - Assistant* inst, - std::string_view task_chain, - std::shared_ptr config); - // using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeCollapsalParadigmTaskPlugin() override = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; - + virtual void config(const json::value& params) override; static bool enabled(std::shared_ptr config) { return config->get_theme() == RoguelikeTheme::Sami && config->get_check_clp_pds();