From 00a9e1e9a8dfafba765983f3bbda252b27d18a0f Mon Sep 17 00:00:00 2001 From: status102 Date: Mon, 2 Oct 2023 16:02:40 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=82=89=E9=B8=BD=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E4=BB=8EStatus=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/MaaCore.vcxproj | 2 + src/MaaCore/MaaCore.vcxproj.filters | 6 ++ src/MaaCore/Status.h | 1 - src/MaaCore/Task/Interface/RoguelikeTask.cpp | 59 +++++++++++-------- src/MaaCore/Task/Interface/RoguelikeTask.h | 28 ++++++--- .../Roguelike/RoguelikeBattleTaskPlugin.cpp | 49 +++++++++------ .../Roguelike/RoguelikeBattleTaskPlugin.h | 8 ++- .../Task/Roguelike/RoguelikeConfig.cpp | 6 ++ src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 15 +++++ .../Roguelike/RoguelikeControlTaskPlugin.cpp | 8 +-- .../Roguelike/RoguelikeControlTaskPlugin.h | 3 +- .../RoguelikeCustomStartTaskPlugin.cpp | 5 +- .../RoguelikeCustomStartTaskPlugin.h | 4 +- .../Roguelike/RoguelikeDebugTaskPlugin.cpp | 5 +- .../Task/Roguelike/RoguelikeDebugTaskPlugin.h | 3 +- ...RoguelikeDifficultySelectionTaskPlugin.cpp | 16 +++-- .../RoguelikeDifficultySelectionTaskPlugin.h | 3 +- .../RoguelikeFormationTaskPlugin.cpp | 12 ++-- .../Roguelike/RoguelikeFormationTaskPlugin.h | 3 +- .../RoguelikeLastRewardTaskPlugin.cpp | 8 +-- .../Roguelike/RoguelikeLastRewardTaskPlugin.h | 3 +- .../Roguelike/RoguelikeRecruitTaskPlugin.cpp | 19 +++--- .../Roguelike/RoguelikeRecruitTaskPlugin.h | 6 +- .../Roguelike/RoguelikeResetTaskPlugin.cpp | 5 +- .../Task/Roguelike/RoguelikeResetTaskPlugin.h | 3 +- .../Roguelike/RoguelikeShoppingTaskPlugin.cpp | 7 +-- .../Roguelike/RoguelikeShoppingTaskPlugin.h | 5 +- .../RoguelikeSkillSelectionTaskPlugin.cpp | 11 ++-- .../RoguelikeSkillSelectionTaskPlugin.h | 3 +- .../RoguelikeStageEncounterTaskPlugin.cpp | 12 ++-- .../RoguelikeStageEncounterTaskPlugin.h | 3 +- 31 files changed, 190 insertions(+), 131 deletions(-) create mode 100644 src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp create mode 100644 src/MaaCore/Task/Roguelike/RoguelikeConfig.h diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj index c1e125718e..c33647e8cd 100644 --- a/src/MaaCore/MaaCore.vcxproj +++ b/src/MaaCore/MaaCore.vcxproj @@ -84,6 +84,7 @@ + @@ -247,6 +248,7 @@ + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index c61dde60c1..164ea54d3b 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -639,6 +639,9 @@ Source\Task\Miscellaneous + + 源文件\Task\Roguelike + @@ -1061,5 +1064,8 @@ Source\Task\Miscellaneous + + 源文件\Task\Roguelike + diff --git a/src/MaaCore/Status.h b/src/MaaCore/Status.h index 815f3d8b8c..559ca5e78b 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 RoguelikeTheme = "RoguelikeTheme"; static inline const std::string RoguelikeRecruitmentStartsComplete = "RoguelikeRecruitmentStartsComplete"; static inline const std::string RoguelikeRecruitmentTeamComplete = "RoguelikeRecruitmentTeamComplete"; static inline const std::string RoguelikeRecruitmentCount = "RoguelikeRecruitmentCount"; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index ee725cb336..ff0025a2d2 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -25,24 +25,25 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst LogTraceFunction; m_roguelike_task_ptr->set_ignore_error(true); - m_roguelike_task_ptr->register_plugin(); - m_roguelike_task_ptr->register_plugin(); - m_roguelike_task_ptr->register_plugin(); + m_formation_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_control_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_reset_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_debug_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_shopping_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_shopping_plugin_ptr->set_retry_times(0); - m_debug_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_roguelike_task_ptr->register_plugin()->set_retry_times(0); + m_custom_start_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_battle_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_battle_plugin_ptr->set_retry_times(0).set_ignore_error(true); + m_recruit_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_recruit_plugin_ptr->set_retry_times(2).set_ignore_error(true); + m_skill_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_skill_plugin_ptr->set_retry_times(2).set_ignore_error(true); + m_stage_encounter_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_stage_encounter_plugin_ptr->set_retry_times(0); - m_custom_start_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_battle_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_battle_task_ptr->set_retry_times(0).set_ignore_error(true); - m_recruit_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_recruit_task_ptr->set_retry_times(2).set_ignore_error(true); - m_skill_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_skill_task_ptr->set_retry_times(2).set_ignore_error(true); - m_roguelike_task_ptr->register_plugin()->set_retry_times(0); - - m_roguelike_task_ptr->register_plugin(); - m_roguelike_task_ptr->register_plugin(); + m_last_reward_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_difficulty_selection_plugin_ptr = m_roguelike_task_ptr->register_plugin(); // 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加一点。先这样凑合用 for (int i = 0; i != 100; ++i) { @@ -65,7 +66,19 @@ bool asst::RoguelikeTask::set_params(const json::value& params) Log.error(__FUNCTION__, "status() is null"); return false; } - status()->set_properties(Status::RoguelikeTheme, theme); + + m_battle_plugin_ptr->set_roguelike_theme(theme); + m_control_plugin_ptr->set_roguelike_theme(theme); + m_custom_start_plugin_ptr->set_roguelike_theme(theme); + m_debug_plugin_ptr->set_roguelike_theme(theme); + m_difficulty_selection_plugin_ptr->set_roguelike_theme(theme); + m_formation_plugin_ptr->set_roguelike_theme(theme); + m_last_reward_plugin_ptr->set_roguelike_theme(theme); + m_recruit_plugin_ptr->set_roguelike_theme(theme); + m_reset_plugin_ptr->set_roguelike_theme(theme); + m_shopping_plugin_ptr->set_roguelike_theme(theme); + m_skill_plugin_ptr->set_roguelike_theme(theme); + m_stage_encounter_plugin_ptr->set_roguelike_theme(theme); m_roguelike_task_ptr->set_tasks({ theme + "@Roguelike@Begin" }); // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略 @@ -80,7 +93,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params) return false; } - m_debug_task_ptr->set_enable(mode != 1); + m_debug_plugin_ptr->set_enable(mode != 1); // 是否凹指定干员开局直升 bool start_with_elite_two = params.get("start_with_elite_two", false); @@ -158,19 +171,19 @@ bool asst::RoguelikeTask::set_params(const json::value& params) } if (auto squad_opt = params.find("squad"); squad_opt && !squad_opt->empty()) { - m_custom_start_task_ptr->set_custom(RoguelikeCustomType::Squad, *squad_opt); + m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::Squad, *squad_opt); } if (auto roles_opt = params.find("roles"); roles_opt && !roles_opt->empty()) { - m_custom_start_task_ptr->set_custom(RoguelikeCustomType::Roles, *roles_opt); + m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::Roles, *roles_opt); } if (auto core_char_opt = params.find("core_char"); core_char_opt && !core_char_opt->empty()) { - m_custom_start_task_ptr->set_custom(RoguelikeCustomType::CoreChar, *core_char_opt); + m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::CoreChar, *core_char_opt); } if (auto use_support_opt = params.find("use_support"); use_support_opt) { - m_custom_start_task_ptr->set_custom(RoguelikeCustomType::UseSupport, *use_support_opt ? "1" : "0"); + m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::UseSupport, *use_support_opt ? "1" : "0"); } if (auto use_nonfriend_opt = params.find("use_nonfriend_support"); use_nonfriend_opt) { - m_custom_start_task_ptr->set_custom(RoguelikeCustomType::UseNonfriendSupport, *use_nonfriend_opt ? "1" : "0"); + m_custom_start_plugin_ptr->set_custom(RoguelikeCustomType::UseNonfriendSupport, *use_nonfriend_opt ? "1" : "0"); } return true; diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.h b/src/MaaCore/Task/Interface/RoguelikeTask.h index d08814ff40..a37fc142c6 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.h +++ b/src/MaaCore/Task/Interface/RoguelikeTask.h @@ -4,13 +4,18 @@ namespace asst { class ProcessTask; - class RoguelikeRecruitTaskPlugin; - class RoguelikeSkillSelectionTaskPlugin; class RoguelikeBattleTaskPlugin; + class RoguelikeControlTaskPlugin; class RoguelikeCustomStartTaskPlugin; class RoguelikeDebugTaskPlugin; - class RoguelikeLastRewardTaskPlugin; class RoguelikeDifficultySelectionTaskPlugin; + class RoguelikeFormationTaskPlugin; + class RoguelikeLastRewardTaskPlugin; + class RoguelikeRecruitTaskPlugin; + class RoguelikeResetTaskPlugin; + class RoguelikeSkillSelectionTaskPlugin; + class RoguelikeShoppingTaskPlugin; + class RoguelikeStageEncounterTaskPlugin; class RoguelikeTask : public InterfaceTask { @@ -24,10 +29,17 @@ namespace asst private: std::shared_ptr m_roguelike_task_ptr = nullptr; - std::shared_ptr m_recruit_task_ptr = nullptr; - std::shared_ptr m_skill_task_ptr = nullptr; - std::shared_ptr m_battle_task_ptr = nullptr; - std::shared_ptr m_custom_start_task_ptr = nullptr; - std::shared_ptr m_debug_task_ptr = nullptr; + std::shared_ptr m_control_plugin_ptr = nullptr; + std::shared_ptr m_recruit_plugin_ptr = nullptr; + std::shared_ptr m_skill_plugin_ptr = nullptr; + std::shared_ptr m_battle_plugin_ptr = nullptr; + std::shared_ptr m_custom_start_plugin_ptr = nullptr; + std::shared_ptr m_debug_plugin_ptr = nullptr; + std::shared_ptr m_difficulty_selection_plugin_ptr = nullptr; + std::shared_ptr m_formation_plugin_ptr = nullptr; + std::shared_ptr m_last_reward_plugin_ptr = nullptr; + std::shared_ptr m_reset_plugin_ptr = nullptr; + std::shared_ptr m_shopping_plugin_ptr = nullptr; + std::shared_ptr m_stage_encounter_plugin_ptr = nullptr; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp index 77a55af4b6..b928ca581f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp @@ -34,12 +34,11 @@ bool asst::RoguelikeBattleTaskPlugin::verify(AsstMsg msg, const json::value& det return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -62,6 +61,7 @@ bool asst::RoguelikeBattleTaskPlugin::_run() return false; } update_deployment(true); + cache_oper_elite_status(); speed_up(); bool timeout = false; @@ -92,8 +92,10 @@ bool asst::RoguelikeBattleTaskPlugin::_run() void asst::RoguelikeBattleTaskPlugin::wait_until_start_button_clicked() { - std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); - ProcessTask(*this, { theme + "@Roguelike@WaitForStartButtonClicked" }).set_task_delay(0).set_retry_times(0).run(); + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@WaitForStartButtonClicked" }) + .set_task_delay(0) + .set_retry_times(0) + .run(); } std::string asst::RoguelikeBattleTaskPlugin::oper_name_in_config(const battle::DeploymentOper& oper) const @@ -243,6 +245,13 @@ asst::battle::OperPosition asst::RoguelikeBattleTaskPlugin::get_role_position(co } } +void asst::RoguelikeBattleTaskPlugin::cache_oper_elite_status() +{ + for (const std::string& name : m_cur_deployment_opers | views::keys) { + m_oper_elite.emplace(name, status()->get_number(Status::RoguelikeCharElitePrefix + name).value_or(0)); + } +} + void asst::RoguelikeBattleTaskPlugin::set_position_full(battle::LocationType loc_type, bool full) { switch (loc_type) { @@ -316,12 +325,10 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() } } Log.info("No operator needs to be retreated."); - // 获取肉鸽主题 - std::string rogue_theme = status()->get_properties(Status::RoguelikeTheme).value(); // 构造当前地图的部署指令列表 std::vector deploy_plan_list; // 获取当前肉鸽的分组信息[干员组1名称,干员组2名称,...] - const auto& groups = RoguelikeRecruit.get_group_info(rogue_theme); + const auto& groups = RoguelikeRecruit.get_group_info(m_roguelike_theme); // 获取当前肉鸽的分组内排名信息 // const auto& group_rank = RoguelikeRecruit.get_group_rank(rogue_theme); for (const auto& [name, oper] : m_cur_deployment_opers) { @@ -333,9 +340,9 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() const std::string& oper_name = oper_name_in_config(oper); // 获取招募信息 - const auto& recruit_info = RoguelikeRecruit.get_oper_info(rogue_theme, oper_name); + const auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, oper_name); // 获取会用到该干员的干员组[干员组1序号,干员组2序号,...] - std::vector group_ids = RoguelikeRecruit.get_group_id(rogue_theme, oper_name); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_theme, oper_name); for (const auto& group_id : group_ids) { // 当前干员组名,string类型 @@ -384,7 +391,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() auto deployed_time = std::chrono::steady_clock::now(); m_deployed_time.insert_or_assign(deploy_plan.oper_name, deployed_time); // 获取技能用法和使用次数 - const auto& oper_info = RoguelikeRecruit.get_oper_info(rogue_theme, deploy_plan.oper_name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, deploy_plan.oper_name); m_skill_usage[deploy_plan.oper_name] = oper_info.skill_usage; m_skill_times[deploy_plan.oper_name] = oper_info.skill_times; Log.trace(" best deploy is", deploy_plan.oper_name, "with rank", deploy_plan.rank); @@ -398,13 +405,13 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() { check_drone_tiles(); - cv::Mat image = ctrler()->get_image(); + cv::Mat image = ctrler()->get_image(false); if (!m_first_deploy && use_all_ready_skill(image)) { return true; } - - std::string rogue_theme = status()->get_properties(Status::RoguelikeTheme).value(); - + if (need_exit()) { + Log.info("exit"); + } std::unordered_set pre_cooling; for (const auto& [name, oper] : m_cur_deployment_opers) { if (oper.cooling) { @@ -413,7 +420,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() } } for (const auto& [name, loc] : m_battlefield_opers) { - const auto& oper_info = RoguelikeRecruit.get_oper_info(rogue_theme, name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, name); auto iter = m_deployed_time.find(name); if (iter != m_deployed_time.end() && oper_info.auto_retreat > 0) { if (std::chrono::steady_clock::now() - m_deployed_time.at(name) >= @@ -509,7 +516,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() auto deployed_time = std::chrono::steady_clock::now(); m_deployed_time.insert_or_assign(best_oper.name, deployed_time); // 获取技能用法和使用次数 - const auto& oper_info = RoguelikeRecruit.get_oper_info(rogue_theme, best_oper.name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, best_oper.name); m_skill_usage[best_oper.name] = oper_info.skill_usage; m_skill_times[best_oper.name] = oper_info.skill_times; @@ -768,6 +775,8 @@ void asst::RoguelikeBattleTaskPlugin::clear() m_deploy_plan.clear(); m_retreat_plan.clear(); m_deployed_time.clear(); + + m_oper_elite.clear(); } std::vector asst::RoguelikeBattleTaskPlugin::available_locations(const DeploymentOper& oper) const @@ -798,7 +807,11 @@ std::vector asst::RoguelikeBattleTaskPlugin::available_locations(ba asst::battle::AttackRange asst::RoguelikeBattleTaskPlugin::get_attack_range(const battle::DeploymentOper& oper, DeployDirection direction) const { - int64_t elite = status()->get_number(Status::RoguelikeCharElitePrefix + oper.name).value_or(0); + int64_t elite = 0; + if (m_oper_elite.contains(oper.name)) { + elite = m_oper_elite.at(oper.name); + } + // int64_t elite = status()->get_number(Status::RoguelikeCharElitePrefix + oper.name).value_or(0); battle::AttackRange right_attack_range = BattleData.get_range(oper_name_in_config(oper), elite); if (right_attack_range == BattleDataConfig::EmptyRange) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h index 602010fb67..2250489043 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h @@ -8,10 +8,11 @@ #include "Config/Miscellaneous/TilePack.h" #include "Task/AbstractTaskPlugin.h" #include "Task/BattleHelper.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeBattleTaskPlugin : public AbstractTaskPlugin, private BattleHelper + class RoguelikeBattleTaskPlugin : public AbstractTaskPlugin, private BattleHelper, public RoguelikeConfig { using Time_Point = std::chrono::time_point; @@ -141,5 +142,10 @@ namespace asst std::unordered_map> m_deploy_plan; std::vector m_retreat_plan; std::unordered_map m_deployed_time; + + // 缓存干员精英 + std::unordered_map m_oper_elite; + // 缓存干员精英情况 + void cache_oper_elite_status(); }; } // namespace asst diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp new file mode 100644 index 0000000000..4d11638348 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -0,0 +1,6 @@ +#include "RoguelikeConfig.h" + +void asst::RoguelikeConfig::set_roguelike_theme(std::string roguelike_theme) +{ + m_roguelike_theme = std::move(roguelike_theme); +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h new file mode 100644 index 0000000000..0958e37e0a --- /dev/null +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -0,0 +1,15 @@ +#pragma once +#include + +namespace asst +{ + class RoguelikeConfig + { + public: + void set_roguelike_theme(std::string roguelike_theme); + + protected: + // 肉鸽主题 + std::string m_roguelike_theme; + }; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp index a2e83ba541..3ab949db4b 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp @@ -10,12 +10,11 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -35,8 +34,7 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de void asst::RoguelikeControlTaskPlugin::exit_then_stop() { - std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); - ProcessTask(*this, { theme + "@Roguelike@ExitThenAbandon" }) + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@StartExplore", 0) .set_times_limit("Roguelike@Abandon", 0) .run(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h index 18ad46ca59..817b6fcf41 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeControlTaskPlugin : public AbstractTaskPlugin + class RoguelikeControlTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp index 7ea53b44f3..aa4e33b3ce 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp @@ -14,12 +14,11 @@ bool asst::RoguelikeCustomStartTaskPlugin::verify(AsstMsg msg, const json::value return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h index 809e093166..eb93ce670e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h @@ -1,5 +1,6 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { @@ -14,7 +15,7 @@ namespace asst // CoCoreChar, // 次选干员, 干员名 }; - class RoguelikeCustomStartTaskPlugin : public AbstractTaskPlugin + class RoguelikeCustomStartTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; @@ -22,7 +23,6 @@ namespace asst public: virtual bool verify(AsstMsg msg, const json::value& details) const override; - void set_custom(RoguelikeCustomType type, std::string custom); protected: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp index f6375ea6fb..0b9ef7a55d 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp @@ -14,12 +14,11 @@ bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& deta return true; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h index 19b890962c..cf13bcadd9 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeDebugTaskPlugin : public AbstractTaskPlugin + class RoguelikeDebugTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp index 47eb330d28..ebc0f16327 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -10,12 +10,11 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::verify(AsstMsg msg, const jso return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -33,7 +32,6 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() { LogTraceFunction; - std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); // todo:以后可以根据传入的难度值选择难度? @@ -41,10 +39,10 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() std::string recent_difficulty = status()->get_properties(Status::RoguelikeNeedChangeDifficulty).value(); // 需要开局凹直升 std::string start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value(); - if (theme != "Phantom" && mode == "4") { + if (m_roguelike_theme != "Phantom" && mode == "4") { if (recent_difficulty == "max") { // 到第三层退出,选最高难度开水壶 - ProcessTask(*this, { theme + "@Roguelike@ChooseDifficulty_Hardest" }).run(); + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficulty_Hardest" }).run(); // 重置为最低难度,需要凹开局直升时,保证在难度max下寻找直升干员,延后到找不到精二重置 if (start_with_elite_two == "0") { status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); @@ -52,11 +50,11 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() } // 其他情况下开始,选最低难度 else { - ProcessTask(*this, { theme + "@Roguelike@ChooseDifficulty_Easiest" }).run(); + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficulty_Easiest" }).run(); status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); } - ProcessTask(*this, { theme + "@Roguelike@ChooseDifficultyConfirm" }).run(); - ProcessTask(*this, { theme + "@Roguelike@StartExploreConfirm" }).run(); + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficultyConfirm" }).run(); + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@StartExploreConfirm" }).run(); } return true; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h index ffb07d28e0..53bd9102f9 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeDifficultySelectionTaskPlugin : public AbstractTaskPlugin + class RoguelikeDifficultySelectionTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp index 3b545ac538..4d5008ef1f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp @@ -15,12 +15,11 @@ bool asst::RoguelikeFormationTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -104,15 +103,14 @@ void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() } std::vector sorted_oper_list; - const std::string rogue_theme = status()->get_properties(Status::RoguelikeTheme).value(); - const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(rogue_theme); - const auto& group_list = RoguelikeRecruit.get_group_info(rogue_theme); + const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_theme); + const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_theme); for (const auto& condition : team_complete_condition) { // 优先选择阵容核心干员 int count = 0; int require = condition.threshold; for (const std::string& group_name : condition.groups) { for (const auto& oper : oper_list) { - std::vector group_ids = RoguelikeRecruit.get_group_id(rogue_theme, oper.name); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_theme, oper.name); for (const auto& group_id : group_ids) { std::string oper_group = group_list[group_id]; if (oper_group == group_name) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h index e4679ed382..c0ba622773 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h @@ -1,11 +1,12 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" #include "Vision/Roguelike/RoguelikeFormationImageAnalyzer.h" namespace asst { // 集成战略模式快捷编队任务 - class RoguelikeFormationTaskPlugin : public AbstractTaskPlugin + class RoguelikeFormationTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: static constexpr size_t MaxNumOfOperPerPage = 8; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index 567fe12a1b..b59d91b6ad 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -10,12 +10,11 @@ bool asst::RoguelikeLastRewardTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -38,10 +37,9 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() { LogTraceFunction; - std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); - if (theme != "Phantom" && mode == "4") { + if (m_roguelike_theme != "Phantom" && mode == "4") { if (m_need_change_difficulty_higher) { status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "max"); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h index d0753de4aa..c211db60be 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeLastRewardTaskPlugin : public AbstractTaskPlugin + class RoguelikeLastRewardTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index e274655305..071e7e7e14 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -21,12 +21,11 @@ bool asst::RoguelikeRecruitTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -85,7 +84,6 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // Log.info("team_full_without_rookie", team_full_without_rookie); // 编队信息 (已有角色) - std::string rogue_theme = status()->get_properties(Status::RoguelikeTheme).value(); 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()); const auto& chars_map = json_chars_info.as_object(); @@ -101,9 +99,9 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // __________________will-be-removed-end__________________ std::unordered_map group_count; - const auto& group_list = RoguelikeRecruit.get_group_info(rogue_theme); + const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_theme); for (const auto& oper : chars_map) { - std::vector group_ids = RoguelikeRecruit.get_group_id(rogue_theme, oper.first); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_theme, oper.first); for (const auto& group_id : group_ids) { const std::string& group_name = group_list[group_id]; group_count[group_name]++; @@ -112,7 +110,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() if (!start_complete) { for (const auto& oper : chars_map) { - auto& recruit_info = RoguelikeRecruit.get_oper_info(rogue_theme, oper.first); + auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, oper.first); if (recruit_info.is_start) start_complete = true; } } @@ -121,7 +119,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() bool complete = true; int complete_count = 0; int complete_require = 0; - const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(rogue_theme); + const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_theme); for (const auto& condition : team_complete_condition) { int count = 0; complete_require += condition.threshold; @@ -219,7 +217,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() } // 查询招募配置 - auto& recruit_info = RoguelikeRecruit.get_oper_info(rogue_theme, oper_info.name); + auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, oper_info.name); int priority = 0; // 查询编队是否已持有该干员 @@ -468,10 +466,9 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& m_task_ptr->set_enable(false); } else { - std::string theme = status()->get_properties(Status::RoguelikeTheme).value(); // 重置难度并放弃 status()->set_properties(Status::RoguelikeNeedChangeDifficulty, "0"); - ProcessTask(*this, { theme + "@Roguelike@ExitThenAbandon" }) + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@Abandon", 0) .run(); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h index ec0a0663ad..444ac8b5a6 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h @@ -1,7 +1,7 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" - #include "Common/AsstBattleDef.h" +#include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { @@ -13,7 +13,7 @@ namespace asst int page_index = 0; // 所在页码 (用于判断翻页方向) bool is_alternate = false; // 是否后备干员 (允许重复招募、划到后备干员时不再往右划动) }; - class RoguelikeRecruitTaskPlugin : public AbstractTaskPlugin + class RoguelikeRecruitTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp index 1130fe15e9..d91104c3b8 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp @@ -9,12 +9,11 @@ bool asst::RoguelikeResetTaskPlugin::verify(AsstMsg msg, const json::value& deta return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h index 8fe276f131..c0a921bf2c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeResetTaskPlugin : public AbstractTaskPlugin + class RoguelikeResetTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp index eb6483a7de..1310f94de5 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp @@ -15,12 +15,11 @@ bool asst::RoguelikeShoppingTaskPlugin::verify(AsstMsg msg, const json::value& d return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -104,7 +103,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() } bool bought = false; - auto& all_goods = RoguelikeShopping.get_goods(status()->get_properties(Status::RoguelikeTheme).value()); + auto& all_goods = RoguelikeShopping.get_goods(m_roguelike_theme); for (const auto& goods : all_goods) { if (need_exit()) { return false; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h index 1f8dafeca1..db151729ea 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeShoppingTaskPlugin : public AbstractTaskPlugin + class RoguelikeShoppingTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; @@ -13,7 +14,5 @@ namespace asst protected: virtual bool _run() override; - - private: }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp index 7f4c75e978..492decbff9 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp @@ -4,9 +4,8 @@ #include "Config/TaskData.h" #include "Controller/Controller.h" #include "Status.h" -#include "Vision/Roguelike/RoguelikeSkillSelectionImageAnalyzer.h" - #include "Utils/Logger.hpp" +#include "Vision/Roguelike/RoguelikeSkillSelectionImageAnalyzer.h" bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::value& details) const { @@ -14,12 +13,11 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::va return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -47,8 +45,7 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() int delay = Task.get("RoguelikeSkillSelectionMove1")->post_delay; bool has_rookie = false; for (const auto& [name, skill_vec] : analyzer.get_result()) { - const auto& oper_info = - RoguelikeRecruit.get_oper_info(status()->get_properties(Status::RoguelikeTheme).value(), name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, name); if (oper_info.name.empty()) { Log.warn("Unknown oper", name); continue; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h index 462e77cb6f..13c2f526cf 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h @@ -1,11 +1,12 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" #include namespace asst { - class RoguelikeSkillSelectionTaskPlugin final : public AbstractTaskPlugin + class RoguelikeSkillSelectionTaskPlugin final : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp index 46c967e968..05198d40d2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp @@ -15,12 +15,11 @@ bool asst::RoguelikeStageEncounterTaskPlugin::verify(AsstMsg msg, const json::va return false; } - auto roguelike_name_opt = status()->get_properties(Status::RoguelikeTheme); - if (!roguelike_name_opt) { + if (m_roguelike_theme.empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string roguelike_name = m_roguelike_theme + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -38,12 +37,11 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() { LogTraceFunction; - std::string rogue_theme = status()->get_properties(Status::RoguelikeTheme).value(); std::string rogue_mode = status()->get_properties(Status::RoguelikeMode).value(); - std::vector events = RoguelikeStageEncounter.get_events(rogue_theme); + std::vector events = RoguelikeStageEncounter.get_events(m_roguelike_theme); // 刷源石锭模式和烧水模式 if (rogue_mode == "1" || rogue_mode == "4") { - events = RoguelikeStageEncounter.get_events(rogue_theme + "_deposit"); + events = RoguelikeStageEncounter.get_events(m_roguelike_theme + "_deposit"); } std::vector event_names; std::unordered_map event_map; @@ -75,7 +73,7 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() RoguelikeEvent event = event_map.at(text); Log.info("Event:", event.name, "choose option", event.default_choose); for (int j = 0; j < 2; ++j) { - ProcessTask(*this, { rogue_theme + "@Roguelike@OptionChoose" + std::to_string(event.option_num) + "-" + + ProcessTask(*this, { m_roguelike_theme + "@Roguelike@OptionChoose" + std::to_string(event.option_num) + "-" + std::to_string(event.default_choose) }) .run(); sleep(300); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h index dc40aed4ba..1c29762f24 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h @@ -1,9 +1,10 @@ #pragma once #include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeStageEncounterTaskPlugin : public AbstractTaskPlugin + class RoguelikeStageEncounterTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig { public: using AbstractTaskPlugin::AbstractTaskPlugin;