mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
fix: 修复肉鸽插件重复注册
This commit is contained in:
@@ -7,8 +7,8 @@
|
||||
|
||||
// ------------------ 通用配置及插件 ------------------
|
||||
#include "Task/Miscellaneous/ScreenshotTaskPlugin.h"
|
||||
#include "Task/Roguelike/RoguelikeConfig.h"
|
||||
#include "Task/Roguelike/RoguelikeBattleTaskPlugin.h"
|
||||
#include "Task/Roguelike/RoguelikeConfig.h"
|
||||
#include "Task/Roguelike/RoguelikeControlTaskPlugin.h"
|
||||
#include "Task/Roguelike/RoguelikeCustomStartTaskPlugin.h"
|
||||
#include "Task/Roguelike/RoguelikeDebugTaskPlugin.h"
|
||||
@@ -25,25 +25,62 @@
|
||||
#include "Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h"
|
||||
|
||||
// ------------------ 萨米主题专用配置及插件 ------------------
|
||||
#include "Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h"
|
||||
#include "Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h"
|
||||
#include "Task/Roguelike/Sami/RoguelikeFoldartalGainTaskPlugin.h"
|
||||
#include "Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h"
|
||||
#include "Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h"
|
||||
#include "Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h"
|
||||
#include "Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h"
|
||||
|
||||
#include "Utils/Logger.hpp"
|
||||
|
||||
asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst)
|
||||
: InterfaceTask(callback, inst, TaskType),
|
||||
m_roguelike_task_ptr(std::make_shared<ProcessTask>(callback, inst, TaskType)),
|
||||
m_roguelike_config_ptr(std::make_shared<RoguelikeConfig>())
|
||||
: InterfaceTask(callback, inst, TaskType)
|
||||
, m_roguelike_task_ptr(std::make_shared<ProcessTask>(callback, inst, TaskType))
|
||||
, m_config_ptr(std::make_shared<RoguelikeConfig>())
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
m_roguelike_task_ptr->set_ignore_error(true);
|
||||
|
||||
m_invest_plugin_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeInvestTaskPlugin>(
|
||||
m_roguelike_config_ptr);
|
||||
// ------------------ 通用插件 ------------------
|
||||
m_roguelike_task_ptr->register_plugin<ScreenshotTaskPlugin>();
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFormationTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeControlTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeResetTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeSettlementTaskPlugin>(m_config_ptr);
|
||||
m_invest_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeInvestTaskPlugin>(m_config_ptr);
|
||||
|
||||
m_debug_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeDebugTaskPlugin>(m_config_ptr);
|
||||
m_custom_ptr =
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeCustomStartTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeShoppingTaskPlugin>(m_config_ptr)
|
||||
->set_retry_times(0);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeBattleTaskPlugin>(m_config_ptr)
|
||||
->set_retry_times(0)
|
||||
.set_ignore_error(true);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeRecruitTaskPlugin>(m_config_ptr)
|
||||
->set_retry_times(2)
|
||||
.set_ignore_error(true);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeSkillSelectionTaskPlugin>(m_config_ptr)
|
||||
->set_retry_times(2)
|
||||
.set_ignore_error(true);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeStageEncounterTaskPlugin>(m_config_ptr)
|
||||
->set_retry_times(0);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeLastRewardTaskPlugin>(m_config_ptr);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeDifficultySelectionTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeStrategyChangeTaskPlugin>(m_config_ptr);
|
||||
|
||||
// ------------------ 萨米主题专用插件 ------------------
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFoldartalGainTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFoldartalUseTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFoldartalStartTaskPlugin>(m_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeCollapsalParadigmTaskPlugin>(m_config_ptr);
|
||||
|
||||
// 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加亿点。先这样凑合用
|
||||
for (int i = 0; i != 999; ++i) {
|
||||
@@ -71,20 +108,21 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
|
||||
}
|
||||
|
||||
m_roguelike_task_ptr->set_tasks({ theme + "@Roguelike@Begin" });
|
||||
m_roguelike_config_ptr->set_theme(theme);
|
||||
m_roguelike_config_ptr->set_mode(mode);
|
||||
m_roguelike_config_ptr->set_difficulty(0);
|
||||
m_config_ptr->set_theme(theme);
|
||||
m_config_ptr->set_mode(mode);
|
||||
m_config_ptr->set_difficulty(0);
|
||||
// 是否凹指定干员开局直升
|
||||
m_roguelike_config_ptr->set_start_with_elite_two(params.get("start_with_elite_two", false));
|
||||
m_roguelike_config_ptr->set_only_start_with_elite_two(params.get("only_start_with_elite_two", false));
|
||||
m_config_ptr->set_start_with_elite_two(params.get("start_with_elite_two", false));
|
||||
m_config_ptr->set_only_start_with_elite_two(params.get("only_start_with_elite_two", false));
|
||||
|
||||
m_invest_plugin_ptr->set_invest_maximum(params.get("investments_count", INT_MAX));
|
||||
m_invest_plugin_ptr->set_stop_when_full(params.get("stop_when_investment_full", false));
|
||||
m_invest_ptr->set_invest_maximum(params.get("investments_count", INT_MAX));
|
||||
m_invest_ptr->set_stop_when_full(params.get("stop_when_investment_full", false));
|
||||
// 设置层数选点策略,相关逻辑在 RoguelikeStrategyChangeTaskPlugin
|
||||
{
|
||||
Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_default");
|
||||
std::string strategy_task = theme + "@Roguelike@StrategyChange";
|
||||
std::string strategy_task_with_mode = strategy_task + "_mode" + std::to_string(static_cast<int>(mode));
|
||||
std::string strategy_task_with_mode =
|
||||
strategy_task + "_mode" + std::to_string(static_cast<int>(mode));
|
||||
if (Task.get(strategy_task_with_mode) == nullptr) {
|
||||
strategy_task_with_mode = "#none"; // 没有对应的层数选点策略,使用默认策略(避战)
|
||||
Log.warn(__FUNCTION__, "No strategy for mode", static_cast<int>(mode));
|
||||
@@ -99,25 +137,36 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
|
||||
Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_default");
|
||||
Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_default");
|
||||
|
||||
m_debug_ptr->set_enable(mode != RoguelikeMode::Investment);
|
||||
if (mode == RoguelikeMode::Investment) {
|
||||
bool investment_with_more_score = params.get("investment_with_more_score", false);
|
||||
if (!params.contains("investment_with_more_score") && params.contains("investment_enter_second_floor")) {
|
||||
if (!params.contains("investment_with_more_score")
|
||||
&& params.contains("investment_enter_second_floor")) {
|
||||
investment_with_more_score = params.get("investment_enter_second_floor", true);
|
||||
Log.warn("================ DEPRECATED ================");
|
||||
Log.warn("`investment_enter_second_floor` has been deprecated since v5.2.1; Please use 'investment_with_more_score'");
|
||||
Log.warn(
|
||||
"`investment_enter_second_floor` has been deprecated since v5.2.1; Please use "
|
||||
"'investment_with_more_score'");
|
||||
Log.warn("================ DEPRECATED ================");
|
||||
}
|
||||
m_roguelike_config_ptr->set_invest_with_more_score(investment_with_more_score);
|
||||
m_config_ptr->set_invest_with_more_score(investment_with_more_score);
|
||||
// 刷源石锭模式是否进入第二层
|
||||
if (investment_with_more_score) {
|
||||
// 战斗后奖励默认
|
||||
Task.set_task_base(theme + "@Roguelike@DropsFlag", theme + "@Roguelike@DropsFlag_default");
|
||||
Task.set_task_base(
|
||||
theme + "@Roguelike@DropsFlag",
|
||||
theme + "@Roguelike@DropsFlag_default");
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderInvestCancel", INT_MAX);
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderLeaveConfirm", 0, ProcessTask::TimesLimitType::Post);
|
||||
m_roguelike_task_ptr->set_times_limit(
|
||||
"StageTraderLeaveConfirm",
|
||||
0,
|
||||
ProcessTask::TimesLimitType::Post);
|
||||
}
|
||||
else {
|
||||
// 战斗后奖励只拿钱
|
||||
Task.set_task_base(theme + "@Roguelike@DropsFlag", theme + "@Roguelike@DropsFlag_mode1");
|
||||
Task.set_task_base(
|
||||
theme + "@Roguelike@DropsFlag",
|
||||
theme + "@Roguelike@DropsFlag_mode1");
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderInvestCancel", 0);
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderLeaveConfirm", INT_MAX);
|
||||
}
|
||||
@@ -129,22 +178,26 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderLeaveConfirm", INT_MAX);
|
||||
}
|
||||
|
||||
m_roguelike_task_ptr->set_times_limit(theme + "@Roguelike@StartExplore", params.get("starts_count", INT_MAX));
|
||||
m_roguelike_task_ptr->set_times_limit(
|
||||
theme + "@Roguelike@StartExplore",
|
||||
params.get("starts_count", INT_MAX));
|
||||
// 通过 exceededNext 禁用投资系统,进入商店购买逻辑
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderInvestSystem",
|
||||
params.get("investment_enabled", true) ? INT_MAX : 0);
|
||||
m_roguelike_task_ptr->set_times_limit("StageTraderRefreshWithDice",
|
||||
params.get("refresh_trader_with_dice", false) ? INT_MAX : 0);
|
||||
m_roguelike_task_ptr->set_times_limit(
|
||||
"StageTraderInvestSystem",
|
||||
params.get("investment_enabled", true) ? INT_MAX : 0);
|
||||
m_roguelike_task_ptr->set_times_limit(
|
||||
"StageTraderRefreshWithDice",
|
||||
params.get("refresh_trader_with_dice", false) ? INT_MAX : 0);
|
||||
|
||||
// =========================== 萨米主题专用参数 ===========================
|
||||
|
||||
|
||||
if (theme == RoguelikeTheme::Sami) {
|
||||
// 是否凹开局远见密文板
|
||||
m_roguelike_config_ptr->set_first_floor_foldartal(params.contains("first_floor_foldartal"));
|
||||
m_roguelike_config_ptr->set_start_floor_foldartal(params.get("first_floor_foldartal", ""));
|
||||
m_config_ptr->set_first_floor_foldartal(params.contains("first_floor_foldartal"));
|
||||
m_config_ptr->set_start_floor_foldartal(params.get("first_floor_foldartal", ""));
|
||||
|
||||
// 是否生活队凹开局板子
|
||||
m_roguelike_config_ptr->set_start_foldartal(params.contains("start_foldartal_list"));
|
||||
m_config_ptr->set_start_foldartal(params.contains("start_foldartal_list"));
|
||||
|
||||
if (auto opt = params.find<json::array>("start_foldartal_list"); opt) {
|
||||
std::vector<std::string> list;
|
||||
@@ -157,84 +210,35 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
|
||||
Log.error(__FUNCTION__, "| Empty start_foldartal_list");
|
||||
return false;
|
||||
}
|
||||
m_roguelike_config_ptr->set_start_foldartal_list(std::move(list));
|
||||
m_config_ptr->set_start_foldartal_list(std::move(list));
|
||||
}
|
||||
|
||||
// 是否使用密文版, 非CLP_PDS模式下默认为True, CLP_PDS模式下默认为False
|
||||
m_roguelike_config_ptr->set_use_foldartal(params.get("use_foldartal", mode != RoguelikeMode::CLP_PDS));
|
||||
m_config_ptr->set_use_foldartal(
|
||||
params.get("use_foldartal", mode != RoguelikeMode::CLP_PDS));
|
||||
|
||||
// 是否检查坍缩范式,非CLP_PDS模式下默认为False, CLP_PDS模式下默认为True
|
||||
m_roguelike_config_ptr->set_check_clp_pds(params.get("check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS));
|
||||
m_roguelike_config_ptr->set_double_check_clp_pds(params.get("double_check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS));
|
||||
m_config_ptr->set_check_clp_pds(
|
||||
params.get("check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS));
|
||||
m_config_ptr->set_double_check_clp_pds(
|
||||
params.get("double_check_collapsal_paradigms", mode == RoguelikeMode::CLP_PDS));
|
||||
|
||||
const std::unordered_set<std::string>& rare_clp_pds = RoguelikeCollapsalParadigms.get_rare_clp_pds(theme);
|
||||
m_roguelike_config_ptr->set_expected_clp_pds(params.get("expected_collapsal_paradigms", rare_clp_pds));
|
||||
const std::unordered_set<std::string>& rare_clp_pds =
|
||||
RoguelikeCollapsalParadigms.get_rare_clp_pds(theme);
|
||||
m_config_ptr->set_expected_clp_pds(
|
||||
params.get("expected_collapsal_paradigms", rare_clp_pds));
|
||||
}
|
||||
|
||||
register_roguelike_plugins(params);
|
||||
|
||||
const auto& ptr = m_custom_ptr;
|
||||
ptr->set_custom(RoguelikeCustomType::Squad, params.get("squad", "")); // 开局分队
|
||||
ptr->set_custom(RoguelikeCustomType::Roles, params.get("roles", "")); // 开局职业组
|
||||
ptr->set_custom(RoguelikeCustomType::CoreChar, params.get("core_char", "")); // 开局干员名
|
||||
ptr->set_custom(
|
||||
RoguelikeCustomType::UseSupport,
|
||||
params.get("use_support", false) ? "1" : "0"); // 开局干员是否为助战干员
|
||||
ptr->set_custom(
|
||||
RoguelikeCustomType::UseNonfriendSupport,
|
||||
params.get("use_nonfriend_support", false) ? "1" : "0"); // 是否可以是非好友助战干员
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void asst::RoguelikeTask::register_roguelike_plugins(const json::value& params) {
|
||||
|
||||
LogTraceFunction;
|
||||
|
||||
// ------------------ 通用插件 ------------------
|
||||
m_roguelike_task_ptr->register_plugin<ScreenshotTaskPlugin>();
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFormationTaskPlugin>(m_roguelike_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeControlTaskPlugin>(m_roguelike_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeResetTaskPlugin>(m_roguelike_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeSettlementTaskPlugin>(m_roguelike_config_ptr);
|
||||
|
||||
std::shared_ptr<RoguelikeDebugTaskPlugin> debug_plugin_ptr =
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeDebugTaskPlugin>(m_roguelike_config_ptr);
|
||||
if (m_roguelike_config_ptr->get_mode() == RoguelikeMode::Investment) {
|
||||
debug_plugin_ptr->set_enable(false);
|
||||
}
|
||||
else {
|
||||
debug_plugin_ptr->set_enable(true);
|
||||
}
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeShoppingTaskPlugin>(m_roguelike_config_ptr)->set_retry_times(0);
|
||||
|
||||
|
||||
const auto& custom_start_plugin_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeCustomStartTaskPlugin>(m_roguelike_config_ptr);
|
||||
custom_start_plugin_ptr->set_custom(RoguelikeCustomType::Squad, params.get("squad", "")); // 开局分队
|
||||
custom_start_plugin_ptr->set_custom(RoguelikeCustomType::Roles, params.get("roles", "")); // 开局职业组
|
||||
custom_start_plugin_ptr->set_custom(RoguelikeCustomType::CoreChar, params.get("core_char", "")); // 开局干员名
|
||||
custom_start_plugin_ptr->set_custom(RoguelikeCustomType::UseSupport,
|
||||
params.get("use_support", false) ? "1" : "0"); // 开局干员是否为助战干员
|
||||
custom_start_plugin_ptr->set_custom(RoguelikeCustomType::UseNonfriendSupport,
|
||||
params.get("use_nonfriend_support", false) ? "1"
|
||||
: "0"); // 是否可以是非好友助战干员
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeBattleTaskPlugin>(m_roguelike_config_ptr)
|
||||
->set_retry_times(0)
|
||||
.set_ignore_error(true);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeRecruitTaskPlugin>(m_roguelike_config_ptr)
|
||||
->set_retry_times(2)
|
||||
.set_ignore_error(true);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeSkillSelectionTaskPlugin>(m_roguelike_config_ptr)
|
||||
->set_retry_times(2)
|
||||
.set_ignore_error(true);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeStageEncounterTaskPlugin>(m_roguelike_config_ptr)
|
||||
->set_retry_times(0);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeLastRewardTaskPlugin>(m_roguelike_config_ptr);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeDifficultySelectionTaskPlugin>(m_roguelike_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeStrategyChangeTaskPlugin>(m_roguelike_config_ptr);
|
||||
|
||||
// ------------------ 萨米主题专用插件 ------------------
|
||||
|
||||
if (m_roguelike_config_ptr->get_theme() == RoguelikeTheme::Sami) {
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFoldartalGainTaskPlugin>(m_roguelike_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFoldartalUseTaskPlugin>(m_roguelike_config_ptr);
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeFoldartalStartTaskPlugin>(m_roguelike_config_ptr);
|
||||
|
||||
m_roguelike_task_ptr->register_plugin<RoguelikeCollapsalParadigmTaskPlugin>(m_roguelike_config_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ namespace asst
|
||||
class ProcessTask;
|
||||
class RoguelikeConfig;
|
||||
class RoguelikeInvestTaskPlugin;
|
||||
class RoguelikeDebugTaskPlugin;
|
||||
class RoguelikeCustomStartTaskPlugin;
|
||||
|
||||
class RoguelikeTask : public InterfaceTask
|
||||
{
|
||||
@@ -19,9 +21,10 @@ namespace asst
|
||||
|
||||
private:
|
||||
std::shared_ptr<ProcessTask> m_roguelike_task_ptr = nullptr;
|
||||
std::shared_ptr<RoguelikeConfig> m_roguelike_config_ptr = nullptr;
|
||||
std::shared_ptr<RoguelikeInvestTaskPlugin> m_invest_plugin_ptr = nullptr;
|
||||
std::shared_ptr<RoguelikeConfig> m_config_ptr = nullptr;
|
||||
std::shared_ptr<RoguelikeInvestTaskPlugin> m_invest_ptr = nullptr;
|
||||
std::shared_ptr<RoguelikeDebugTaskPlugin> m_debug_ptr = nullptr;
|
||||
std::shared_ptr<RoguelikeCustomStartTaskPlugin> m_custom_ptr = nullptr;
|
||||
|
||||
void register_roguelike_plugins(const json::value& params);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ namespace asst
|
||||
void set_use_nonfriend_support(bool value) { m_use_nonfriend_support = value; }
|
||||
bool get_use_nonfriend_support() const { return m_use_nonfriend_support; }
|
||||
void set_oper(std::unordered_map<std::string, RoguelikeOper> oper) { m_oper = std::move(oper); }
|
||||
const std::unordered_map<std::string, RoguelikeOper>& get_oper() const { return m_oper; }
|
||||
const auto& get_oper() const { return m_oper; }
|
||||
|
||||
private:
|
||||
// ------------------ 招募 ------------------
|
||||
|
||||
@@ -35,11 +35,11 @@ bool asst::RoguelikeStageEncounterTaskPlugin::verify(AsstMsg msg, const json::va
|
||||
bool asst::RoguelikeStageEncounterTaskPlugin::_run()
|
||||
{
|
||||
LogTraceFunction;
|
||||
if (!plugin_gained) {
|
||||
plugin_gained = true;
|
||||
typedef RoguelikeCollapsalParadigmTaskPlugin CPPlugin;
|
||||
if (!m_plugin_gained) {
|
||||
m_plugin_gained = true;
|
||||
typedef RoguelikeCollapsalParadigmTaskPlugin Plugin;
|
||||
for (const auto& plugin : m_task_ptr->get_plugins()) {
|
||||
if (auto ptr = std::dynamic_pointer_cast<CPPlugin>(plugin)) {
|
||||
if (auto ptr = std::dynamic_pointer_cast<Plugin>(plugin)) {
|
||||
m_clp_pd_plugin = ptr;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,6 @@ namespace asst
|
||||
private:
|
||||
std::shared_ptr<RoguelikeCollapsalParadigmTaskPlugin> m_clp_pd_plugin;
|
||||
|
||||
bool plugin_gained = false;
|
||||
bool m_plugin_gained = false;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,7 +10,40 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
bool asst::RoguelikeCollapsalParadigmTaskPlugin::verify(const AsstMsg msg, const json::value& details) const
|
||||
asst::RoguelikeCollapsalParadigmTaskPlugin::RoguelikeCollapsalParadigmTaskPlugin(
|
||||
const AsstCallback& callback,
|
||||
Assistant* inst,
|
||||
std::string_view task_chain,
|
||||
std::shared_ptr<RoguelikeConfig> config)
|
||||
: AbstractRoguelikeTaskPlugin(callback, inst, task_chain, config)
|
||||
{
|
||||
// 由于仅有萨米肉鸽使用,任务名暂定写死
|
||||
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());
|
||||
|
||||
std::shared_ptr<OcrTaskInfo> panelCheckConfig =
|
||||
Task.get<OcrTaskInfo>("Sami@Roguelike@CheckCollapsalParadigms_panelCheckConfig");
|
||||
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());
|
||||
std::ranges::for_each(
|
||||
panelCheckConfig->replace_map,
|
||||
[&](const std::pair<std::string, std::string>& p) {
|
||||
m_zone_dict.emplace(p.first, p.second);
|
||||
});
|
||||
}
|
||||
|
||||
bool asst::RoguelikeCollapsalParadigmTaskPlugin::verify(
|
||||
const AsstMsg msg,
|
||||
const json::value& details) const
|
||||
{
|
||||
if ((msg != AsstMsg::SubTaskStart && msg != AsstMsg::SubTaskCompleted) || details.get("subtask", std::string()) != "ProcessTask") {
|
||||
return false;
|
||||
|
||||
@@ -9,31 +9,12 @@ namespace asst
|
||||
class RoguelikeCollapsalParadigmTaskPlugin : public AbstractRoguelikeTaskPlugin
|
||||
{
|
||||
public:
|
||||
RoguelikeCollapsalParadigmTaskPlugin(const AsstCallback& callback,
|
||||
Assistant* inst,
|
||||
std::string_view task_chain,
|
||||
std::shared_ptr<RoguelikeConfig> config)
|
||||
: AbstractRoguelikeTaskPlugin(callback, inst, task_chain, config)
|
||||
{
|
||||
const std::string& theme = config->get_theme();
|
||||
|
||||
std::shared_ptr<OcrTaskInfo> bannerCheckConfig =
|
||||
Task.get<OcrTaskInfo>(theme + "@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());
|
||||
|
||||
std::shared_ptr<OcrTaskInfo> panelCheckConfig =
|
||||
Task.get<OcrTaskInfo>(theme + "@Roguelike@CheckCollapsalParadigms_panelCheckConfig");
|
||||
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());
|
||||
std::ranges::for_each(panelCheckConfig->replace_map,
|
||||
[&](const std::pair<std::string, std::string>& p) { m_zone_dict.emplace(p.first, p.second); });
|
||||
}
|
||||
RoguelikeCollapsalParadigmTaskPlugin(
|
||||
const AsstCallback& callback,
|
||||
Assistant* inst,
|
||||
std::string_view task_chain,
|
||||
std::shared_ptr<RoguelikeConfig> config);
|
||||
|
||||
// using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin;
|
||||
virtual ~RoguelikeCollapsalParadigmTaskPlugin() override = default;
|
||||
|
||||
|
||||
@@ -76,6 +76,16 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::verify(const AsstMsg msg, const json
|
||||
bool asst::RoguelikeFoldartalUseTaskPlugin::_run()
|
||||
{
|
||||
LogTraceFunction;
|
||||
if (!m_plugin_gained) {
|
||||
m_plugin_gained = true;
|
||||
typedef RoguelikeCollapsalParadigmTaskPlugin Plugin;
|
||||
for (const auto& plugin : m_task_ptr->get_plugins()) {
|
||||
if (auto ptr = std::dynamic_pointer_cast<Plugin>(plugin)) {
|
||||
m_clp_pd_plugin = ptr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<RoguelikeFoldartalCombination> combination =
|
||||
RoguelikeFoldartal.get_combination(m_config->get_theme());
|
||||
|
||||
@@ -8,17 +8,7 @@ namespace asst
|
||||
class RoguelikeFoldartalUseTaskPlugin : public AbstractRoguelikeTaskPlugin
|
||||
{
|
||||
public:
|
||||
// using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin;
|
||||
RoguelikeFoldartalUseTaskPlugin(const AsstCallback& callback,
|
||||
Assistant* inst,
|
||||
std::string_view task_chain,
|
||||
std::shared_ptr<RoguelikeConfig> config)
|
||||
: AbstractRoguelikeTaskPlugin(callback, inst, task_chain, config)
|
||||
{
|
||||
if (RoguelikeCollapsalParadigmTaskPlugin::enabled(config)) {
|
||||
m_clp_pd_plugin = std::make_shared<RoguelikeCollapsalParadigmTaskPlugin>(callback, inst, task_chain, config);
|
||||
}
|
||||
}
|
||||
using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin;
|
||||
virtual ~RoguelikeFoldartalUseTaskPlugin() override = default;
|
||||
|
||||
public:
|
||||
@@ -54,6 +44,7 @@ namespace asst
|
||||
// 节点类型
|
||||
mutable std::string m_stage;
|
||||
|
||||
bool m_plugin_gained;
|
||||
std::shared_ptr<RoguelikeCollapsalParadigmTaskPlugin> m_clp_pd_plugin;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user