mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-19 02:23:01 +08:00
feat: 使用 set_params + set_enable 管理插件而不是延迟注册插件
This commit is contained in:
@@ -204,15 +204,8 @@ 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));
|
||||
}
|
||||
|
||||
m_foldartal_gain_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
m_foldartal_start_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
m_foldartal_use_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
m_cp_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
|
||||
m_invest_ptr->set_control_plugin_ptr(m_control_ptr);
|
||||
|
||||
const auto& ptr = m_custom_ptr;
|
||||
@@ -226,5 +219,16 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
|
||||
RoguelikeCustomType::UseNonfriendSupport,
|
||||
params.get("use_nonfriend_support", false) ? "1" : "0"); // 是否可以是非好友助战干员
|
||||
|
||||
m_foldartal_gain_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
m_foldartal_start_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
m_foldartal_use_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
m_cp_ptr->set_enable(theme == RoguelikeTheme::Sami);
|
||||
|
||||
for (const auto& plugin : m_roguelike_task_ptr->get_plugins()) {
|
||||
if (const auto& roguelike_plugin = std::dynamic_pointer_cast<AbstractRoguelikeTaskPlugin>(plugin)) {
|
||||
roguelike_plugin->set_enable(roguelike_plugin->set_params(params));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,12 @@ namespace asst
|
||||
|
||||
virtual void reset_variable() {}
|
||||
|
||||
// 根据 params 设置插件专用参数, 返回插件是否适用
|
||||
virtual bool set_params([[maybe_unused]] const json::value& params) { return true; }
|
||||
|
||||
protected:
|
||||
std::shared_ptr<RoguelikeConfig> m_config;
|
||||
};
|
||||
|
||||
using RoguelikeTaskPluginPtr = std::shared_ptr<AbstractRoguelikeTaskPlugin>;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "RoguelikeCollapsalParadigmTaskPlugin.h"
|
||||
#include "Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h"
|
||||
#include "Config/TaskData.h"
|
||||
#include "Controller/Controller.h"
|
||||
#include "Task/ProcessTask.h"
|
||||
@@ -8,33 +10,35 @@
|
||||
#include "Vision/Matcher.h"
|
||||
#include "Vision/OCRer.h"
|
||||
|
||||
#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)
|
||||
bool asst::RoguelikeCollapsalParadigmTaskPlugin::set_params(const json::value& params)
|
||||
{
|
||||
// 由于仅有萨米肉鸽使用,任务名暂定写死
|
||||
std::shared_ptr<OcrTaskInfo> bannerCheckConfig =
|
||||
Task.get<OcrTaskInfo>("Sami@Roguelike@CheckCollapsalParadigms_bannerCheckConfig");
|
||||
m_deepen_text = bannerCheckConfig->text.front();
|
||||
m_banner_triggers_start.insert(bannerCheckConfig->sub.begin(), bannerCheckConfig->sub.end());
|
||||
m_banner_triggers_completed.insert(bannerCheckConfig->next.begin(), bannerCheckConfig->next.end());
|
||||
const std::string& theme = m_config->get_theme();
|
||||
if (theme != RoguelikeTheme::Sami) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::shared_ptr<OcrTaskInfo> panelCheckConfig =
|
||||
const RoguelikeMode& mode = m_config->get_mode();
|
||||
m_double_check_clp_pds = params.get("double_check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS);
|
||||
|
||||
// 仅萨米肉鸽使用 TODO: 去掉名字里的下划线, _b -> B, _p -> P
|
||||
const auto& bannerCheckConfig =
|
||||
Task.get<OcrTaskInfo>("Sami@Roguelike@CheckCollapsalParadigms_bannerCheckConfig");
|
||||
const auto& panelCheckConfig =
|
||||
Task.get<OcrTaskInfo>("Sami@Roguelike@CheckCollapsalParadigms_panelCheckConfig");
|
||||
|
||||
m_deepen_text = bannerCheckConfig->text.front();
|
||||
m_roi = panelCheckConfig->roi;
|
||||
m_swipe_begin.x = panelCheckConfig->specific_rect.x;
|
||||
m_swipe_begin.y = panelCheckConfig->specific_rect.y;
|
||||
m_swipe_end.x = panelCheckConfig->rect_move.x;
|
||||
m_swipe_end.y = panelCheckConfig->rect_move.y;
|
||||
m_panel_triggers.insert(panelCheckConfig->sub.begin(), panelCheckConfig->sub.end());
|
||||
ranges::for_each(panelCheckConfig->replace_map, [&](const std::pair<std::string, std::string>& p) {
|
||||
m_zone_dict.emplace(p.first, p.second);
|
||||
});
|
||||
|
||||
m_banner_triggers_start = std::unordered_set(bannerCheckConfig->sub.begin(), bannerCheckConfig->sub.end());
|
||||
m_banner_triggers_completed = std::unordered_set(bannerCheckConfig->next.begin(), bannerCheckConfig->next.end());
|
||||
m_panel_triggers = std::unordered_set(panelCheckConfig->sub.begin(), panelCheckConfig->sub.end());
|
||||
m_zone_dict = std::unordered_map(panelCheckConfig->replace_map.begin(), panelCheckConfig->replace_map.end());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool asst::RoguelikeCollapsalParadigmTaskPlugin::verify(const AsstMsg msg, const json::value& details) const
|
||||
|
||||
@@ -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 bool set_params(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