diff --git a/src/MaaCore/Config/ResourceLoader.cpp b/src/MaaCore/Config/ResourceLoader.cpp
index 844a133650..ced93e8461 100644
--- a/src/MaaCore/Config/ResourceLoader.cpp
+++ b/src/MaaCore/Config/ResourceLoader.cpp
@@ -16,11 +16,11 @@
#include "Miscellaneous/TilePack.h"
#include "OnnxSessions.h"
#include "Roguelike/RoguelikeCopilotConfig.h"
-#include "Roguelike/RoguelikeFoldartalConfig.h"
-#include "Roguelike/RoguelikeCollapsalParadigmConfig.h"
#include "Roguelike/RoguelikeRecruitConfig.h"
#include "Roguelike/RoguelikeShoppingConfig.h"
#include "Roguelike/RoguelikeStageEncounterConfig.h"
+#include "Roguelike/Sami/RoguelikeFoldartalConfig.h"
+#include "Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h"
#include "TaskData.h"
#include "TemplResource.h"
#include "Utils/Logger.hpp"
@@ -167,10 +167,12 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path)
// 原来这后面是用 AsyncLoadConfig 的,以下是原来的注释:
//// 不太重要又加载的慢的资源,但不怎么占内存的,实时异步加载
//// DEBUG 模式下这里还是检查返回值的,方便排查问题
+ // –––––––– Roguelike Copilot Config ––––––––––––––––––––––––––––––––––––––––––––––
LoadResourceAndCheckRet(RoguelikeCopilotConfig, "roguelike"_p / "Phantom"_p / "autopilot"_p);
LoadResourceAndCheckRet(RoguelikeCopilotConfig, "roguelike"_p / "Mizuki"_p / "autopilot"_p);
LoadResourceAndCheckRet(RoguelikeCopilotConfig, "roguelike"_p / "Sami"_p / "autopilot"_p);
+ // –––––––– Roguelike Recruitment Config ––––––––––––––––––––––––––––––––––––––––––
LoadResourceAndCheckRet(
RoguelikeRecruitConfig,
"roguelike"_p / "Phantom"_p / "recruitment.json"_p);
@@ -181,14 +183,18 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path)
RoguelikeRecruitConfig,
"roguelike"_p / "Sami"_p / "recruitment.json"_p);
+ // –––––––– Roguelike Shopping Config –––––––––––––––––––––––––––––––––––––––––––––
LoadResourceAndCheckRet(
RoguelikeShoppingConfig,
"roguelike"_p / "Phantom"_p / "shopping.json"_p);
LoadResourceAndCheckRet(
RoguelikeShoppingConfig,
"roguelike"_p / "Mizuki"_p / "shopping.json"_p);
- LoadResourceAndCheckRet(RoguelikeShoppingConfig, "roguelike"_p / "Sami"_p / "shopping.json"_p);
+ LoadResourceAndCheckRet(
+ RoguelikeShoppingConfig,
+ "roguelike"_p / "Sami"_p / "shopping.json"_p);
+ // –––––––– Roguelike Encounter Config ––––––––––––––––––––––––––––––––––––––––––––
LoadResourceAndCheckRet(
RoguelikeStageEncounterConfig,
"roguelike"_p / "Phantom"_p / "encounter"_p / "default.json"_p);
@@ -211,10 +217,10 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path)
RoguelikeStageEncounterConfig,
"roguelike"_p / "Sami"_p / "encounter"_p / "collapse.json"_p);
+ // –––––––– Sami Plugin Config ––––––––––––––––––––––––––––––––––––––––––––––––––––
LoadResourceAndCheckRet(
RoguelikeFoldartalConfig,
"roguelike"_p / "Sami"_p / "foldartal.json"_p);
-
LoadResourceAndCheckRet(
RoguelikeCollapsalParadigmConfig,
"roguelike"_p / "Sami"_p / "collapsal_paradigms.json"_p);
diff --git a/src/MaaCore/Config/Roguelike/RoguelikeCollapsalParadigmConfig.cpp b/src/MaaCore/Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.cpp
similarity index 100%
rename from src/MaaCore/Config/Roguelike/RoguelikeCollapsalParadigmConfig.cpp
rename to src/MaaCore/Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.cpp
diff --git a/src/MaaCore/Config/Roguelike/RoguelikeCollapsalParadigmConfig.h b/src/MaaCore/Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h
similarity index 100%
rename from src/MaaCore/Config/Roguelike/RoguelikeCollapsalParadigmConfig.h
rename to src/MaaCore/Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h
diff --git a/src/MaaCore/Config/Roguelike/RoguelikeFoldartalConfig.cpp b/src/MaaCore/Config/Roguelike/Sami/RoguelikeFoldartalConfig.cpp
similarity index 100%
rename from src/MaaCore/Config/Roguelike/RoguelikeFoldartalConfig.cpp
rename to src/MaaCore/Config/Roguelike/Sami/RoguelikeFoldartalConfig.cpp
diff --git a/src/MaaCore/Config/Roguelike/RoguelikeFoldartalConfig.h b/src/MaaCore/Config/Roguelike/Sami/RoguelikeFoldartalConfig.h
similarity index 100%
rename from src/MaaCore/Config/Roguelike/RoguelikeFoldartalConfig.h
rename to src/MaaCore/Config/Roguelike/Sami/RoguelikeFoldartalConfig.h
diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj
index 2ff2c06773..e072e4da95 100644
--- a/src/MaaCore/MaaCore.vcxproj
+++ b/src/MaaCore/MaaCore.vcxproj
@@ -93,15 +93,16 @@
-
-
-
+
+
+
+
@@ -154,8 +155,8 @@
-
-
+
+
@@ -209,7 +210,6 @@
-
@@ -276,9 +276,10 @@
-
-
-
+
+
+
+
@@ -332,8 +333,8 @@
-
-
+
+
@@ -386,7 +387,6 @@
-
diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters
index ada2d30f30..fbd79516d8 100644
--- a/src/MaaCore/MaaCore.vcxproj.filters
+++ b/src/MaaCore/MaaCore.vcxproj.filters
@@ -219,9 +219,6 @@
Source\Resource
-
- Source\Resource\Roguelike
-
Source\Resource\Roguelike
@@ -234,7 +231,10 @@
Source\Resource\Roguelike
-
+
+ Source\Resource\Roguelike
+
+
Source\Resource\Roguelike
@@ -453,10 +453,16 @@
Source\Task\Roguelike
-
+
Source\Task\Roguelike
-
+
+ Source\Task\Roguelike
+
+
+ Source\Task\Roguelike
+
+
Source\Task\Roguelike
@@ -498,9 +504,6 @@
Source\Task\Roguelike
-
- Source\Task\Roguelike
-
Source
@@ -702,9 +705,6 @@
Source\Task\Roguelike
-
- Source\Task\Roguelike
-
Source\Controller
@@ -785,9 +785,6 @@
Source\Resource
-
- Source\Resource\Roguelike
-
Source\Resource\Roguelike
@@ -800,7 +797,10 @@
Source\Resource\Roguelike
-
+
+ Source\Resource\Roguelike
+
+
Source\Resource\Roguelike
@@ -965,10 +965,16 @@
Source\Task\Roguelike
-
+
Source\Task\Roguelike
-
+
+ Source\Task\Roguelike
+
+
+ Source\Task\Roguelike
+
+
Source\Task\Roguelike
@@ -1010,9 +1016,6 @@
Source\Task\Roguelike
-
- Source\Task\Roguelike
-
Source
@@ -1184,9 +1187,6 @@
Source\Task\Roguelike
-
- Source\Task\Roguelike
-
Source\Controller
diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp
index b024251ec0..af7f0c0566 100644
--- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp
+++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp
@@ -3,17 +3,16 @@
#include "Common/AsstBattleDef.h"
#include "Config/TaskData.h"
#include "Status.h"
-#include "Task/Miscellaneous/ScreenshotTaskPlugin.h"
#include "Task/ProcessTask.h"
-#include "Task/Roguelike/RoguelikeBattleTaskPlugin.h"
+
+// –––––––– 通用配置及插件 –––––––––––––––––––––––
#include "Task/Roguelike/RoguelikeConfig.h"
+#include "Task/Miscellaneous/ScreenshotTaskPlugin.h"
+#include "Task/Roguelike/RoguelikeBattleTaskPlugin.h"
#include "Task/Roguelike/RoguelikeControlTaskPlugin.h"
#include "Task/Roguelike/RoguelikeCustomStartTaskPlugin.h"
#include "Task/Roguelike/RoguelikeDebugTaskPlugin.h"
#include "Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h"
-#include "Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h"
-#include "Task/Roguelike/RoguelikeFoldartalStartTaskPlugin.h"
-#include "Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h"
#include "Task/Roguelike/RoguelikeFormationTaskPlugin.h"
#include "Task/Roguelike/RoguelikeInvestTaskPlugin.h"
#include "Task/Roguelike/RoguelikeLastRewardTaskPlugin.h"
@@ -25,8 +24,12 @@
#include "Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h"
#include "Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h"
-#include "Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.h"
-#include "Config/Roguelike/RoguelikeCollapsalParadigmConfig.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"
@@ -49,6 +52,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
{
LogTraceFunction;
+ // –––––––– 肉鸽主题设置 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
std::string theme = params.get("theme", std::string(RoguelikeTheme::Phantom));
if (!RoguelikeConfig::is_valid_theme(theme)) {
m_roguelike_task_ptr->set_tasks({ "Stop" });
@@ -71,7 +75,66 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
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_roguelike_config_ptr->set_invest_maximum(params.get("investments_count", INT_MAX));
+ m_roguelike_config_ptr->set_invest_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(mode));
+ if (Task.get(strategy_task_with_mode) == nullptr) {
+ strategy_task_with_mode = "#none"; // 没有对应的层数选点策略,使用默认策略(避战)
+ Log.warn(__FUNCTION__, "No strategy for mode", static_cast(mode));
+ }
+ Task.set_task_base(strategy_task, strategy_task_with_mode);
+ }
+
+ // 重置开局奖励 next,获得任意奖励均继续;烧水相关逻辑在 RoguelikeLastRewardTaskPlugin
+ Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_default");
+ Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_default");
+ Task.set_task_base("Roguelike@LastReward3", "Roguelike@LastReward_default");
+ Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_default");
+ Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_default");
+
+ 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")) {
+ 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("================ DEPRECATED ================");
+ }
+ m_roguelike_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");
+ m_roguelike_task_ptr->set_times_limit("StageTraderInvestCancel", INT_MAX);
+ m_roguelike_task_ptr->set_times_limit("StageTraderLeaveConfirm", 0, ProcessTask::TimesLimitType::Post);
+ }
+ else {
+ // 战斗后奖励只拿钱
+ 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);
+ }
+ }
+ else {
+ // 重置战斗后奖励next
+ 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", 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);
+
+ // ======== 萨米主题专用参数 ==============================================================
+
if (theme == RoguelikeTheme::Sami) {
// 是否凹开局远见密文板
m_roguelike_config_ptr->set_first_floor_foldartal(params.contains("first_floor_foldartal"));
@@ -104,97 +167,46 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
const std::unordered_set& 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));
}
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- m_roguelike_register_plugins();
-
- m_roguelike_config_ptr->set_invest_maximum(params.get("investments_count", INT_MAX));
- m_roguelike_config_ptr->set_invest_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(mode));
- if (Task.get(strategy_task_with_mode) == nullptr) {
- strategy_task_with_mode = "#none"; // 没有对应的层数选点策略,使用默认策略(避战)
- Log.warn(__FUNCTION__, "No strategy for mode", static_cast(mode));
- }
- Task.set_task_base(strategy_task, strategy_task_with_mode);
- }
-
- // 重置开局奖励 next,获得任意奖励均继续;烧水相关逻辑在 RoguelikeLastRewardTaskPlugin
- Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_default");
- Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_default");
- Task.set_task_base("Roguelike@LastReward3", "Roguelike@LastReward_default");
- Task.set_task_base("Roguelike@LastReward4", "Roguelike@LastReward_default");
- Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_default");
-
- if (mode == RoguelikeMode::Investment) {
- m_debug_plugin_ptr->set_enable(false);
- 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")) {
- 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("================ DEPRECATED ================");
- }
- m_roguelike_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");
- m_roguelike_task_ptr->set_times_limit("StageTraderInvestCancel", INT_MAX);
- m_roguelike_task_ptr->set_times_limit("StageTraderLeaveConfirm", 0, ProcessTask::TimesLimitType::Post);
- }
- else {
- // 战斗后奖励只拿钱
- 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);
- }
- }
- else {
- m_debug_plugin_ptr->set_enable(true);
- // 重置战斗后奖励next
- 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", 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_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::Squad, params.get("squad", "")); // 开局分队
- m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::Roles, params.get("roles", "")); // 开局职业组
- m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::CoreChar, params.get("core_char", "")); // 开局干员名
- m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::UseSupport,
- params.get("use_support", false) ? "1" : "0"); // 开局干员是否为助战干员
- m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::UseNonfriendSupport,
- params.get("use_nonfriend_support", false) ? "1"
- : "0"); // 是否可以是非好友助战干员
+ register_roguelike_plugins(params);
+
return true;
}
-void asst::RoguelikeTask::m_roguelike_register_plugins() {
+void asst::RoguelikeTask::register_roguelike_plugins(const json::value& params) {
LogTraceFunction;
- // 通用插件
+ // –––––––– 通用插件 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
m_roguelike_task_ptr->register_plugin();
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
- m_debug_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
+
+ std::shared_ptr debug_plugin_ptr =
+ m_roguelike_task_ptr->register_plugin(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(m_roguelike_config_ptr)->set_retry_times(0);
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
- m_custom_start_plugin_ptr =
+ std::shared_ptr custom_start_plugin_ptr =
m_roguelike_task_ptr->register_plugin(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(m_roguelike_config_ptr)
->set_retry_times(0)
.set_ignore_error(true);
@@ -214,7 +226,8 @@ void asst::RoguelikeTask::m_roguelike_register_plugins() {
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
- // 萨米肉鸽专用插件
+ // –––––––– 萨米主题专用插件 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+
if (m_roguelike_config_ptr->get_theme() == RoguelikeTheme::Sami) {
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
@@ -222,4 +235,4 @@ void asst::RoguelikeTask::m_roguelike_register_plugins() {
m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr);
}
-};
\ No newline at end of file
+}
diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.h b/src/MaaCore/Task/Interface/RoguelikeTask.h
index 8da18fe311..7a2889d154 100644
--- a/src/MaaCore/Task/Interface/RoguelikeTask.h
+++ b/src/MaaCore/Task/Interface/RoguelikeTask.h
@@ -21,9 +21,7 @@ namespace asst
private:
std::shared_ptr m_roguelike_task_ptr = nullptr;
std::shared_ptr m_roguelike_config_ptr = nullptr;
- std::shared_ptr m_custom_start_plugin_ptr = nullptr;
- std::shared_ptr m_debug_plugin_ptr = nullptr;
- void m_roguelike_register_plugins();
+ void register_roguelike_plugins(const json::value& params);
};
}
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp
index 34dfcf2f4c..379b1f32f3 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp
+++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp
@@ -2,6 +2,7 @@
void asst::RoguelikeConfig::clear()
{
+ // –––––––– 通用参数 ––––––––––––––––––––––––––––––––––––––––––––––––––
m_recruitment_count = 0;
m_recruitment_starts_complete = false;
m_recruitment_team_complete = false;
@@ -11,9 +12,9 @@ void asst::RoguelikeConfig::clear()
m_use_support = false;
m_oper = std::unordered_map();
+ // –––––––– 萨米主题专用参数 ––––––––––––––––––––––––––––––––––––––––––––––
m_foldartal_floor.reset();
m_foldartal = std::vector();
-
m_clp_pds = std::vector();
m_need_check_panel = false;
}
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h
index fe9ab66a9c..fe0145f3a5 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h
+++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h
@@ -1,22 +1,14 @@
#pragma once
#include
#include
-#include
#include
+#include
#include
+#include
+#include
namespace asst
{
- enum class RoguelikeMode
- {
- Exp = 0, // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略
- Investment = 1, // 1 - 刷源石锭,第一层投资完就退出,不期而遇采用保守策略
- // 2 - 【已移除】两者兼顾,投资过后再退出,没有投资就继续往后打
- Ending = 3, // 3 - 尝试通关,激进策略(TODO)
- Collectible = 4, // 4 - 刷开局,以获得热水壶或者演讲稿开局或只凹直升,不期而遇采用保守策略
- CLP_PDS = 5 // 5 - 刷隐藏坍缩范式,以增加坍缩值为最优先目标
- };
-
class RoguelikeTheme
{
public:
@@ -25,6 +17,19 @@ namespace asst
static constexpr std::string_view Sami = "Sami";
};
+ enum class RoguelikeMode
+ {
+ // –––––––– 通用模式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ Exp = 0, // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略
+ Investment = 1, // 1 - 刷源石锭,第一层投资完就退出,不期而遇采用保守策略
+ // 2 - 【已移除】两者兼顾,投资过后再退出,没有投资就继续往后打
+ Ending = 3, // 3 - 尝试通关,激进策略(TODO)
+ Collectible = 4, // 4 - 刷开局,以获得热水壶或者演讲稿开局或只凹直升,不期而遇采用保守策略
+
+ // –––––––– 萨米主题专用模式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ CLP_PDS = 5 // 5 - 刷隐藏坍缩范式,以增加坍缩值为最优先目标
+ };
+
struct RoguelikeOper
{
int elite = 0; // 精英化
@@ -34,19 +39,25 @@ namespace asst
class RoguelikeConfig
{
public:
- // 清理缓存的肉鸽数据
- void clear();
static constexpr bool is_valid_theme(std::string_view theme)
{
- return theme == RoguelikeTheme::Phantom || theme == RoguelikeTheme::Mizuki || theme == RoguelikeTheme::Sami;
+ return theme == RoguelikeTheme::Phantom ||
+ theme == RoguelikeTheme::Mizuki ||
+ theme == RoguelikeTheme::Sami;
}
static constexpr bool is_valid_mode(RoguelikeMode mode, std::string_view theme = RoguelikeTheme::Sami)
{
- return mode == RoguelikeMode::Exp || mode == RoguelikeMode::Investment ||
+ return mode == RoguelikeMode::Exp ||
+ mode == RoguelikeMode::Investment ||
mode == RoguelikeMode::Collectible ||
- (mode == RoguelikeMode::CLP_PDS && theme == RoguelikeTheme::Sami);
+ (mode == RoguelikeMode::CLP_PDS && theme == RoguelikeTheme::Sami);
}
+ // 重制肉鸽局内数据
+ void clear();
+
+ // ======== 通用参数 ==================================================================
+
public:
void set_theme(std::string theme) { m_theme = std::move(theme); }
std::string get_theme() const { return m_theme; }
@@ -54,10 +65,85 @@ namespace asst
RoguelikeMode get_mode() const { return m_mode; }
void set_difficulty(int difficulty) { m_difficulty = difficulty; }
int get_difficulty() const { return m_difficulty; }
+
+ // –––––––– 开局 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
void set_start_with_elite_two(bool value) { m_start_with_elite_two = value; }
bool get_start_with_elite_two() const { return m_start_with_elite_two; }
void set_only_start_with_elite_two(bool value) { m_only_start_with_elite_two = value; }
bool get_only_start_with_elite_two() const { return m_only_start_with_elite_two; }
+
+ // –––––––– 投资模式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ void set_invest_maximum(int value) { m_invest_maximum = value; }
+ int get_invest_maximum() const { return m_invest_maximum; }
+ void set_invest_stop_when_full(bool value) { m_invest_stop_when_full = value; }
+ bool get_invest_stop_when_full() const { return m_invest_stop_when_full; }
+ void set_invest_with_more_score(bool value) { m_invest_with_more_score = value; }
+ bool get_invest_with_more_score() const { return m_invest_with_more_score; }
+
+ private:
+ std::string m_theme; // 主题
+ RoguelikeMode m_mode = RoguelikeMode::Exp; // 模式
+ int m_difficulty = 0; // 难度
+
+ // –––––––– 开局 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ bool m_start_with_elite_two = false; // 在刷开局模式下凹开局干员精二直升
+ bool m_only_start_with_elite_two = false; // 只凹开局干员精二直升且不进行作战
+
+ // –––––––– 投资模式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ int m_invest_maximum = 0; // 投资次数上限
+ bool m_invest_stop_when_full = false; // 存款满了就停止
+ bool m_invest_with_more_score = false; // 投资时招募、购物刷分
+
+ /* 以下为局内数据,每次重置 */
+ public:
+ // –––––––– 招募 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ void set_recruitment_count(int count) { m_recruitment_count = count; }
+ int get_recruitment_count() const { return m_recruitment_count; }
+ void set_recruitment_starts_complete(bool complete) { m_recruitment_starts_complete = complete; }
+ bool get_recruitment_starts_complete() const { return m_recruitment_starts_complete; }
+ void set_recruitment_team_complete(bool complete) { m_recruitment_team_complete = complete; }
+ bool get_recruitment_team_complete() const { return m_recruitment_team_complete; }
+ void set_team_full_without_rookie(bool without_rookie) { m_team_full_without_rookie = without_rookie; }
+ bool get_team_full_without_rookie() const { return m_team_full_without_rookie; }
+
+ // –––––––– 商店 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ void set_trader_no_longer_buy(bool no_longer_buy) { m_trader_no_longer_buy = no_longer_buy; }
+ bool get_trader_no_longer_buy() const { return m_trader_no_longer_buy; }
+
+ // –––––––– 开局 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ void set_core_char(std::string core_char) { m_core_char = std::move(core_char); }
+ std::string get_core_char() const { return m_core_char; }
+ void set_use_support(bool use_support) { m_use_support = use_support; }
+ bool get_use_support() const { return m_use_support; }
+ void set_use_nonfriend_support(bool use_nonfriend_support) { m_use_nonfriend_support = use_nonfriend_support; }
+ bool get_use_nonfriend_support() const { return m_use_nonfriend_support; }
+
+ void set_oper(std::unordered_map oper) { m_oper = std::move(oper); }
+ const std::unordered_map& get_oper() const { return m_oper; }
+
+ private:
+ // –––––––– 招募 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ int m_recruitment_count = 0; // 招募次数
+ bool m_recruitment_starts_complete = false; // 开局干员是否已经招募
+ bool m_recruitment_team_complete = false; // 阵容是否完备
+ bool m_team_full_without_rookie = false; // 编队内没有预干员
+
+ // –––––––– 商店 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ bool m_trader_no_longer_buy = false; // 不再购买藏品
+
+ // –––––––– 开局 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ std::string m_core_char; // 开局干员名
+ bool m_use_support = false; // 开局干员是否为助战干员
+ bool m_use_nonfriend_support = false; // 是否可以是非好友助战干员
+
+ std::unordered_map m_oper; // 干员精英&等级
+
+
+
+ // ======== 萨米主题专用参数 ==============================================================
+
+ public:
+ // –––––––– 密文板 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
void set_first_floor_foldartal(bool first_floor_foldartal) { m_first_floor_foldartal = first_floor_foldartal; }
bool get_first_floor_foldartal() const { return m_first_floor_foldartal; }
void set_start_floor_foldartal(std::string value) { m_start_floor_foldartal = value; }
@@ -66,14 +152,10 @@ namespace asst
bool get_start_foldartal() const { return m_start_foldartal; }
void set_start_foldartal_list(std::vector string) { m_start_foldartal_list = string; }
std::vector get_start_foldartal_list() const { return m_start_foldartal_list; }
- void set_invest_maximum(int value) { m_invest_maximum = value; }
- int get_invest_maximum() const { return m_invest_maximum; }
- void set_invest_stop_when_full(bool value) { m_invest_stop_when_full = value; }
- bool get_invest_stop_when_full() const { return m_invest_stop_when_full; }
- void set_invest_with_more_score(bool value) { m_invest_with_more_score = value; }
- bool get_invest_with_more_score() const { return m_invest_with_more_score; }
void set_use_foldartal(bool use_foldrtal) { m_use_foldartal = use_foldrtal; }
bool get_use_foldartal() const {return m_use_foldartal; }
+
+ // –––––––– 坍缩范式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
void set_check_clp_pds(bool check_clp_pds) { m_check_clp_pds = check_clp_pds; }
bool get_check_clp_pds() const {return m_check_clp_pds; }
void set_double_check_clp_pds(bool double_check_clp_pds) { m_double_check_clp_pds = double_check_clp_pds; }
@@ -82,65 +164,39 @@ namespace asst
std::unordered_set get_expected_clp_pds() const { return m_expected_clp_pds; }
private:
- std::string m_theme; // 主题
- RoguelikeMode m_mode = RoguelikeMode::Exp; // 模式
- int m_difficulty = 0; // 难度
- bool m_start_with_elite_two = false; // 在刷开局模式下凹开局干员精二直升
- bool m_only_start_with_elite_two = false; // 只凹开局干员精二直升且不进行作战
- bool m_first_floor_foldartal = false; // 凹远见密文板
- std::string m_start_floor_foldartal; // 需要凹的远见
- bool m_start_foldartal = false; // 生活队凹开局密文板
- std::vector m_start_foldartal_list; // 需要凹的板子
- int m_invest_maximum = 0; // 投资次数上限
- bool m_invest_stop_when_full = false; // 存款满了就停止
- bool m_invest_with_more_score = false; // 投资时招募、购物刷分
- bool m_use_foldartal = true; // 是否使用密文板
- bool m_check_clp_pds = false; // 是否检查坍缩范式
- bool m_double_check_clp_pds = false; // 是否反复检查坍缩范式
+ // –––––––– 密文板 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ bool m_first_floor_foldartal = false; // 凹远见密文板
+ std::string m_start_floor_foldartal; // 需要凹的远见
+ bool m_start_foldartal = false; // 生活队凹开局密文板
+ std::vector m_start_foldartal_list; // 需要凹的板子
+ bool m_use_foldartal = true; // 是否使用密文板
+
+ // –––––––– 坍缩范式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ bool m_check_clp_pds = false; // 是否检查坍缩范式
+ bool m_double_check_clp_pds = false; // 是否反复检查坍缩范式
std::unordered_set m_expected_clp_pds; // 期望获得坍缩范式
- /* 以下为每次重置 */
+ /* 以下为局内数据,每次重置 */
public:
- void set_recruitment_count(int count) { m_recruitment_count = count; }
- int get_recruitment_count() const { return m_recruitment_count; }
- void set_recruitment_starts_complete(bool complete) { m_recruitment_starts_complete = complete; }
- bool get_recruitment_starts_complete() const { return m_recruitment_starts_complete; }
- void set_recruitment_team_complete(bool complete) { m_recruitment_team_complete = complete; }
- bool get_recruitment_team_complete() const { return m_recruitment_team_complete; }
- void set_trader_no_longer_buy(bool no_longer_buy) { m_trader_no_longer_buy = no_longer_buy; }
- bool get_trader_no_longer_buy() const { return m_trader_no_longer_buy; }
- void set_core_char(std::string core_char) { m_core_char = std::move(core_char); }
- std::string get_core_char() const { return m_core_char; }
- void set_team_full_without_rookie(bool without_rookie) { m_team_full_without_rookie = without_rookie; }
- bool get_team_full_without_rookie() const { return m_team_full_without_rookie; }
- void set_use_support(bool use_support) { m_use_support = use_support; }
- bool get_use_support() const { return m_use_support; }
- void set_use_nonfriend_support(bool use_nonfriend_support) { m_use_nonfriend_support = use_nonfriend_support; }
- bool get_use_nonfriend_support() const { return m_use_nonfriend_support; }
- void set_oper(std::unordered_map oper) { m_oper = std::move(oper); }
- const std::unordered_map& get_oper() const { return m_oper; }
+ // –––––––– 密文板 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
void set_foldartal_floor(std::optional floor) { m_foldartal_floor = std::move(floor); }
const std::optional& get_foldartal_floor() const { return m_foldartal_floor; }
void set_foldartal(std::vector foldartal) { m_foldartal = std::move(foldartal); }
const std::vector& get_foldartal() const { return m_foldartal; }
+
+ // –––––––– 坍缩范式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
void set_clp_pds(std::vector clp_pds) { m_clp_pds = std::move(clp_pds); }
const std::vector& get_clp_pds() const { return m_clp_pds; }
void set_need_check_panel(bool need_check_panel) { m_need_check_panel = need_check_panel; }
bool get_need_check_panel() const { return m_need_check_panel; }
private:
- int m_recruitment_count = 0; // 招募次数
- bool m_recruitment_starts_complete = false; // 开局干员是否已经招募
- bool m_recruitment_team_complete = false; // 阵容是否完备
- bool m_trader_no_longer_buy = false; // 不再购买藏品
- std::string m_core_char; // 开局干员名
- bool m_team_full_without_rookie = false; // 编队内没有预干员
- bool m_use_support = false; // 开局干员是否为助战干员
- bool m_use_nonfriend_support = false; // 是否可以是非好友助战干员
- std::unordered_map m_oper; // 干员精英&等级
- std::optional m_foldartal_floor; // 当前层的预见密文板,在下一层获得
- std::vector m_foldartal; // 所有已获得密文板
- std::vector m_clp_pds; // 已受到的坍缩范式
- bool m_need_check_panel = false; // 是否在下次回到关卡选择界面时检查坍缩范式
+ // –––––––– 密文板 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ std::optional m_foldartal_floor; // 当前层的预见密文板,在下一层获得
+ std::vector m_foldartal; // 所有已获得密文板
+
+ // –––––––– 坍缩范式 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
+ std::vector m_clp_pds; // 已受到的坍缩范式
+ bool m_need_check_panel = false; // 是否在下次回到关卡选择界面时检查坍缩范式
};
} // namespace asst
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h
index b1cb5665db..2a09f6063c 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h
+++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h
@@ -3,7 +3,7 @@
#include "Config/Roguelike/RoguelikeStageEncounterConfig.h"
#include "Config/TaskData.h"
#include "Vision/OCRer.h"
-#include "RoguelikeCollapsalParadigmTaskPlugin.h"
+#include "Sami/RoguelikeCollapsalParadigmTaskPlugin.h"
namespace asst
{
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp
similarity index 99%
rename from src/MaaCore/Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.cpp
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp
index b1c7b30ca5..3bfcbdf0d9 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.cpp
+++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.cpp
@@ -1,5 +1,5 @@
#include "RoguelikeCollapsalParadigmTaskPlugin.h"
-#include "Config/Roguelike/RoguelikeCollapsalParadigmConfig.h"
+#include "Config/Roguelike/Sami/RoguelikeCollapsalParadigmConfig.h"
#include "Config/TaskData.h"
#include "Controller/Controller.h"
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h
similarity index 98%
rename from src/MaaCore/Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.h
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h
index 9e1a9b8977..1a0c07af26 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeCollapsalParadigmTaskPlugin.h
+++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeCollapsalParadigmTaskPlugin.h
@@ -1,5 +1,5 @@
#pragma once
-#include "AbstractRoguelikeTaskPlugin.h"
+#include "../AbstractRoguelikeTaskPlugin.h"
#include "Common/AsstTypes.h"
#include "Vision/OCRer.h"
#include "Config/TaskData.h"
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalGainTaskPlugin.cpp
similarity index 100%
rename from src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalGainTaskPlugin.cpp
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalGainTaskPlugin.h
similarity index 94%
rename from src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalGainTaskPlugin.h
index fa794b75f5..d16df1aded 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h
+++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalGainTaskPlugin.h
@@ -1,5 +1,5 @@
#pragma once
-#include "AbstractRoguelikeTaskPlugin.h"
+#include "../AbstractRoguelikeTaskPlugin.h"
namespace asst
{
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp
similarity index 100%
rename from src/MaaCore/Task/Roguelike/RoguelikeFoldartalStartTaskPlugin.cpp
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.cpp
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalStartTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h
similarity index 91%
rename from src/MaaCore/Task/Roguelike/RoguelikeFoldartalStartTaskPlugin.h
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h
index eb2a63eb23..66318d9fb7 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalStartTaskPlugin.h
+++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalStartTaskPlugin.h
@@ -1,5 +1,5 @@
#pragma once
-#include "AbstractRoguelikeTaskPlugin.h"
+#include "../AbstractRoguelikeTaskPlugin.h"
namespace asst
{
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp
similarity index 99%
rename from src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp
index 3fd76fe1b7..819b180a6e 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp
+++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.cpp
@@ -1,6 +1,6 @@
#include "RoguelikeFoldartalUseTaskPlugin.h"
-#include "Config/Roguelike/RoguelikeFoldartalConfig.h"
+#include "Config/Roguelike/Sami/RoguelikeFoldartalConfig.h"
#include "Config/TaskData.h"
#include "Controller/Controller.h"
#include "Task/ProcessTask.h"
diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h
similarity index 95%
rename from src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h
rename to src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h
index 25cede3aa9..15f4d29c6d 100644
--- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h
+++ b/src/MaaCore/Task/Roguelike/Sami/RoguelikeFoldartalUseTaskPlugin.h
@@ -1,6 +1,6 @@
#pragma once
-#include "AbstractRoguelikeTaskPlugin.h"
-#include "Config/Roguelike/RoguelikeFoldartalConfig.h"
+#include "../AbstractRoguelikeTaskPlugin.h"
+#include "Config/Roguelike/Sami/RoguelikeFoldartalConfig.h"
#include "RoguelikeCollapsalParadigmTaskPlugin.h"
namespace asst