From 925ff331a150cdcf7854f33ebf7c7647a3e7f5f5 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Sat, 2 May 2026 20:40:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=B4=E6=9C=9F=E7=90=86=E6=99=BA?= =?UTF-8?q?=E8=8D=AF=E4=BD=BF=E7=94=A8=E8=BE=93=E5=87=BA=E9=81=97=E6=BC=8F?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/Main/AsstProxy.cs | 58 +++++++++++++--------- src/MaaWpfGui/Res/Localizations/en-us.xaml | 2 +- src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 2 +- src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 2 +- src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 2 +- src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 2 +- 6 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index ed5e85c9bf..cdefded6ef 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -59,7 +59,7 @@ using AsstInstanceOptionKey = System.Int32; using AsstTaskId = System.Int32; -using FightTask = MaaWpfGui.ViewModels.UserControl.TaskQueue.FightSettingsUserControlModel; +using FightSetting = MaaWpfGui.ViewModels.UserControl.TaskQueue.FightSettingsUserControlModel; using ToastNotification = MaaWpfGui.Helper.ToastNotification; namespace MaaWpfGui.Main; @@ -999,10 +999,10 @@ public class AsstProxy private void OnToastNotificationTimerTick(object? sender, EventArgs e) { - if (FightTask.SanityReport is not null) + if (FightSetting.SanityReport is not null) { var sanityReport = LocalizationHelper.GetString("SanityReport"); - var recoveryTime = FightTask.SanityReport.ReportTime.AddMinutes(FightTask.SanityReport.SanityCurrent < FightTask.SanityReport.SanityMax ? (FightTask.SanityReport.SanityMax - FightTask.SanityReport.SanityCurrent) * 6 : 0); + var recoveryTime = FightSetting.SanityReport.ReportTime.AddMinutes(FightSetting.SanityReport.SanityCurrent < FightSetting.SanityReport.SanityMax ? (FightSetting.SanityReport.SanityMax - FightSetting.SanityReport.SanityCurrent) * 6 : 0); sanityReport = sanityReport.Replace("{DateTime}", recoveryTime.ToString("yyyy-MM-dd HH:mm")).Replace("{TimeDiff}", (recoveryTime - DateTimeOffset.Now).ToString(@"h\h\ m\m")); ToastNotification.ShowDirect(sanityReport); } @@ -1125,12 +1125,12 @@ public class AsstProxy } var taskName = task?.NameDisplay ?? $"({LocalizationHelper.GetString(taskChain)})"; - if (taskChain == "Fight" && FightTask.SanityReport is not null) + if (taskChain == "Fight" && FightSetting.SanityReport is not null) { - var sanityLog = "\n" + string.Format(LocalizationHelper.GetString("CurrentSanity"), FightTask.SanityReport.SanityCurrent, FightTask.SanityReport.SanityMax); + var sanityLog = "\n" + string.Format(LocalizationHelper.GetString("CurrentSanity"), FightSetting.SanityReport.SanityCurrent, FightSetting.SanityReport.SanityMax); Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CompleteTask") + taskName + sanityLog); - if (FightTask.SanityReport.SanityCurrent == 0) + if (FightSetting.SanityReport.SanityCurrent == 0) { AchievementTrackerHelper.Instance.Unlock(AchievementIds.SanityPlanner); } @@ -1219,9 +1219,9 @@ public class AsstProxy var allTaskCompleteLog = string.Format(LocalizationHelper.GetString("AllTasksComplete"), diffTaskTime); - if (FightTask.SanityReport is not null) + if (FightSetting.SanityReport is not null) { - var recoveryTime = FightTask.SanityReport.ReportTime.AddMinutes(FightTask.SanityReport.SanityCurrent < FightTask.SanityReport.SanityMax ? (FightTask.SanityReport.SanityMax - FightTask.SanityReport.SanityCurrent) * 6 : 0); + var recoveryTime = FightSetting.SanityReport.ReportTime.AddMinutes(FightSetting.SanityReport.SanityCurrent < FightSetting.SanityReport.SanityMax ? (FightSetting.SanityReport.SanityMax - FightSetting.SanityReport.SanityCurrent) * 6 : 0); sanityReport = sanityReport.Replace("{DateTime}", recoveryTime.ToString("yyyy-MM-dd HH:mm")).Replace("{TimeDiff}", (recoveryTime - DateTimeOffset.Now).ToString(@"h\h\ m\m")); allTaskCompleteLog = allTaskCompleteLog + Environment.NewLine + sanityReport; @@ -1269,7 +1269,7 @@ public class AsstProxy using (var toast = new ToastNotification(allTaskCompleteTitle)) { - if (FightTask.SanityReport is not null) + if (FightSetting.SanityReport is not null) { toast.AppendContentText(sanityReport); } @@ -1524,19 +1524,19 @@ public class AsstProxy case "StartButton2": case "AnnihilationConfirm": StringBuilder missionStartLogBuilder = new(); - if (FightTask.FightReport is null) + if (FightSetting.FightReport is null) { missionStartLogBuilder.AppendLine(string.Format(LocalizationHelper.GetString("MissionStart.FightTask"), "???", "???")); } else { - var times = FightTask.FightReport.Series == 1 ? $"{FightTask.FightReport.TimesFinished + 1}" : $"{FightTask.FightReport.TimesFinished + 1}~{FightTask.FightReport.TimesFinished + FightTask.FightReport.Series}"; - missionStartLogBuilder.AppendLine(string.Format(LocalizationHelper.GetString("MissionStart.FightTask"), times, FightTask.FightReport.SanityCost)); + var times = FightSetting.FightReport.Series == 1 ? $"{FightSetting.FightReport.TimesFinished + 1}" : $"{FightSetting.FightReport.TimesFinished + 1}~{FightSetting.FightReport.TimesFinished + FightSetting.FightReport.Series}"; + missionStartLogBuilder.AppendLine(string.Format(LocalizationHelper.GetString("MissionStart.FightTask"), times, FightSetting.FightReport.SanityCost)); } - if (FightTask.SanityReport is not null) + if (FightSetting.SanityReport is not null) { - missionStartLogBuilder.AppendFormat(LocalizationHelper.GetString("CurrentSanity"), FightTask.SanityReport.SanityCurrent, FightTask.SanityReport.SanityMax); + missionStartLogBuilder.AppendFormat(LocalizationHelper.GetString("CurrentSanity"), FightSetting.SanityReport.SanityCurrent, FightSetting.SanityReport.SanityMax); } if (ExpiringMedicineUsedTimes > 0) @@ -2215,10 +2215,10 @@ public class AsstProxy case "SanityBeforeStage": { - FightTask.SanityReport = null; + FightSetting.SanityReport = null; if (subTaskDetails?.ToObject() is { SanityMax: > 0 } report) { - FightTask.SanityReport = report; + FightSetting.SanityReport = report; } break; @@ -2226,18 +2226,18 @@ public class AsstProxy case "FightTimes": { - FightTask.FightReport = null; + FightSetting.FightReport = null; if ((subTaskDetails?.Children())?.Any() is true) { - FightTask.FightReport = subTaskDetails.ToObject()!; - if (FightTask.FightReport.TimesFinished > 0) + FightSetting.FightReport = subTaskDetails.ToObject()!; + if (FightSetting.FightReport.TimesFinished > 0) { - AchievementTrackerHelper.Instance.SetProgress(AchievementIds.OverLimitAgent, FightTask.FightReport.TimesFinished); + AchievementTrackerHelper.Instance.SetProgress(AchievementIds.OverLimitAgent, FightSetting.FightReport.TimesFinished); } - if (FightTask.Instance.HasTimesLimited != false && FightTask.FightReport.IsFinished && FightTask.FightReport.TimesFinished < FightTask.Instance.MaxTimes) + if (FightSetting.Instance.HasTimesLimited != false && FightSetting.FightReport.IsFinished && FightSetting.FightReport.TimesFinished < FightSetting.Instance.MaxTimes) { - Instances.TaskQueueViewModel.AddLog(string.Format(LocalizationHelper.GetString("FightTimesUnused"), FightTask.FightReport.TimesFinished, FightTask.FightReport.Series, FightTask.FightReport.TimesFinished + FightTask.FightReport.Series, FightTask.Instance.MaxTimes), UiLogColor.Warning); + Instances.TaskQueueViewModel.AddLog(string.Format(LocalizationHelper.GetString("FightTimesUnused"), FightSetting.FightReport.TimesFinished, FightSetting.FightReport.Series, FightSetting.FightReport.TimesFinished + FightSetting.FightReport.Series, FightSetting.Instance.MaxTimes), UiLogColor.Warning); } } @@ -2270,7 +2270,19 @@ public class AsstProxy else { ExpiringMedicineUsedTimes += medicineCount; - medicineLog = LocalizationHelper.GetString("ExpiringMedicineUsed") + $" {ExpiringMedicineUsedTimes}(+{medicineCount})"; + var item = Instances.TaskQueueViewModel.TaskItemViewModels.FirstOrDefault(i => i.TaskIds.Contains(taskId)); + var expireDay = "--"; + if (item is not null && item.Index >= 0 && item.Index < ConfigFactory.CurrentConfig.TaskQueue.Count) + { + if (ConfigFactory.CurrentConfig.TaskQueue[item.Index] is FightTask fightTask) + { + var yjTime = DateTimeOffset.Now.ToYjDateTime().ToLocalTime(); + var daysUntilEndOfWeek = ((7 - (int)yjTime.DayOfWeek + 7) % 7) + 1; // 距离本周结束的天数, 用鹰历计算 + var expireDays = Math.Max(fightTask.UseExpiringMedicine ? fightTask.MedicineExpireDays : 0, FightSetting.Instance.ActivityExpireIn2Days && fightTask.UseExpireMedicineForActivity ? daysUntilEndOfWeek : 0); + expireDay = $"{expireDays * 24}"; + } + } + medicineLog = LocalizationHelper.GetStringFormat("ExpiringMedicineUsed", expireDay) + $" {ExpiringMedicineUsedTimes}(+{medicineCount})"; AchievementTrackerHelper.Instance.AddProgressToGroup(AchievementIds.SanitySaverGroup, medicineCount); AchievementTrackerHelper.Instance.SetProgress(AchievementIds.SanityExpire, ExpiringMedicineUsedTimes); } diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 8971bbd3ef..b885596b31 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -1151,7 +1151,7 @@ Right-click to clear inactive jobs Medicine: {0},{1}(Expiring) Stone: {0} Medicine used - Expiring medicine used + Expiring medicine (in {0} hours) used Originite Prime used PRTS error Proxy failed too many times, task stopped diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 0a3c928287..1083b4e62d 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -1152,7 +1152,7 @@ C:\\leidian\\LDPlayer9 薬: {0},{1}(期限切れ) 石: {0} 回復剤を使った - 48時間以内に期限が切れる回復剤を使った + {0}時間以内に期限が切れる回復剤を使った 源石を使った 自動指揮のミスが生じました 自動指揮の失敗回数が上限に達したため、任務が停止されました diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index a3ef17f86b..51f00ca6f0 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -1153,7 +1153,7 @@ C:\\leidian\\LDPlayer9 \n이성 회복제: {0},{1}(만료 예정) \n순오리지늄: {0} 이성 회복제를 사용했습니다 - 48시간 이내 만료되는 이성 회복제를 사용했습니다 + {0}시간 이내 만료되는 이성 회복제를 사용했습니다 순오리지늄을 사용했습니다 대리 지휘 오류 발생 대리 지휘 실패 횟수 초과로 작업을 중단합니다 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index f1e0603b54..4081c250a3 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -1152,7 +1152,7 @@ C:\\leidian\\LDPlayer9。\n 药: {0},{1}(临期) 石: {0} 已使用理智药 - 已使用 {0} 天内过期的理智药 + 已使用 {0} H内过期理智药 已使用源石 代理指挥失误 代理失败次数已达上限,任务已停止 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 3e2c123ebb..b34113bec4 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -1152,7 +1152,7 @@ C:\\leidian\\LDPlayer9\n 藥: {0},{1} (即將過期) 石: {0} 已使用理智藥 - 已使用 48 小時內過期的理智藥 + 已使用 {0} 小時內過期的理智藥 已使用源石 代理指揮失誤 代理失敗次數已達上限,任務已停止