From 167ac2d2d5f32ebf91ecde4177d50f8554fe1b37 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Thu, 31 Jul 2025 15:04:13 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=88=90=E5=B0=B1?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=B8=8E=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/Constants/AchievementIds.cs | 9 ++ .../Helper/AchievementTrackerHelper.cs | 128 +++++++++--------- src/MaaWpfGui/Main/AsstProxy.cs | 4 +- src/MaaWpfGui/Models/Achievement.cs | 7 +- src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 62 ++++----- 5 files changed, 113 insertions(+), 97 deletions(-) diff --git a/src/MaaWpfGui/Constants/AchievementIds.cs b/src/MaaWpfGui/Constants/AchievementIds.cs index 83629ef537..badcb950de 100644 --- a/src/MaaWpfGui/Constants/AchievementIds.cs +++ b/src/MaaWpfGui/Constants/AchievementIds.cs @@ -31,8 +31,12 @@ namespace MaaWpfGui.Constants public const string RoguelikeGamePass1 = "RoguelikeGamePass1"; public const string RoguelikeGamePass2 = "RoguelikeGamePass2"; public const string RoguelikeGamePass3 = "RoguelikeGamePass3"; + + public const string RoguelikeGroup = "Roguelike"; public const string RoguelikeRetreat = "RoguelikeRetreat"; public const string RoguelikeGoldMax = "RoguelikeGoldMax"; + + public const string RoguelikeNGroup = "RoguelikeN"; public const string RoguelikeN04 = "RoguelikeN04"; public const string RoguelikeN08 = "RoguelikeN08"; public const string RoguelikeN12 = "RoguelikeN12"; @@ -50,11 +54,13 @@ namespace MaaWpfGui.Constants public const string ScheduleMaster1 = "ScheduleMaster1"; public const string ScheduleMaster2 = "ScheduleMaster2"; + public const string MirrorChyanGroup = "MirrorChyan"; public const string MirrorChyanFirstUse = "MirrorChyanFirstUse"; public const string MirrorChyanCdkError = "MirrorChyanCdkError"; public const string MosquitoLeg = "MosquitoLeg"; + public const string PioneerGroup = "Pioneer"; public const string Pioneer1 = "Pioneer1"; public const string Pioneer2 = "Pioneer2"; public const string Pioneer3 = "Pioneer3"; @@ -89,9 +95,11 @@ namespace MaaWpfGui.Constants public const string TacticalRetreat = "TacticalRetreat"; public const string Martian = "Martian"; + public const string RecruitGroup = "Recruit"; public const string RecruitNoSixStar = "RecruitNoSixStar"; public const string RecruitNoSixStarStreak = "RecruitNoSixStarStreak"; + public const string SnapshotChallengeGroup = "SnapshotChallenge"; // 累计型成就 public const string SnapshotChallenge1 = "SnapshotChallenge1"; // 999 public const string SnapshotChallenge2 = "SnapshotChallenge2"; // 800 public const string SnapshotChallenge3 = "SnapshotChallenge3"; // 400 @@ -133,6 +141,7 @@ namespace MaaWpfGui.Constants public const string VersionClick = "VersionClick"; public const string Lucky = "Lucky"; + public const string LoginGroup = "Login"; public const string AprilFools = "AprilFools"; public const string MidnightLaunch = "MidnightLaunch"; public const string LunarNewYear = "LunarNewYear"; diff --git a/src/MaaWpfGui/Helper/AchievementTrackerHelper.cs b/src/MaaWpfGui/Helper/AchievementTrackerHelper.cs index 94673fd1ee..526cf24f57 100644 --- a/src/MaaWpfGui/Helper/AchievementTrackerHelper.cs +++ b/src/MaaWpfGui/Helper/AchievementTrackerHelper.cs @@ -139,8 +139,9 @@ namespace MaaWpfGui.Helper { Achievements = _achievements .OrderByDescending(kv => kv.Value.IsUnlocked) // 已解锁优先 - .ThenBy(kv => !kv.Value.IsNewUnlock) // 新解锁的排前面 + .ThenByDescending(kv => kv.Value.IsNewUnlock) // 新解锁的排前面 .ThenBy(kv => kv.Value.Category) // 按类别分组 + .ThenBy(kv => kv.Value.Group) .ThenBy(kv => kv.Value.Id) // 最后按 Id .ToDictionary(kv => kv.Key, kv => kv.Value); } @@ -306,7 +307,7 @@ namespace MaaWpfGui.Helper public void AddProgressToGroup(string groupPrefix, int amount = 1) { - foreach (var achievement in _achievements.Values.Where(achievement => achievement.Id.StartsWith(groupPrefix))) + foreach (var achievement in _achievements.Values.Where(achievement => achievement.Group == groupPrefix)) { AddProgress(achievement.Id, amount); } @@ -326,7 +327,7 @@ namespace MaaWpfGui.Helper public void SetProgressToGroup(string groupPrefix, int progress) { - foreach (var achievement in _achievements.Values.Where(achievement => achievement.Id.StartsWith(groupPrefix))) + foreach (var achievement in _achievements.Values.Where(achievement => achievement.Group == groupPrefix)) { SetProgress(achievement.Id, progress); } @@ -371,26 +372,26 @@ namespace MaaWpfGui.Helper #region 工厂函数 - private static Achievement BasicUsage(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.BasicUsage, IsRare = isRare }; + private static Achievement BasicUsage(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.BasicUsage, IsRare = isRare }; - private static Achievement FeatureExploration(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.FeatureExploration, IsRare = isRare }; + private static Achievement FeatureExploration(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.FeatureExploration, IsRare = isRare }; - private static Achievement AutoBattle(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.AutoBattle, IsRare = isRare }; + private static Achievement AutoBattle(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.AutoBattle, IsRare = isRare }; - private static Achievement Humor(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.Humor, IsRare = isRare }; + private static Achievement Humor(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.Humor, IsRare = isRare }; - private static Achievement BugRelated(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.BugRelated, IsRare = isRare }; + private static Achievement BugRelated(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.BugRelated, IsRare = isRare }; - private static Achievement Behavior(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.Behavior, IsRare = isRare }; + private static Achievement Behavior(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.Behavior, IsRare = isRare }; - private static Achievement EasterEgg(string id, int? target = null, bool isHidden = false, bool isRare = false) - => new() { Id = id, Target = target ?? default, IsHidden = isHidden, Category = AchievementCategory.EasterEgg, IsRare = isRare }; + private static Achievement EasterEgg(string id, string group = "", int? target = null, bool isHidden = false, bool isRare = false) + => new() { Id = id, Group = group, Target = target ?? 0, IsHidden = isHidden, Category = AchievementCategory.EasterEgg, IsRare = isRare }; #endregion @@ -398,73 +399,76 @@ namespace MaaWpfGui.Helper [ #region 基础使用类 - BasicUsage(id: AchievementIds.SanitySpender1, target: 10), // 刷理智次数 - BasicUsage(id: AchievementIds.SanitySpender2, target: 100), - BasicUsage(id: AchievementIds.SanitySpender3, target: 1000), + BasicUsage(id: AchievementIds.SanitySpender1, group: AchievementIds.SanitySpenderGroup, target: 10), // 刷理智次数 + BasicUsage(id: AchievementIds.SanitySpender2, group: AchievementIds.SanitySpenderGroup, target: 100), + BasicUsage(id: AchievementIds.SanitySpender3, group: AchievementIds.SanitySpenderGroup, target: 1000), - BasicUsage(id: AchievementIds.SanitySaver1, target: 1), // 使用理智药数 - BasicUsage(id: AchievementIds.SanitySaver2, target: 10), - BasicUsage(id: AchievementIds.SanitySaver3, target: 50), + BasicUsage(id: AchievementIds.SanitySaver1, group: AchievementIds.SanitySaverGroup, target: 1), // 使用理智药数 + BasicUsage(id: AchievementIds.SanitySaver2, group: AchievementIds.SanitySaverGroup, target: 10), + BasicUsage(id: AchievementIds.SanitySaver3, group: AchievementIds.SanitySaverGroup, target: 50), + + BasicUsage(id: AchievementIds.RoguelikeGamePass1, group: AchievementIds.RoguelikeGamePassGroup, target: 1), // 使用牛牛通关肉鸽 + BasicUsage(id: AchievementIds.RoguelikeGamePass2, group: AchievementIds.RoguelikeGamePassGroup, target: 5), + BasicUsage(id: AchievementIds.RoguelikeGamePass3, group: AchievementIds.RoguelikeGamePassGroup, target: 10), + + BasicUsage(id: AchievementIds.RoguelikeN04, group: AchievementIds.RoguelikeNGroup), // 肉鸽 难度 通关 + BasicUsage(id: AchievementIds.RoguelikeN08, group: AchievementIds.RoguelikeNGroup), + BasicUsage(id: AchievementIds.RoguelikeN12, group: AchievementIds.RoguelikeNGroup), + BasicUsage(id: AchievementIds.RoguelikeN15, group: AchievementIds.RoguelikeNGroup, isRare: true), + + BasicUsage(id: AchievementIds.RoguelikeRetreat, group: AchievementIds.RoguelikeGroup, target: 100), // 牛牛放弃探索 100 次 + BasicUsage(id: AchievementIds.RoguelikeGoldMax, group: AchievementIds.RoguelikeGroup, target: 999), // 肉鸽源石锭到达 999 BasicUsage(id: AchievementIds.FirstLaunch), // 首次启动 BasicUsage(id: AchievementIds.SanityExpire, target: 8), // 单次消耗 8 瓶快过期的理智药 BasicUsage(id: AchievementIds.OverLimitAgent, target: 100, isHidden: true), // 单次代理 100 关 - - BasicUsage(id: AchievementIds.RoguelikeGamePass1, target: 1), // 使用牛牛通关肉鸽 - BasicUsage(id: AchievementIds.RoguelikeGamePass2, target: 5), - BasicUsage(id: AchievementIds.RoguelikeGamePass3, target: 10), - BasicUsage(id: AchievementIds.RoguelikeRetreat, target: 100), // 牛牛放弃探索 100 次 - BasicUsage(id: AchievementIds.RoguelikeGoldMax, target: 999), // 肉鸽源石锭到达 999 - BasicUsage(id: AchievementIds.RoguelikeN04), // 肉鸽 难度 通关 - BasicUsage(id: AchievementIds.RoguelikeN08), - BasicUsage(id: AchievementIds.RoguelikeN12), - BasicUsage(id: AchievementIds.RoguelikeN15, isRare: true), #endregion #region 功能探索类 - FeatureExploration(id: AchievementIds.ScheduleMaster1, target: 1), // 定时执行 - FeatureExploration(id: AchievementIds.ScheduleMaster2, target: 100), + FeatureExploration(id: AchievementIds.ScheduleMaster1, group: AchievementIds.ScheduleMasterGroup, target: 1), // 定时执行 + FeatureExploration(id: AchievementIds.ScheduleMaster2, group: AchievementIds.ScheduleMasterGroup, target: 100), - FeatureExploration(id: AchievementIds.MirrorChyanFirstUse, isHidden: true), // 第一次成功使用 MirrorChyan 下载 - FeatureExploration(id: AchievementIds.MirrorChyanCdkError, isHidden: true), // MirrorChyan CDK 错误 + FeatureExploration(id: AchievementIds.MirrorChyanFirstUse, group: AchievementIds.MirrorChyanGroup, isHidden: true), // 第一次成功使用 MirrorChyan 下载 + FeatureExploration(id: AchievementIds.MirrorChyanCdkError, group: AchievementIds.MirrorChyanGroup, isHidden: true), // MirrorChyan CDK 错误 - FeatureExploration(id: AchievementIds.Pioneer1), // 将 MAA 更新至公测版 - FeatureExploration(id: AchievementIds.Pioneer2, isHidden: true), // 将 MAA 更新至内测版(隐藏) - FeatureExploration(id: AchievementIds.Pioneer3, isHidden: true), // 使用未发布版本的 MAA(隐藏) + FeatureExploration(id: AchievementIds.Pioneer1, group: AchievementIds.PioneerGroup), // 将 MAA 更新至公测版 + FeatureExploration(id: AchievementIds.Pioneer2, group: AchievementIds.PioneerGroup, isHidden: true), // 将 MAA 更新至内测版(隐藏) + FeatureExploration(id: AchievementIds.Pioneer3, group: AchievementIds.PioneerGroup, isHidden: true), // 使用未发布版本的 MAA(隐藏) FeatureExploration(id: AchievementIds.MosquitoLeg, target: 5), // 使用「借助战打 OF-1」功能超过 5 次 - FeatureExploration(id: AchievementIds.RealGacha, isHidden: true), // 真正的抽卡 FeatureExploration(id: AchievementIds.PeekScreen, isHidden: true), // 窥屏 FeatureExploration(id: AchievementIds.CustomizationMaster, isHidden: true), // 自定义背景 #endregion #region 自动战斗 - AutoBattle(id: AchievementIds.UseCopilot1, target: 1), // 自动战斗 - AutoBattle(id: AchievementIds.UseCopilot2, target: 10), - AutoBattle(id: AchievementIds.UseCopilot3, target: 100), - AutoBattle(id: AchievementIds.CopilotLikeGiven1, target: 1), // 点赞 1 次 - AutoBattle(id: AchievementIds.CopilotLikeGiven2, target: 10), // 点赞 10 次 - AutoBattle(id: AchievementIds.CopilotLikeGiven3, target: 50), // 点赞 50 次 - AutoBattle(id: AchievementIds.CopilotError), // 代理作战出现失误 + AutoBattle(id: AchievementIds.UseCopilot1, group: AchievementIds.UseCopilotGroup, target: 1), // 自动战斗 + AutoBattle(id: AchievementIds.UseCopilot2, group: AchievementIds.UseCopilotGroup, target: 10), + AutoBattle(id: AchievementIds.UseCopilot3, group: AchievementIds.UseCopilotGroup, target: 100), + AutoBattle(id: AchievementIds.CopilotLikeGiven1, group: AchievementIds.CopilotLikeGroup, target: 1), // 点赞 1 次 + AutoBattle(id: AchievementIds.CopilotLikeGiven2, group: AchievementIds.CopilotLikeGroup, target: 10), // 点赞 10 次 + AutoBattle(id: AchievementIds.CopilotLikeGiven3, group: AchievementIds.CopilotLikeGroup, target: 50), // 点赞 50 次 + + AutoBattle(id: AchievementIds.CopilotError), // 代理作战出现失误 AutoBattle(id: AchievementIds.MapOutdated, isHidden: true), // 提示需要更新地图资源 AutoBattle(id: AchievementIds.Irreplaceable, isHidden: true), // 自动编队缺少至少两名干员 #endregion #region 搞笑/梗类成就 - Humor(id: AchievementIds.SnapshotChallenge1, isHidden: true), // 平均截图用时超过 800ms(高 ping 战士) - Humor(id: AchievementIds.SnapshotChallenge2, isHidden: true), // 平均截图用时在 400ms 到 800ms 之间(是不是有点太慢了) - Humor(id: AchievementIds.SnapshotChallenge3), // 平均截图用时小于 400ms(截图挑战 · Normal) - Humor(id: AchievementIds.SnapshotChallenge4), // 平均截图用时小于 100ms(截图挑战 · Fast) - Humor(id: AchievementIds.SnapshotChallenge5), // 平均截图用时小于 10ms(截图挑战 · Ultra) - Humor(id: AchievementIds.SnapshotChallenge6, isHidden: true, isRare: true), // 平均截图用时小于 5ms + Humor(id: AchievementIds.SnapshotChallenge1, group: AchievementIds.SnapshotChallengeGroup, isHidden: true), // 平均截图用时超过 800ms(高 ping 战士) + Humor(id: AchievementIds.SnapshotChallenge2, group: AchievementIds.SnapshotChallengeGroup, isHidden: true), // 平均截图用时在 400ms 到 800ms 之间(是不是有点太慢了) + Humor(id: AchievementIds.SnapshotChallenge3, group: AchievementIds.SnapshotChallengeGroup), // 平均截图用时小于 400ms(截图挑战 · Normal) + Humor(id: AchievementIds.SnapshotChallenge4, group: AchievementIds.SnapshotChallengeGroup), // 平均截图用时小于 100ms(截图挑战 · Fast) + Humor(id: AchievementIds.SnapshotChallenge5, group: AchievementIds.SnapshotChallengeGroup), // 平均截图用时小于 10ms(截图挑战 · Ultra) + Humor(id: AchievementIds.SnapshotChallenge6, group: AchievementIds.SnapshotChallengeGroup, isHidden: true, isRare: true), // 平均截图用时小于 5ms Humor(id: AchievementIds.QuickCloser, isHidden: true), // 快速关闭弹窗 Humor(id: AchievementIds.TacticalRetreat), // 停止任务 Humor(id: AchievementIds.Martian, isHidden: true), // 90 天没更新 - Humor(id: AchievementIds.RecruitNoSixStar, target: 500), // 公招中累计 500 次没出现六星tag - Humor(id: AchievementIds.RecruitNoSixStarStreak, target: 500, isHidden: true), // 公招中连续 500 次没出现六星tag + + Humor(id: AchievementIds.RecruitNoSixStar, group: AchievementIds.RecruitGroup, target: 500), // 公招中累计 500 次没出现六星tag + Humor(id: AchievementIds.RecruitNoSixStarStreak, group: AchievementIds.RecruitGroup, target: 500, isHidden: true), // 公招中连续 500 次没出现六星tag #endregion #region BUG 相关 @@ -481,18 +485,18 @@ namespace MaaWpfGui.Helper Behavior(id: AchievementIds.TaskStartCancel, isHidden: true), // 在开始任务后马上又停止 Behavior(id: AchievementIds.AfkWatcher), // 窗口尺寸最小化后长时间不操作 - Behavior(id: AchievementIds.UseDaily1, target: 7), // 连续使用时间 - Behavior(id: AchievementIds.UseDaily2, target: 30), - Behavior(id: AchievementIds.UseDaily3, target: 365, isRare: true), + Behavior(id: AchievementIds.UseDaily1, group: AchievementIds.UseDailyGroup, target: 7), // 连续使用时间 + Behavior(id: AchievementIds.UseDaily2, group: AchievementIds.UseDailyGroup, target: 30), + Behavior(id: AchievementIds.UseDaily3, group: AchievementIds.UseDailyGroup, target: 365, isRare: true), #endregion #region 彩蛋类 EasterEgg(id: AchievementIds.Rules, isHidden: true), // 我会一直注视着你 EasterEgg(id: AchievementIds.VersionClick, isHidden: true), // 这也能点? - EasterEgg(id: AchievementIds.AprilFools, isHidden: true), // 愚人节 - EasterEgg(id: AchievementIds.MidnightLaunch, isHidden: true), // 0~4 点 - EasterEgg(id: AchievementIds.LunarNewYear, isHidden: true), // 春节 + EasterEgg(id: AchievementIds.AprilFools, AchievementIds.LoginGroup, isHidden: true), // 愚人节 + EasterEgg(id: AchievementIds.MidnightLaunch, AchievementIds.LoginGroup, isHidden: true), // 0~4 点 + EasterEgg(id: AchievementIds.LunarNewYear, AchievementIds.LoginGroup, isHidden: true), // 春节 EasterEgg(id: AchievementIds.Lucky, isHidden: true, isRare: true), // 启动 MAA 时有极小概率触发 #endregion diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 87dacb3eac..2972cea86d 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -945,7 +945,7 @@ namespace MaaWpfGui.Main } Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("CompleteCombat"), UiLogColor.Info); - AchievementTrackerHelper.Instance.AddProgressToGroup(AchievementIds.UseCopilotGroup, 1); + AchievementTrackerHelper.Instance.AddProgressToGroup(AchievementIds.UseCopilotGroup); } break; @@ -1464,7 +1464,7 @@ namespace MaaWpfGui.Main case "EndOfActionThenStop": TaskQueueViewModel.MallTask.LastCreditFightTaskTime = DateTime.UtcNow.ToYjDate().ToFormattedString(); Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString("CreditFight")); - AchievementTrackerHelper.Instance.AddProgressToGroup(AchievementIds.MosquitoLeg, 1); + AchievementTrackerHelper.Instance.AddProgress(AchievementIds.MosquitoLeg); break; case "VisitLimited" or "VisitNextBlack": TaskQueueViewModel.MallTask.LastCreditVisitFriendsTime = DateTime.UtcNow.ToYjDate().ToFormattedString(); diff --git a/src/MaaWpfGui/Models/Achievement.cs b/src/MaaWpfGui/Models/Achievement.cs index 13d1afd2b0..28cee2ad11 100644 --- a/src/MaaWpfGui/Models/Achievement.cs +++ b/src/MaaWpfGui/Models/Achievement.cs @@ -68,10 +68,10 @@ namespace MaaWpfGui.Models public bool CanShow => !IsHidden || IsUnlocked; [JsonIgnore] - public bool IsProgressive => Target != default; + public bool IsProgressive => Target != 0; [JsonIgnore] - public int Target { get; set; } = default; // 可选目标值 + public int Target { get; set; } = 0; // 可选目标值 [JsonIgnore] public AchievementCategory Category { get; set; } // 分组 @@ -82,6 +82,9 @@ namespace MaaWpfGui.Models [JsonIgnore] public bool IsVisibleInSearch { get; set; } = true; + [JsonIgnore] + public string Group { get; set; } = string.Empty; + [JsonIgnore] public string MedalBrushKey { diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 38e0a738dd..976ccee37b 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -1188,11 +1188,11 @@ C:\\leidian\\LDPlayer9。\n 窥屏 喜欢盯着看是吧.jpg - 使用一次牛牛监控 + 使用一次{key=Peep} 喜报 - 我的MAA怎么用不了了? - 触发过MAA的报错 + 我的 MMA 怎么用不了了? + 触发过 MAA 的报错 不速之客 你触发了未知的领域。 @@ -1200,11 +1200,11 @@ C:\\leidian\\LDPlayer9。\n 自定义达人 咱就是二次元! - 更换一次背景图片 + 更换一次{key=BackgroundImage} 真正的抽卡 不是模拟抽卡吗?怎么真抽了??? - 使用一次牛牛抽卡 + 使用一次{key=Gacha} 初来乍到 欢迎使用 MaaAssistantArknights. @@ -1216,7 +1216,7 @@ C:\\leidian\\LDPlayer9。\n 严重错讠 我会一直注视着你。 - MAA员工守则 + MAA 员工守则 这也能点? 这是什么?版本号,点一下。 @@ -1224,43 +1224,43 @@ C:\\leidian\\LDPlayer9。\n 精打细算 每点理智都用得恰到好处。 - 使用理智回复功能 1 次 + 使用 「{key=UseSanityPotion}」 功能回复理智 1 次 补给大师 你对药剂的使用炉火纯青。 - 使用理智回复功能 10 次 + 使用 「{key=UseSanityPotion}」 功能回复理智 10 次 永动机 你的理智似乎永远用不完。 - 使用理智回复功能 50 次 + 使用 「{key=UseSanityPotion}」 功能回复理智 50 次 ××管理大师 更有效的规划。 - 定时执行 1 次 + {key=ScheduleSettings} 1 次 泛用型自动化解决方案0.3.2.9f2 您已熟知 PRTS 的自动化部署。 - 定时执行 100 次 + {key=ScheduleSettings} 100 次 要过期了 赶紧冲哇!!! - 使用「无限吃 48 小时内过期的理智药」,单次任务使用 8 瓶及以上临期理智药 + 使用「{key=UseExpiringMedicine}」,单次任务使用 8 瓶及以上临期理智药 超限代理 你进行了一次能将大道磨灭的代理任务。 - 在单次任务中,进行超过 100 次代理指挥作战 + 在单次 「{key=Combat}」 任务中,进行超过 100 次代理指挥作战 Mirror~~☆ - 是 Mirror酱!我们有救了! - 初次成功使用 Mirror酱 + 是 {key=MirrorChyan}!我们有救了! + 初次成功使用 {key=MirrorChyan} 这……对吗? 谁偷吃了我的字母饼干? - Mirror酱 CDK 填写错误 + {key=MirrorChyan} CDK 填写错误 隐患勘察 一定要杜绝的是,来自内部的风险。 - 进行一次问题反馈 + 进行一次{key=IssueReport} 急急国王 我知道你很急,但你先别急。 @@ -1280,11 +1280,11 @@ C:\\leidian\\LDPlayer9。\n 玄学无效 事已至此,先睡觉吧。 - 公招中累计 500 次没出现六星 tag + 「{key=Recruiting}」 中累计 500 次没出现六星 tag 一定是 MAA 干的! 乆乆乆乆乆乆乆乆乆乆! - 公招中连续 500 次没出现六星 tag + 「{key=Recruiting}」 中连续 500 次没出现六星 tag 蚊子腿也是肉! 您深刻理解了积少成多的道理。 @@ -1292,11 +1292,11 @@ C:\\leidian\\LDPlayer9。\n 测试先锋 您率先体验了处于测试中的版本。 - 将 MAA 更新至公测版 + 将 MAA 更新至{key=UpdateCheckBeta} 超级测试先锋 - 您使用了最新的测试版本(出现任何新的问题请前往问题反馈!) - 将 MAA 更新至内测版 + 您使用了最新的测试版本(出现任何新的问题请前往{key=IssueReport}!) + 将 MAA 更新至{key=UpdateCheckNightly} DEBUG 急先锋 能下到这个版本的都不是一般人。 @@ -1348,19 +1348,19 @@ C:\\leidian\\LDPlayer9。\n 初抵终点 只要能到达...那个地方... - 使用牛牛通关肉鸽 1 次 + 使用 「{key=AutoRoguelike}」 通关肉鸽 1 次 再临终点 这条道路我已走过多次。 - 使用牛牛通关肉鸽 5 次 + 使用 「{key=AutoRoguelike}」 通关肉鸽 5 次 终点常客 闭着眼睛都能走到这。 - 使用牛牛通关肉鸽 10 次 + 使用 「{key=AutoRoguelike}」 通关肉鸽 10 次 失败是成功之母 终有一天,我们会到达成功的彼岸,失败是成功的阶梯。 - 牛牛放弃探索 100 次 + 「{key=AutoRoguelike}」 放弃探索 100 次 满了满了 坎诺特,把你店里最贵的端出来! @@ -1392,7 +1392,7 @@ C:\\leidian\\LDPlayer9。\n 全勤先锋 你,已经成为博士的替身了。 - 开始任务能连续在线超过 3 小时 + 开始任务后连续在线超过 3 小时 天天打卡 连续签到七天,可惜没有奖励。 @@ -1420,19 +1420,19 @@ C:\\leidian\\LDPlayer9。\n 简简单单 这种难度难不倒我。 - 使用牛牛通关任意肉鸽 N4 及以上难度 + 使用 「{key=AutoRoguelike}」 通关任意肉鸽 N4 及以上难度 挑战困难 勇敢牛牛不怕困难。 - 使用牛牛通关任意肉鸽 N8 及以上难度 + 使用 「{key=AutoRoguelike}」 通关任意肉鸽 N8 及以上难度 超越人类 比一般人玩的都好。 - 使用牛牛通关任意肉鸽 N12 及以上难度 + 使用 「{key=AutoRoguelike}」 通关任意肉鸽 N12 及以上难度 仙术杯选手 仙术牛牛真仙术。 - 使用牛牛通关任意肉鸽 N15 及以上难度 + 使用 「{key=AutoRoguelike}」 通关任意肉鸽 N15 及以上难度