From bdbcf4e24dabd208aba48160cec686a68196f481 Mon Sep 17 00:00:00 2001 From: status102 Date: Fri, 3 Nov 2023 21:56:12 +0800 Subject: [PATCH 01/10] =?UTF-8?q?refactor:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Interface/RoguelikeTask.cpp | 21 +++++++------------ .../Task/Roguelike/RoguelikeConfig.cpp | 4 +++- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 19 ++++++++++++++++- ...RoguelikeDifficultySelectionTaskPlugin.cpp | 4 ++-- .../RoguelikeFoldartalGainTaskPlugin.cpp | 2 -- .../RoguelikeFoldartalUseTaskPlugin.cpp | 14 ++++++------- .../RoguelikeLastRewardTaskPlugin.cpp | 4 ++-- .../RoguelikeStageEncounterTaskPlugin.cpp | 4 ++-- .../RoguelikeStrategyChangeTaskPlugin.cpp | 1 - 10 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index db76d5f276..813b01ef8f 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -52,7 +52,6 @@ namespace asst static inline const std::string RoguelikeRecruitmentStartsComplete = "RoguelikeRecruitmentStartsComplete"; static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete"; static inline const std::string RoguelikeRecruitmentCount = "RoguelikeRecruitmentCount"; - static inline const std::string RoguelikeMode = "RoguelikeMode"; static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty"; static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 6c22045c32..78dd68f1a7 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -92,24 +92,19 @@ bool asst::RoguelikeTask::set_params(const json::value& params) m_roguelike_config_ptr->set_theme(theme); m_roguelike_task_ptr->set_tasks({ theme + "@Roguelike@Begin" }); - // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略 - // 1 - 刷源石锭,第一层投资完就退出,不期而遇采用保守策略 - // 2 - 【已移除】两者兼顾,投资过后再退出,没有投资就继续往后打 - // 3 - 尝试通关,激进策略(TODO) - // 4 - 刷开局藏品,以获得热水壶或者演讲稿开局,不期而遇采用保守策略 - int mode = params.get("mode", 0); - if (mode != 0 && mode != 1 && mode != 4) { + auto mode = static_cast(params.get("mode", 0)); + m_roguelike_config_ptr->set_mode(mode); + if (mode != RoguelikeMode::Exp && mode != RoguelikeMode::Investment && mode != RoguelikeMode::Collectible) { m_roguelike_task_ptr->set_tasks({ "Stop" }); - Log.error(__FUNCTION__, "| Unknown mode", mode); + Log.error(__FUNCTION__, "| Unknown mode", static_cast(mode)); return false; } - m_debug_plugin_ptr->set_enable(mode != 1); + m_debug_plugin_ptr->set_enable(mode != RoguelikeMode::Investment); // 是否凹指定干员开局直升 bool start_with_elite_two = params.get("start_with_elite_two", false); - status()->set_properties(Status::RoguelikeMode, std::to_string(mode)); status()->set_properties(Status::RoguelikeDifficulty, "0"); status()->set_properties(Status::RoguelikeStartWithEliteTwo, std::to_string(start_with_elite_two)); @@ -117,10 +112,10 @@ bool asst::RoguelikeTask::set_params(const json::value& params) { 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(mode); + 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", mode); + Log.warn(__FUNCTION__, "No strategy for mode", static_cast(mode)); } Task.set_task_base(strategy_task, strategy_task_with_mode); } @@ -132,7 +127,7 @@ 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"); - if (mode == 1) { + if (mode == RoguelikeMode::Investment) { // 战斗后奖励只拿钱 Task.set_task_base(theme + "@Roguelike@DropsFlag", theme + "@Roguelike@DropsFlag_mode1"); // 刷源石锭模式是否进入第二层 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index ea66e153fe..3c619abd22 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -1,3 +1,5 @@ #include "RoguelikeConfig.h" -void asst::RoguelikeConfig::clear() {} +void asst::RoguelikeConfig::clear() { + +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index a4f5b8ddf2..1936b84abf 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -3,17 +3,34 @@ namespace asst { + enum class RoguelikeMode + { + // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略 + Exp = 0, + // 1 - 刷源石锭,第一层投资完就退出,不期而遇采用保守策略 + Investment = 1, + // 2 - 【已移除】两者兼顾,投资过后再退出,没有投资就继续往后打 + // 3 - 尝试通关,激进策略(TODO) + + // 4 - 刷开局藏品,以获得热水壶或者演讲稿开局,不期而遇采用保守策略 + Collectible = 4, + }; + class RoguelikeConfig { public: + // 清理缓存的肉鸽数据 void clear(); public: - void set_theme(std::string roguelike_theme) { m_theme = std::move(roguelike_theme); } + void set_theme(std::string theme) { m_theme = std::move(theme); } std::string get_theme() { return m_theme; } + void set_mode(RoguelikeMode mode) { m_mode = mode; } + RoguelikeMode get_mode() { return m_mode; } protected: // 肉鸽主题 std::string m_theme; + RoguelikeMode m_mode = RoguelikeMode::Exp; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp index 53fcf8a73e..a7db23730c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -32,12 +32,12 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() { LogTraceFunction; - std::string mode = status()->get_properties(Status::RoguelikeMode).value(); + auto mode = m_config->get_mode(); // todo:以后可以根据传入的难度值选择难度? // 当前难度 std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value(); - if (m_config->get_theme() != "Phantom" && mode == "4") { + if (m_config->get_theme() != "Phantom" && mode == RoguelikeMode::Collectible) { if (difficulty == "max") { ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ChooseDifficulty_Hardest" }).run(); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp index 0605610674..23600a420f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp @@ -57,8 +57,6 @@ bool asst::RoguelikeFoldartalGainTaskPlugin::_run() LogTraceFunction; std::string theme = m_config->get_theme(); - std::string mode = status()->get_properties(Status::RoguelikeMode).value(); - auto image = ctrler()->get_image(); OCRer analyzer(image); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp index f7ceca7931..e7d7cf2bbb 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp @@ -21,7 +21,7 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::verify(AsstMsg msg, const json::valu if (m_config->get_theme() != "Sami") { return false; } - std::string mode = status()->get_properties(Status::RoguelikeMode).value(); + auto mode = m_config->get_mode(); std::string task_name_pre = m_config->get_theme() + "@Roguelike@Stage"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; @@ -39,28 +39,28 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::verify(AsstMsg msg, const json::valu task_view.remove_suffix(task_name_suf.length()); } if (task_view == "CombatDps" || task_view == "EmergencyDps" || task_view == "FerociousPresage") { - if (mode == "1" || mode == "4") { + if (mode == RoguelikeMode::Investment || mode == RoguelikeMode::Collectible) { m_stage = "SkipBattle"; } - else if (mode == "0") { + else if (mode == RoguelikeMode::Exp) { m_stage = "Battle"; } return true; } - if (task_view == "DreadfulFoe-5" && mode == "0") { + if (task_view == "DreadfulFoe-5" && mode == RoguelikeMode::Exp) { m_stage = "Boss"; return true; } - if (task_view == "Trader" && mode == "0") { + if (task_view == "Trader" && mode == RoguelikeMode::Exp) { m_stage = "Trader"; return true; } - if (task_view == "Encounter" && mode == "0") { + if (task_view == "Encounter" && mode == RoguelikeMode::Exp) { m_stage = "Encounter"; return true; } if ((task_view == "Gambling" || task_view == "EmergencyTransportation" || task_view == "WindAndRain") && - mode == "0") { + mode == RoguelikeMode::Exp) { m_stage = "Gambling"; return true; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index 5cbcca33c3..557b300309 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -44,7 +44,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() { LogTraceFunction; - std::string mode = status()->get_properties(Status::RoguelikeMode).value(); + auto mode = m_config->get_mode(); std::string stages_task_name = m_config->get_theme() + "@Roguelike@Stages"; std::string strategy_task_name = stages_task_name + "_default"; @@ -59,7 +59,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() // 需要开局凹直升 bool start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value() == std::to_string(true); - if (m_config->get_theme() != "Phantom" && mode == "4") { + if (m_config->get_theme() != "Phantom" && mode == RoguelikeMode::Collectible) { if (m_is_next_hardest) { status()->set_properties(Status::RoguelikeDifficulty, "max"); // 获得热水壶和演讲时停止肉鸽(凹直升则继续),获得其他奖励时重开 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp index d5bfc39730..bdbeb139d2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp @@ -38,10 +38,10 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() { LogTraceFunction; - std::string rogue_mode = status()->get_properties(Status::RoguelikeMode).value(); + auto mode = m_config->get_mode(); std::vector events = RoguelikeStageEncounter.get_events(m_config->get_theme()); // 刷源石锭模式和烧水模式 - if (rogue_mode == "1" || rogue_mode == "4") { + if (mode == RoguelikeMode::Investment || mode == RoguelikeMode::Collectible) { events = RoguelikeStageEncounter.get_events(m_config->get_theme() + "_deposit"); } std::vector event_names; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp index 26e482b16a..ee3bd9e50a 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp @@ -36,7 +36,6 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::_run() LogTraceFunction; std::string theme = m_config->get_theme(); - std::string mode = status()->get_properties(Status::RoguelikeMode).value(); // TODO: 这段识别有点冗余,要是 plugin 能获取识别结果就好了 std::string task_name = theme + "@Roguelike@StrategyChange"; From 093b74996174e7b5ef4a9a8503baf81aca47e017 Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 21:23:00 +0800 Subject: [PATCH 02/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E6=8B=9B=E5=8B=9F=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 2 -- src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 2 +- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 4 ++++ src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 813b01ef8f..673eb02e15 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -51,9 +51,7 @@ namespace asst static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; static inline const std::string RoguelikeRecruitmentStartsComplete = "RoguelikeRecruitmentStartsComplete"; static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete"; - static inline const std::string RoguelikeRecruitmentCount = "RoguelikeRecruitmentCount"; static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty"; - static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; static inline const std::string RoguelikeFoldartalFloor = "RoguelikeFoldartalFloor"; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 3c619abd22..31921f0e4c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -1,5 +1,5 @@ #include "RoguelikeConfig.h" void asst::RoguelikeConfig::clear() { - + m_recruitment_count = 0; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 1936b84abf..67d4939f94 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -27,10 +27,14 @@ namespace asst std::string get_theme() { return m_theme; } void set_mode(RoguelikeMode mode) { m_mode = mode; } RoguelikeMode get_mode() { return m_mode; } + void set_recruitment_count(int count) { m_recruitment_count = count; } + int get_recruitment_count() { return m_recruitment_count; } protected: // 肉鸽主题 std::string m_theme; RoguelikeMode m_mode = RoguelikeMode::Exp; + // 肉鸽招募次数 + int m_recruitment_count = 0; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 15c902a1f2..32b19b3253 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -57,8 +57,8 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() LogTraceFunction; // 这是第几次招募 - size_t recruit_count = status()->get_number(Status::RoguelikeRecruitmentCount).value_or(0) + 1; - status()->set_number(Status::RoguelikeRecruitmentCount, recruit_count); + int recruit_count = m_config->get_recruitment_count() + 1; + m_config->set_recruitment_count(recruit_count); // 是否有开局干员,阵容中必须有开局干员,没有前仅招募start干员或预备干员 bool start_complete = status()->get_number(Status::RoguelikeRecruitmentStartsComplete).value_or(0); From d8664f30effdb0b1bbe0c9318dd1a678c8c02984 Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:01:34 +0800 Subject: [PATCH 03/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E5=BC=80=E5=B1=80=E5=B9=B2=E5=91=98=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=B7=B2=E6=8B=9B=E5=8B=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 1 + src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 4 ++++ src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp | 5 ++--- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 673eb02e15..fc695c3e78 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -49,7 +49,6 @@ namespace asst static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; static inline const std::string RoguelikeTraderNoLongerBuy = "RoguelikeNoLongerBuy"; static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; - static inline const std::string RoguelikeRecruitmentStartsComplete = "RoguelikeRecruitmentStartsComplete"; static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete"; static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty"; static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 31921f0e4c..aa2556948e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -2,4 +2,5 @@ void asst::RoguelikeConfig::clear() { m_recruitment_count = 0; + m_recruitment_starts_complete = false; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 67d4939f94..b5e45f362f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -29,6 +29,8 @@ namespace asst RoguelikeMode get_mode() { return m_mode; } void set_recruitment_count(int count) { m_recruitment_count = count; } int get_recruitment_count() { return m_recruitment_count; } + void set_recruitment_starts_complete(bool complete) { m_recruitment_starts_complete = complete; } + bool get_recruitment_starts_complete() { return m_recruitment_starts_complete; } protected: // 肉鸽主题 @@ -36,5 +38,7 @@ namespace asst RoguelikeMode m_mode = RoguelikeMode::Exp; // 肉鸽招募次数 int m_recruitment_count = 0; + // 开局干员是否已经招募 + bool m_recruitment_starts_complete = false; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 32b19b3253..bdccc471ae 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -61,7 +61,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() m_config->set_recruitment_count(recruit_count); // 是否有开局干员,阵容中必须有开局干员,没有前仅招募start干员或预备干员 - bool start_complete = status()->get_number(Status::RoguelikeRecruitmentStartsComplete).value_or(0); + bool start_complete = m_config->get_recruitment_starts_complete(); // 是否阵容完备,阵容完备前,仅招募key干员或预备干员 bool team_complete = status()->get_number(Status::RoguelikeRecruitmentTeamComplete).value_or(0); @@ -144,8 +144,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() team_complete = true; } - status()->set_number(Status::RoguelikeRecruitmentStartsComplete, - start_complete); // 阵容中必须有开局干员,没有前仅招募start干员或预备干员 + m_config->set_recruitment_starts_complete(start_complete); // 阵容中必须有开局干员,没有前仅招募start干员或预备干员 status()->set_number(Status::RoguelikeRecruitmentTeamComplete, team_complete); // 阵容完备前,仅招募key干员或预备干员 From 98c71725ed0621bf00489201c385b1f4ca79f953 Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:04:31 +0800 Subject: [PATCH 04/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E9=98=B5=E5=AE=B9=E6=98=AF=E5=90=A6=E5=AE=8C=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 1 + src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 4 ++++ src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp | 5 ++--- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index fc695c3e78..da9d7564f7 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -49,7 +49,6 @@ namespace asst static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; static inline const std::string RoguelikeTraderNoLongerBuy = "RoguelikeNoLongerBuy"; static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; - static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete"; static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty"; static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; static inline const std::string RoguelikeFoldartalFloor = "RoguelikeFoldartalFloor"; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index aa2556948e..49801b9bd6 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -3,4 +3,5 @@ void asst::RoguelikeConfig::clear() { m_recruitment_count = 0; m_recruitment_starts_complete = false; + m_recruitment_team_complete = false; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index b5e45f362f..1e035d9584 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -31,6 +31,8 @@ namespace asst int get_recruitment_count() { return m_recruitment_count; } void set_recruitment_starts_complete(bool complete) { m_recruitment_starts_complete = complete; } bool get_recruitment_starts_complete() { return m_recruitment_starts_complete; } + void set_recruitment_team_complete(bool complete) { m_recruitment_team_complete = complete; } + bool get_recruitment_team_complete() { return m_recruitment_team_complete; } protected: // 肉鸽主题 @@ -40,5 +42,7 @@ namespace asst int m_recruitment_count = 0; // 开局干员是否已经招募 bool m_recruitment_starts_complete = false; + // 阵容是否完备 + bool m_recruitment_team_complete = false; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index bdccc471ae..2022789eb8 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -63,7 +63,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // 是否有开局干员,阵容中必须有开局干员,没有前仅招募start干员或预备干员 bool start_complete = m_config->get_recruitment_starts_complete(); // 是否阵容完备,阵容完备前,仅招募key干员或预备干员 - bool team_complete = status()->get_number(Status::RoguelikeRecruitmentTeamComplete).value_or(0); + bool team_complete = m_config->get_recruitment_team_complete(); // 是否使用助战干员开局 bool use_support = get_status_bool(Status::RoguelikeUseSupport); @@ -145,8 +145,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() } m_config->set_recruitment_starts_complete(start_complete); // 阵容中必须有开局干员,没有前仅招募start干员或预备干员 - status()->set_number(Status::RoguelikeRecruitmentTeamComplete, - team_complete); // 阵容完备前,仅招募key干员或预备干员 + m_config->set_recruitment_team_complete(team_complete); // 阵容完备前,仅招募key干员或预备干员 // 候选干员 std::vector recruit_list; From 4ecc4bcabd96e444bd316efcbbf47717dad243b8 Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:09:49 +0800 Subject: [PATCH 05/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E4=B8=8D=E5=86=8D=E8=B4=AD=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 1 + src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 3 +++ src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index da9d7564f7..9b003aad2c 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -47,7 +47,6 @@ namespace asst static inline const std::string RoguelikeStartWithEliteTwo = "RoguelikeStartWithEliteTwo"; static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; - static inline const std::string RoguelikeTraderNoLongerBuy = "RoguelikeNoLongerBuy"; static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty"; static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 49801b9bd6..1f564dcffb 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -4,4 +4,5 @@ void asst::RoguelikeConfig::clear() { m_recruitment_count = 0; m_recruitment_starts_complete = false; m_recruitment_team_complete = false; + m_trader_no_longer_buy = false; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 1e035d9584..4318890452 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -33,6 +33,8 @@ namespace asst bool get_recruitment_starts_complete() { return m_recruitment_starts_complete; } void set_recruitment_team_complete(bool complete) { m_recruitment_team_complete = complete; } bool get_recruitment_team_complete() { 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() { return m_trader_no_longer_buy; } protected: // 肉鸽主题 @@ -44,5 +46,6 @@ namespace asst bool m_recruitment_starts_complete = false; // 阵容是否完备 bool m_recruitment_team_complete = false; + bool m_trader_no_longer_buy = false; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp index c6e1351566..004defa1b7 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp @@ -46,7 +46,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() return false; } - bool no_longer_buy = status()->get_number(Status::RoguelikeTraderNoLongerBuy).value_or(0) ? true : false; + bool no_longer_buy = m_config->get_trader_no_longer_buy(); std::string str_chars_info = status()->get_str(Status::RoguelikeCharOverview).value_or(json::value().to_string()); json::value json_chars_info = json::parse(str_chars_info).value_or(json::value()); @@ -184,7 +184,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() } } if (goods.no_longer_buy) { - status()->set_number(Status::RoguelikeTraderNoLongerBuy, 1); + m_config->set_trader_no_longer_buy(true); } break; } From 191a70d2aead558f626abfc2ef349ddae0c6fcfb Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:25:30 +0800 Subject: [PATCH 06/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E9=9A=BE=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Interface/RoguelikeTask.cpp | 2 +- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 6 ++++++ .../Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp | 4 ++-- .../Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp | 4 ++-- src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp | 6 +++--- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 9b003aad2c..0d36b4cb14 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -48,7 +48,6 @@ namespace asst static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; - static inline const std::string RoguelikeDifficulty = "RoguelikeDifficulty"; static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; static inline const std::string RoguelikeFoldartalFloor = "RoguelikeFoldartalFloor"; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 78dd68f1a7..177f6de7f7 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -105,7 +105,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params) // 是否凹指定干员开局直升 bool start_with_elite_two = params.get("start_with_elite_two", false); - status()->set_properties(Status::RoguelikeDifficulty, "0"); + m_roguelike_config_ptr->set_difficulty(0); status()->set_properties(Status::RoguelikeStartWithEliteTwo, std::to_string(start_with_elite_two)); // 设置层数选点策略,相关逻辑在 RoguelikeStrategyChangeTaskPlugin diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 4318890452..9afc2580c6 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -27,6 +27,9 @@ namespace asst std::string get_theme() { return m_theme; } void set_mode(RoguelikeMode mode) { m_mode = mode; } RoguelikeMode get_mode() { return m_mode; } + void set_difficulty(int difficulty) { m_difficulty = difficulty; } + int get_difficulty() { return m_difficulty; } + void set_recruitment_count(int count) { m_recruitment_count = count; } int get_recruitment_count() { return m_recruitment_count; } void set_recruitment_starts_complete(bool complete) { m_recruitment_starts_complete = complete; } @@ -40,6 +43,9 @@ namespace asst // 肉鸽主题 std::string m_theme; RoguelikeMode m_mode = RoguelikeMode::Exp; + int m_difficulty = 0; + + /* 每次重置 */ // 肉鸽招募次数 int m_recruitment_count = 0; // 开局干员是否已经招募 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp index a7db23730c..e65d550f3c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -36,9 +36,9 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() // todo:以后可以根据传入的难度值选择难度? // 当前难度 - std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value(); + int difficulty = m_config->get_difficulty(); if (m_config->get_theme() != "Phantom" && mode == RoguelikeMode::Collectible) { - if (difficulty == "max") { + if (difficulty == INT_MAX) { ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ChooseDifficulty_Hardest" }).run(); } else { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index 557b300309..8cd744d143 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -61,7 +61,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() status()->get_properties(Status::RoguelikeStartWithEliteTwo).value() == std::to_string(true); if (m_config->get_theme() != "Phantom" && mode == RoguelikeMode::Collectible) { if (m_is_next_hardest) { - status()->set_properties(Status::RoguelikeDifficulty, "max"); + m_config->set_difficulty(INT_MAX); // 获得热水壶和演讲时停止肉鸽(凹直升则继续),获得其他奖励时重开 std::string last_reward_stop_or_continue = start_with_elite_two ? "Roguelike@LastReward_default" : "Roguelike@LastReward_stop"; @@ -72,7 +72,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() Task.set_task_base("Roguelike@LastRewardRand", "Roguelike@LastReward_restart"); } else { - status()->set_properties(Status::RoguelikeDifficulty, "0"); + m_config->set_difficulty(0); // 重置开局奖励 next,获得任意奖励均继续 Task.set_task_base("Roguelike@LastReward", "Roguelike@LastReward_default"); Task.set_task_base("Roguelike@LastReward2", "Roguelike@LastReward_default"); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 2022789eb8..8bc175375c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -435,7 +435,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& // 是否凹直升 std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value(); // 当前肉鸽难度 - std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value(); + int difficulty = m_config->get_difficulty(); for (; i != SwipeTimes; ++i) { if (need_exit()) { @@ -459,13 +459,13 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& if (it != chars.cend()) { // 需要凹直升且当前为max难度时 - if (start_with_elite_two == "1" && difficulty == "max") { + if (start_with_elite_two == "1" && difficulty == INT_MAX) { if (it->elite == 2) { m_task_ptr->set_enable(false); } else { // 重置难度并放弃 - status()->set_properties(Status::RoguelikeDifficulty, "0"); + m_config->set_difficulty(0); ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@Abandon", 0) .run(); From e5b89ed559de9bbdab953b9ccce1a51c594969cc Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:32:19 +0800 Subject: [PATCH 07/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E6=A0=B8=E5=BF=83=E5=B9=B2=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 1 + src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 3 +++ .../Roguelike/RoguelikeCustomStartTaskPlugin.cpp | 2 +- .../Roguelike/RoguelikeRecruitTaskPlugin.cpp | 16 ++++++++-------- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 0d36b4cb14..d08b825294 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -43,7 +43,6 @@ namespace asst static inline const std::string RoguelikeCharLevelPrefix = "RoguelikeLevel-"; static inline const std::string RoguelikeCharRarityPrefix = "RoguelikeRarity-"; static inline const std::string RoguelikeCharOverview = "RoguelikeOverview"; - static inline const std::string RoguelikeCoreChar = "RoguelikeCoreChar"; static inline const std::string RoguelikeStartWithEliteTwo = "RoguelikeStartWithEliteTwo"; static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 1f564dcffb..66832be013 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -5,4 +5,5 @@ void asst::RoguelikeConfig::clear() { m_recruitment_starts_complete = false; m_recruitment_team_complete = false; m_trader_no_longer_buy = false; + m_core_char = std::string(); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 9afc2580c6..b0d169b5a9 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -38,6 +38,8 @@ namespace asst bool get_recruitment_team_complete() { 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() { 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() { return m_core_char; } protected: // 肉鸽主题 @@ -53,5 +55,6 @@ namespace asst // 阵容是否完备 bool m_recruitment_team_complete = false; bool m_trader_no_longer_buy = false; + std::string m_core_char; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp index 4d0c0ebf5e..9ece89dad2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp @@ -142,6 +142,6 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_core_char() status()->set_str(Status::RoguelikeUseSupport, m_customs[RoguelikeCustomType::UseSupport]); status()->set_str(Status::RoguelikeUseNonfriendSupport, m_customs[RoguelikeCustomType::UseNonfriendSupport]); - status()->set_str(Status::RoguelikeCoreChar, char_name); + m_config->set_core_char(char_name); return true; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 8bc175375c..098f875529 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -510,10 +510,10 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_support_char() LogTraceFunction; const int MaxRefreshTimes = Task.get("RoguelikeRefreshSupportBtnOcr")->special_params.front(); - auto core_opt = status()->get_str(Status::RoguelikeCoreChar); - status()->set_str(Status::RoguelikeCoreChar, ""); - if (core_opt && !core_opt->empty()) { - if (recruit_support_char(core_opt.value(), MaxRefreshTimes)) return true; + auto core_opt = m_config->get_core_char(); + m_config->set_core_char(""); + if (!core_opt.empty()) { + if (recruit_support_char(core_opt, MaxRefreshTimes)) return true; } return false; } @@ -595,12 +595,12 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_own_char() { LogTraceFunction; - auto core_opt = status()->get_str(Status::RoguelikeCoreChar); - if (!core_opt || core_opt->empty()) { + auto core_opt = m_config->get_core_char(); + if ( core_opt.empty()) { return false; } - status()->set_str(Status::RoguelikeCoreChar, ""); - return recruit_appointed_char(core_opt.value()); + m_config->set_core_char(""); + return recruit_appointed_char(core_opt); } void asst::RoguelikeRecruitTaskPlugin::select_oper(const battle::roguelike::Recruitment& oper) From 33d43fb68fb077b0d595291d5f7d7afeb5a3b7f6 Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:36:40 +0800 Subject: [PATCH 08/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BD=E5=BC=80=E5=B1=80=E7=B2=BE=E4=BA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Interface/RoguelikeTask.cpp | 4 ++-- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 3 +++ src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp | 3 +-- src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp | 4 ++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index d08b825294..63573767c0 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -43,7 +43,6 @@ namespace asst static inline const std::string RoguelikeCharLevelPrefix = "RoguelikeLevel-"; static inline const std::string RoguelikeCharRarityPrefix = "RoguelikeRarity-"; static inline const std::string RoguelikeCharOverview = "RoguelikeOverview"; - static inline const std::string RoguelikeStartWithEliteTwo = "RoguelikeStartWithEliteTwo"; static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 177f6de7f7..c1bac60f78 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -106,8 +106,8 @@ bool asst::RoguelikeTask::set_params(const json::value& params) bool start_with_elite_two = params.get("start_with_elite_two", false); m_roguelike_config_ptr->set_difficulty(0); - status()->set_properties(Status::RoguelikeStartWithEliteTwo, std::to_string(start_with_elite_two)); - + m_roguelike_config_ptr->set_start_with_elite_two(start_with_elite_two); + // 设置层数选点策略,相关逻辑在 RoguelikeStrategyChangeTaskPlugin { Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_default"); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index b0d169b5a9..250417c709 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -29,6 +29,8 @@ namespace asst RoguelikeMode get_mode() { return m_mode; } void set_difficulty(int difficulty) { m_difficulty = difficulty; } int get_difficulty() { return m_difficulty; } + void set_start_with_elite_two(bool start_with_elite_two) { m_start_with_elite_two = start_with_elite_two; } + bool get_start_with_elite_two() { return m_start_with_elite_two; } void set_recruitment_count(int count) { m_recruitment_count = count; } int get_recruitment_count() { return m_recruitment_count; } @@ -46,6 +48,7 @@ namespace asst std::string m_theme; RoguelikeMode m_mode = RoguelikeMode::Exp; int m_difficulty = 0; + bool m_start_with_elite_two = false; /* 每次重置 */ // 肉鸽招募次数 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index 8cd744d143..496518ff09 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -57,8 +57,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() } // 需要开局凹直升 - bool start_with_elite_two = - status()->get_properties(Status::RoguelikeStartWithEliteTwo).value() == std::to_string(true); + bool start_with_elite_two = m_config->get_start_with_elite_two(); if (m_config->get_theme() != "Phantom" && mode == RoguelikeMode::Collectible) { if (m_is_next_hardest) { m_config->set_difficulty(INT_MAX); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 098f875529..868fea931c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -433,7 +433,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& bool has_been_same = false; int i = 0; // 是否凹直升 - std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value(); + bool start_with_elite_two = m_config->get_start_with_elite_two(); // 当前肉鸽难度 int difficulty = m_config->get_difficulty(); @@ -459,7 +459,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& if (it != chars.cend()) { // 需要凹直升且当前为max难度时 - if (start_with_elite_two == "1" && difficulty == INT_MAX) { + if (start_with_elite_two && difficulty == INT_MAX) { if (it->elite == 2) { m_task_ptr->set_enable(false); } From 6558afff1a9b61fe050834f5bb3cd72c421b006f Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 9 Nov 2023 22:47:07 +0800 Subject: [PATCH 09/10] =?UTF-8?q?perf:=20=E8=BF=81=E7=A7=BB=E8=82=89?= =?UTF-8?q?=E9=B8=BDTeamFullWithoutRookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 1 + src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 5 ++++- src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp | 4 ++-- .../Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp | 4 ++-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 63573767c0..1b630f2cab 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -45,7 +45,6 @@ namespace asst static inline const std::string RoguelikeCharOverview = "RoguelikeOverview"; static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport"; - static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; static inline const std::string RoguelikeFoldartalOverview = "RoguelikeFoldartalOverview"; static inline const std::string RoguelikeFoldartalFloor = "RoguelikeFoldartalFloor"; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 66832be013..39d13ac193 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -6,4 +6,5 @@ void asst::RoguelikeConfig::clear() { m_recruitment_team_complete = false; m_trader_no_longer_buy = false; m_core_char = std::string(); + m_team_full_without_rookie = false; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 250417c709..4009820922 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -42,6 +42,8 @@ namespace asst bool get_trader_no_longer_buy() { 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() { 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() { return m_team_full_without_rookie; } protected: // 肉鸽主题 @@ -59,5 +61,6 @@ namespace asst 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; }; -} +} // namespace asst diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 868fea931c..68ae15646a 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -80,7 +80,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() } } - bool team_full_without_rookie = status()->get_number(Status::RoguelikeTeamFullWithoutRookie).value_or(0); + bool team_full_without_rookie = m_config->get_team_full_without_rookie(); // Log.info("team_full_without_rookie", team_full_without_rookie); // 编队信息 (已有角色) @@ -596,7 +596,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_own_char() LogTraceFunction; auto core_opt = m_config->get_core_char(); - if ( core_opt.empty()) { + if (core_opt.empty()) { return false; } m_config->set_core_char(""); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp index 2c93258d8d..ac08ccea94 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp @@ -80,11 +80,11 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() if (analyzer.get_team_full() && !has_rookie) { Log.info("Team full and no rookie"); - status()->set_number(Status::RoguelikeTeamFullWithoutRookie, 1); + m_config->set_team_full_without_rookie(true); } else { Log.info("Team not full or has rookie"); - status()->set_number(Status::RoguelikeTeamFullWithoutRookie, 0); + m_config->set_team_full_without_rookie(false); } return true; } From c05fbc0ab33f492cb1119cb4fd166fd019696b7d Mon Sep 17 00:00:00 2001 From: status102 Date: Fri, 10 Nov 2023 21:22:32 +0800 Subject: [PATCH 10/10] =?UTF-8?q?perf:=20=E7=A7=BB=E9=99=A4=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Status.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 1b630f2cab..5feb5f9f52 100644 --- a/src/MaaCore/Status.h +++ b/src/MaaCore/Status.h @@ -41,7 +41,6 @@ namespace asst static inline const std::string RoguelikeCharElitePrefix = "RoguelikeElite-"; static inline const std::string RoguelikeCharLevelPrefix = "RoguelikeLevel-"; - static inline const std::string RoguelikeCharRarityPrefix = "RoguelikeRarity-"; static inline const std::string RoguelikeCharOverview = "RoguelikeOverview"; static inline const std::string RoguelikeUseSupport = "RoguelikeUseSupport"; static inline const std::string RoguelikeUseNonfriendSupport = "RoguelikeUseNonfriendSupport";