feat: 肉鸽插件添加设置参数功能,设置失败的插件会被自动disable (#9862)

* feat: 肉鸽插件添加设置参数功能,设置失败的插件会被自动移除

* feat: 肉鸽插件设置参数示例——坍缩范式插件

* refactor: 保留 virtual 关键字
This commit is contained in:
Weiyou Wang
2024-07-23 03:09:29 +10:00
committed by GitHub
parent 1d057ac63d
commit 5aaaae758f
4 changed files with 27 additions and 16 deletions

View File

@@ -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<AbstractRoguelikeTaskPlugin>(plugin)) {
roguelike_plugin->config(params);
}
}
return true;
}

View File

@@ -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<RoguelikeConfig> m_config;
};
using RoguelikeTaskPluginPtr = std::shared_ptr<AbstractRoguelikeTaskPlugin>;
}

View File

@@ -10,13 +10,20 @@
#include <algorithm>
asst::RoguelikeCollapsalParadigmTaskPlugin::RoguelikeCollapsalParadigmTaskPlugin(
const AsstCallback& callback,
Assistant* inst,
std::string_view task_chain,
std::shared_ptr<RoguelikeConfig> 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<OcrTaskInfo> bannerCheckConfig =
Task.get<OcrTaskInfo>("Sami@Roguelike@CheckCollapsalParadigms_bannerCheckConfig");

View File

@@ -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<RoguelikeConfig> 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<RoguelikeConfig> config)
{
return config->get_theme() == RoguelikeTheme::Sami && config->get_check_clp_pds();