mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-18 02:10:21 +08:00
feat: 肉鸽插件添加设置参数功能,设置失败的插件会被自动disable (#9862)
* feat: 肉鸽插件添加设置参数功能,设置失败的插件会被自动移除 * feat: 肉鸽插件设置参数示例——坍缩范式插件 * refactor: 保留 virtual 关键字
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>;
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user