From e41f1600378de769cd63c8807ec268eb891f0ee7 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Sun, 2 Feb 2025 15:24:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=82=89=E9=B8=BD=E7=83=A7=E6=B0=B4?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=88=86=E9=98=9F=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RoguelikeCustomStartTaskPlugin.cpp | 59 ++++++++++++------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp index 8f4d916e3d..83d2f91fdd 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp @@ -3,7 +3,6 @@ #include "Config/Miscellaneous/BattleDataConfig.h" #include "Config/TaskData.h" #include "Controller/Controller.h" -#include "Status.h" #include "Task/ProcessTask.h" #include "Utils/Logger.hpp" #include "Vision/OCRer.h" @@ -24,20 +23,46 @@ bool asst::RoguelikeCustomStartTaskPlugin::verify(AsstMsg msg, const json::value if (task_view.starts_with(roguelike_name)) { task_view.remove_prefix(roguelike_name.length()); } - static const std::unordered_map> TaskMap = { - { "Roguelike@SquadDefault", { AsstMsg::SubTaskCompleted, RoguelikeCustomType::Squad } }, - { "Roguelike@RolesDefault", { AsstMsg::SubTaskCompleted, RoguelikeCustomType::Roles } }, - { "Roguelike@RecruitMain", { AsstMsg::SubTaskStart, RoguelikeCustomType::CoreChar } }, + static const std::array, 3> TaskMap = { + std::make_tuple(AsstMsg::SubTaskCompleted, "Roguelike@SquadDefault", RoguelikeCustomType::Squad), + std::make_tuple(AsstMsg::SubTaskCompleted, "Roguelike@RolesDefault", RoguelikeCustomType::Roles), + std::make_tuple(AsstMsg::SubTaskStart, "Roguelike@RecruitMain", RoguelikeCustomType::CoreChar), }; - auto it = TaskMap.find(task_view); - if (it == TaskMap.cend()) { + + RoguelikeCustomType type = RoguelikeCustomType::None; + for (const auto& [t_msg, t_task, t] : TaskMap) { + if (t_msg == msg && t_task == task_view) { + type = t; + break; + } + } + + if (type == RoguelikeCustomType::None) { return false; } - if (msg != it->second.first) { + + if (type == RoguelikeCustomType::Squad) { + if (m_config->get_run_for_collectible()) { // 烧水分队 + if (m_collectible_mode_squad.empty()) { + return false; + } + m_waiting_to_run = type; + return true; + } + else { + if (m_squad.empty()) { // 开局分队 + return false; + } + m_waiting_to_run = type; + return true; + } return false; } - auto type = it->second.second; - if (auto custom_it = m_customs.find(type); custom_it == m_customs.cend() || custom_it->second.empty()) { + + if (auto it = m_customs.find(type); it == m_customs.cend()) { + return false; + } + else if (it->second.empty()) { return false; } @@ -52,8 +77,6 @@ bool asst::RoguelikeCustomStartTaskPlugin::load_params(const json::value& params m_squad = params.get("squad", ""); m_collectible_mode_squad = params.get("collectible_mode_squad", ""); - set_custom(RoguelikeCustomType::Squad, m_squad); - if (params.get("start_with_seed", false)) { // 种子刷钱,强制随心所欲 set_custom(RoguelikeCustomType::Roles, "随心所欲"); } @@ -75,13 +98,6 @@ void asst::RoguelikeCustomStartTaskPlugin::set_custom(RoguelikeCustomType type, bool asst::RoguelikeCustomStartTaskPlugin::_run() { - if (m_config->get_run_for_collectible()) { - set_custom(RoguelikeCustomType::Squad, m_collectible_mode_squad); // 烧水分队 - } - else { - set_custom(RoguelikeCustomType::Squad, m_squad); // 开局分队 - } - const std::unordered_map> TypeActuator = { { RoguelikeCustomType::Squad, std::bind(&RoguelikeCustomStartTaskPlugin::hijack_squad, this) }, { RoguelikeCustomType::Roles, std::bind(&RoguelikeCustomStartTaskPlugin::hijack_roles, this) }, @@ -107,12 +123,13 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_squad() { LogTraceFunction; + std::string squad = !m_config->get_run_for_collectible() ? m_squad : m_collectible_mode_squad; constexpr size_t SwipeTimes = 7; for (size_t i = 0; i != SwipeTimes; ++i) { auto image = ctrler()->get_image(); OCRer analyzer(image); analyzer.set_task_info("RoguelikeCustom-HijackSquad"); - analyzer.set_required({ m_customs[RoguelikeCustomType::Squad] }); + analyzer.set_required({ squad }); if (!analyzer.analyze()) { ProcessTask(*this, { "Roguelike@SquadSlowlySwipeToTheRight" }).run(); @@ -122,7 +139,7 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_squad() const auto& rect = analyzer.get_result().front().rect; ctrler()->click(rect); - m_config->set_squad(m_customs[RoguelikeCustomType::Squad]); + m_config->set_squad(std::move(squad)); return true; } ProcessTask(*this, { "SwipeToTheLeft" }).run();