fix: 临期理智药使用输出遗漏时间

This commit is contained in:
status102
2026-05-02 20:40:55 +08:00
parent 65a5566c9e
commit 925ff331a1
6 changed files with 40 additions and 28 deletions

View File

@@ -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<FightSettingsUserControlModel.SanityInfo>() 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<FightTask.FightTimes>()!;
if (FightTask.FightReport.TimesFinished > 0)
FightSetting.FightReport = subTaskDetails.ToObject<FightSetting.FightTimes>()!;
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);
}

View File

@@ -1151,7 +1151,7 @@ Right-click to clear inactive jobs</system:String>
<system:String x:Key="MedicineUsedTimesWithExpiring" xml:space="preserve">Medicine: {0},{1}(Expiring) </system:String>
<system:String x:Key="StoneUsedTimes" xml:space="preserve">Stone: {0} </system:String>
<system:String x:Key="MedicineUsed">Medicine used</system:String>
<system:String x:Key="ExpiringMedicineUsed">Expiring medicine used</system:String>
<system:String x:Key="ExpiringMedicineUsed">Expiring medicine (in {0} hours) used</system:String>
<system:String x:Key="StoneUsed">Originite Prime used</system:String>
<system:String x:Key="ActingCommandError">PRTS error</system:String>
<system:String x:Key="FightMissionFailedAndStop">Proxy failed too many times, task stopped</system:String>

View File

@@ -1152,7 +1152,7 @@ C:\\leidian\\LDPlayer9
<system:String x:Key="MedicineUsedTimesWithExpiring" xml:space="preserve">薬: {0},{1}(期限切れ) </system:String>
<system:String x:Key="StoneUsedTimes" xml:space="preserve">石: {0} </system:String>
<system:String x:Key="MedicineUsed">回復剤を使った</system:String>
<system:String x:Key="ExpiringMedicineUsed">48時間以内に期限が切れる回復剤を使った</system:String>
<system:String x:Key="ExpiringMedicineUsed">{0}時間以内に期限が切れる回復剤を使った</system:String>
<system:String x:Key="StoneUsed">源石を使った</system:String>
<system:String x:Key="ActingCommandError">自動指揮のミスが生じました</system:String>
<system:String x:Key="FightMissionFailedAndStop">自動指揮の失敗回数が上限に達したため、任務が停止されました</system:String>

View File

@@ -1153,7 +1153,7 @@ C:\\leidian\\LDPlayer9
<system:String x:Key="MedicineUsedTimesWithExpiring" xml:space="preserve">\n이성 회복제: {0},{1}(만료 예정) </system:String>
<system:String x:Key="StoneUsedTimes" xml:space="preserve">\n순오리지늄: {0} </system:String>
<system:String x:Key="MedicineUsed">이성 회복제를 사용했습니다</system:String>
<system:String x:Key="ExpiringMedicineUsed">48시간 이내 만료되는 이성 회복제를 사용했습니다</system:String>
<system:String x:Key="ExpiringMedicineUsed">{0}시간 이내 만료되는 이성 회복제를 사용했습니다</system:String>
<system:String x:Key="StoneUsed">순오리지늄을 사용했습니다</system:String>
<system:String x:Key="ActingCommandError">대리 지휘 오류 발생</system:String>
<system:String x:Key="FightMissionFailedAndStop">대리 지휘 실패 횟수 초과로 작업을 중단합니다</system:String>

View File

@@ -1152,7 +1152,7 @@ C:\\leidian\\LDPlayer9。\n
<system:String x:Key="MedicineUsedTimesWithExpiring" xml:space="preserve">药: {0},{1}(临期) </system:String>
<system:String x:Key="StoneUsedTimes" xml:space="preserve">石: {0} </system:String>
<system:String x:Key="MedicineUsed">已使用理智药</system:String>
<system:String x:Key="ExpiringMedicineUsed">已使用 {0} 内过期理智药</system:String>
<system:String x:Key="ExpiringMedicineUsed">已使用 {0} H内过期理智药</system:String>
<system:String x:Key="StoneUsed">已使用源石</system:String>
<system:String x:Key="ActingCommandError">代理指挥失误</system:String>
<system:String x:Key="FightMissionFailedAndStop">代理失败次数已达上限,任务已停止</system:String>

View File

@@ -1152,7 +1152,7 @@ C:\\leidian\\LDPlayer9\n
<system:String x:Key="MedicineUsedTimesWithExpiring" xml:space="preserve">藥: {0}{1} (即將過期) </system:String>
<system:String x:Key="StoneUsedTimes" xml:space="preserve">石: {0} </system:String>
<system:String x:Key="MedicineUsed">已使用理智藥</system:String>
<system:String x:Key="ExpiringMedicineUsed">已使用 48 小時內過期的理智藥</system:String>
<system:String x:Key="ExpiringMedicineUsed">已使用 {0} 小時內過期的理智藥</system:String>
<system:String x:Key="StoneUsed">已使用源石</system:String>
<system:String x:Key="ActingCommandError">代理指揮失誤</system:String>
<system:String x:Key="FightMissionFailedAndStop">代理失敗次數已達上限,任務已停止</system:String>