diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 3e94ea2a02..4f30d64342 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -130,6 +130,22 @@ bool asst::RoguelikeTask::set_params(const json::value& params) m_roguelike_task_ptr->set_times_limit(theme + "@Roguelike@StageDreadfulFoe-5", INT_MAX); } + if (theme == RoguelikeTheme::Sami) { + if (auto opt = params.find("start_foldartal_list"); opt) { + std::vector list; + for (const auto& name : *opt) { + if (std::string name_str = name.as_string(); !name_str.empty()) { + list.emplace_back(name_str); + } + } + /* 由于插件 load_param返回值仅决定自身是否启用,二次读取参数进行验证 */ + if (list.empty()) { + Log.error(__FUNCTION__, "| Empty start_foldartal_list"); + return false; + } + } + } + m_roguelike_task_ptr->set_times_limit(theme + "@Roguelike@StartExplore", params.get("starts_count", INT_MAX)); // 通过 exceededNext 禁用投资系统,进入商店购买逻辑 m_roguelike_task_ptr->set_times_limit( @@ -139,30 +155,6 @@ bool asst::RoguelikeTask::set_params(const json::value& params) "StageTraderRefreshWithDice", params.get("refresh_trader_with_dice", false) ? INT_MAX : 0); - // =========================== 萨米主题专用参数 =========================== - - if (theme == RoguelikeTheme::Sami) { - // 是否生活队凹开局板子 - m_foldartal_start_ptr->set_start_foldartal(params.contains("start_foldartal_list")); - - if (auto opt = params.find("start_foldartal_list"); opt) { - std::vector list; - for (const auto& name : *opt) { - if (std::string name_str = name.as_string(); !name_str.empty()) { - list.emplace_back(name_str); - } - } - if (list.empty()) { - Log.error(__FUNCTION__, "| Empty start_foldartal_list"); - return false; - } - m_foldartal_start_ptr->set_start_foldartal_list(std::move(list)); - } - - // 是否使用密文版, 非CLP_PDS模式下默认为True, CLP_PDS模式下默认为False - m_foldartal_use_ptr->set_use_foldartal(params.get("use_foldartal", mode != RoguelikeMode::CLP_PDS)); - } - m_invest_ptr->set_control_plugin_ptr(m_control_ptr); for (const auto& plugin : m_roguelike_task_ptr->get_plugins()) { diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp index fcfe61854a..1e81bb976f 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp @@ -30,6 +30,35 @@ bool asst::RoguelikeFoldartalStartTaskPlugin::verify(AsstMsg msg, const json::va } } +bool asst::RoguelikeFoldartalStartTaskPlugin::load_params(const json::value& params) +{ + if (m_config->get_theme() != RoguelikeTheme::Sami) { + return false; + } + + // 是否生活队凹开局板子 + m_start_foldartal = (params.contains("start_foldartal_list")); + + if (auto opt = params.find("start_foldartal_list"); opt) { + std::vector list; + for (const auto& name : *opt) { + if (std::string name_str = name.as_string(); !name_str.empty()) { + list.emplace_back(name_str); + } + } + /* 由于插件 load_param返回值仅决定自身是否启用,参数验证移动至他处 */ + /* + if (list.empty()) { + Log.error(__FUNCTION__, "| Empty start_foldartal_list"); + return false; + } + */ + m_start_foldartal_list = (std::move(list)); + } + + return true; +} + bool asst::RoguelikeFoldartalStartTaskPlugin::_run() { LogTraceFunction; diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h index 3d2e7d539e..fecc3d0b4a 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h @@ -12,14 +12,7 @@ public: public: virtual bool verify(AsstMsg msg, const json::value& details) const override; - virtual bool load_params([[maybe_unused]] const json::value& params) override - { - return m_config->get_theme() == RoguelikeTheme::Sami; - } - - void set_start_foldartal(bool value) { m_start_foldartal = value; } - - void set_start_foldartal_list(std::vector value) { m_start_foldartal_list = std::move(value); } + virtual bool load_params([[maybe_unused]] const json::value& params) override; protected: virtual bool _run() override; diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp index 9330055e44..af0d7f6f93 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp @@ -70,6 +70,18 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::verify(const AsstMsg msg, const json } } +bool asst::RoguelikeFoldartalUseTaskPlugin::load_params(const json::value& params) +{ + if (m_config->get_theme() != RoguelikeTheme::Sami) { + return false; + } + + // 是否使用密文版, 非CLP_PDS模式下默认为True, CLP_PDS模式下默认为False + m_use_foldartal = (params.get("use_foldartal", m_config->get_mode() != RoguelikeMode::CLP_PDS)); + + return true; +} + bool asst::RoguelikeFoldartalUseTaskPlugin::_run() { LogTraceFunction; diff --git a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h index d4c6e4fc72..0f58294507 100644 --- a/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h @@ -13,12 +13,7 @@ namespace asst public: virtual bool verify(AsstMsg msg, const json::value& details) const override; - virtual bool load_params([[maybe_unused]] const json::value& params) override - { - // 投资模式下不开启调试任务 - return m_config->get_theme() == RoguelikeTheme::Sami; - } - void set_use_foldartal(bool value) { m_use_foldartal = value; } + virtual bool load_params([[maybe_unused]] const json::value& params) override; protected: virtual bool _run() override;