From 75f4c8d01e68f8fb9b68e282804c9383347cc6b8 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Fri, 6 Jun 2025 13:24:55 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=87=AA=E5=8A=A8=E6=88=98=E6=96=97?= =?UTF-8?q?=E7=BC=96=E9=98=9F=E5=9B=BA=E5=AE=9A=E4=BC=98=E5=85=88=E7=BC=96?= =?UTF-8?q?=E5=85=A5=E6=89=80=E6=9C=89=E5=B9=B2=E5=91=98,=20=E4=B8=94?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E4=BD=9C=E4=B8=9A=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Common/AsstBattleDef.h | 3 +- .../Config/Miscellaneous/CopilotConfig.cpp | 30 +++++++++---------- .../Task/Miscellaneous/BattleProcessTask.cpp | 9 +++++- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/MaaCore/Common/AsstBattleDef.h b/src/MaaCore/Common/AsstBattleDef.h index be1f4fae7b..9cf878ffcf 100644 --- a/src/MaaCore/Common/AsstBattleDef.h +++ b/src/MaaCore/Common/AsstBattleDef.h @@ -182,7 +182,8 @@ using RoleCounts = std::unordered_map; namespace copilot { -using OperUsageGroups = std::unordered_map>; +using OperUsageGroup = std::pair>; +using OperUsageGroups = std::vector; enum class ActionType { diff --git a/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp b/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp index 82c969d977..74f74e0c92 100644 --- a/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp +++ b/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp @@ -80,6 +80,20 @@ asst::battle::copilot::OperUsageGroups asst::CopilotConfig::parse_groups(const j battle::copilot::OperUsageGroups groups; + if (auto opt = json.find("opers")) { + for (const auto& oper_info : opt.value()) { + OperUsage oper; + oper.name = oper_info.at("name").as_string(); + oper.skill = oper_info.get("skill", 1); + oper.skill_usage = static_cast(oper_info.get("skill_usage", 0)); + oper.skill_times = oper_info.get("skill_times", 1); // 使用技能的次数,默认为 1,兼容曾经的作业 + + // 单个干员的,干员名直接作为组名 + std::string group_name = oper.name; + groups.emplace_back(OperUsageGroup { std::move(group_name), std::vector { std::move(oper) } }); + } + } + if (auto opt = json.find("groups")) { for (const auto& group_info : opt.value()) { std::string group_name = group_info.at("name").as_string(); @@ -92,21 +106,7 @@ asst::battle::copilot::OperUsageGroups asst::CopilotConfig::parse_groups(const j oper.skill_times = oper_info.get("skill_times", 1); // 使用技能的次数,默认为 1,兼容曾经的作业 oper_vec.emplace_back(std::move(oper)); } - groups.emplace(std::move(group_name), std::move(oper_vec)); - } - } - - if (auto opt = json.find("opers")) { - for (const auto& oper_info : opt.value()) { - OperUsage oper; - oper.name = oper_info.at("name").as_string(); - oper.skill = oper_info.get("skill", 1); - oper.skill_usage = static_cast(oper_info.get("skill_usage", 0)); - oper.skill_times = oper_info.get("skill_times", 1); // 使用技能的次数,默认为 1,兼容曾经的作业 - - // 单个干员的,干员名直接作为组名 - std::string group_name = oper.name; - groups.emplace(std::move(group_name), std::vector { std::move(oper) }); + groups.emplace_back(OperUsageGroup { std::move(group_name), std::move(oper_vec) }); } } diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp index fdf901a4b0..130359ae56 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp @@ -154,7 +154,14 @@ bool asst::BattleProcessTask::to_group() } for (const auto& [group_name, oper_name] : m_oper_in_group) { - auto& this_group = get_combat_data().groups[group_name]; + const auto& group_it = ranges::find_if(get_combat_data().groups, [&](const OperUsageGroup& pair) { + return pair.first == group_name; + }); + if (group_it == get_combat_data().groups.end()) { + Log.warn(__FUNCTION__, "Group not found in combat data: ", group_name); + continue; + } + const auto& this_group = group_it->second; // there is a build error on macOS // https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/3779762713/jobs/6425284487 const std::string& oper_name_for_lambda = oper_name;