From c8b051da2f30dc68d6c38341fd9263ac06470fd2 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:45:18 +0100 Subject: [PATCH 1/8] Changed the quest progress reset logic again --- .../Types/Extensions/QuestDataExtensions.cs | 57 +++++++++++++++++++ .../Types/Mocks/QuestDataMock.cs | 26 +++++++++ .../Types/Quests/IQuestData.cs | 24 ++++++++ ElectronicObserver/Data/Quest/ProgressData.cs | 18 ++++-- ElectronicObserver/Data/QuestData.cs | 53 +---------------- ElectronicObserver/Data/QuestManager.cs | 2 +- .../QuestTrackerManager/Models/QuestModel.cs | 3 +- .../Window/Wpf/Quest/QuestViewModel.cs | 2 +- 8 files changed, 125 insertions(+), 60 deletions(-) create mode 100644 ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs create mode 100644 ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs create mode 100644 ElectronicObserver.Core/Types/Quests/IQuestData.cs diff --git a/ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs b/ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs new file mode 100644 index 000000000..14aa5e22d --- /dev/null +++ b/ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using ElectronicObserver.Core.Types.Quests; +using ElectronicObserver.Core.Types.Serialization.Quests; + +namespace ElectronicObserver.Core.Types.Extensions; + +public static class QuestDataExtensions +{ + public static QuestResetType GetProgressResetType(this IQuestData quest, Dictionary questsMetadata) + { + if (questsMetadata.TryGetValue(quest.QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType) + { + return resetType; + } + + return quest.Type switch + { + 1 => QuestResetType.Daily, + 2 => QuestResetType.Weekly, + 3 => QuestResetType.Monthly, + 4 => QuestResetType.Never, + 5 => quest.LabelType switch + { + // 2, 3, 6 should never happen + 2 => QuestResetType.Daily, + 3 => QuestResetType.Weekly, + 6 => QuestResetType.Monthly, + 7 => quest.QuestID switch + { + // BD4 - 3 carriers + 211 => QuestResetType.Daily, + // BD6 - 5 transports + 212 => QuestResetType.Daily, + + // this will be incorrect if they add any new odd daily quests + _ => QuestResetType.Quarterly + }, + 101 => QuestResetType.January, + 102 => QuestResetType.February, + 103 => QuestResetType.March, + 104 => QuestResetType.April, + 105 => QuestResetType.May, + 106 => QuestResetType.June, + 107 => QuestResetType.July, + 108 => QuestResetType.August, + 109 => QuestResetType.September, + 110 => QuestResetType.October, + 111 => QuestResetType.November, + 112 => QuestResetType.December, + + _ => QuestResetType.Unknown + }, + + _ => QuestResetType.Unknown + }; + } +} diff --git a/ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs b/ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs new file mode 100644 index 000000000..87b1a2aaf --- /dev/null +++ b/ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs @@ -0,0 +1,26 @@ +using ElectronicObserver.Core.Types.Quests; + +namespace ElectronicObserver.Core.Types.Mocks; + +/// +/// 任務のデータを保持します。 +/// +public class QuestDataMock : IQuestData +{ + /// + /// 任務ID + /// + public int QuestID { get; set; } + + /// + /// 任務出現タイプ + /// 1=デイリー, 2=ウィークリー, 3=マンスリー, 4=単発, 5=他 + /// + public int Type { get; set; } + + /// + /// 周期アイコン種別 + /// 1=単発, 2=デイリー, 3=ウィークリー, 6=マンスリー, 7=他(輸送5と空母3,クォータリー), 100+x=イヤーリー(x月-) + /// + public int LabelType { get; set; } +} diff --git a/ElectronicObserver.Core/Types/Quests/IQuestData.cs b/ElectronicObserver.Core/Types/Quests/IQuestData.cs new file mode 100644 index 000000000..25d0eed78 --- /dev/null +++ b/ElectronicObserver.Core/Types/Quests/IQuestData.cs @@ -0,0 +1,24 @@ +namespace ElectronicObserver.Core.Types.Quests; + +/// +/// 任務のデータを保持します。 +/// +public interface IQuestData +{ + /// + /// 任務ID + /// + public int QuestID { get; } + + /// + /// 任務出現タイプ + /// 1=デイリー, 2=ウィークリー, 3=マンスリー, 4=単発, 5=他 + /// + public int Type { get; } + + /// + /// 周期アイコン種別 + /// 1=単発, 2=デイリー, 3=ウィークリー, 6=マンスリー, 7=他(輸送5と空母3,クォータリー), 100+x=イヤーリー(x月-) + /// + public int LabelType { get; } +} diff --git a/ElectronicObserver/Data/Quest/ProgressData.cs b/ElectronicObserver/Data/Quest/ProgressData.cs index 5cc734412..7ea120f5e 100644 --- a/ElectronicObserver/Data/Quest/ProgressData.cs +++ b/ElectronicObserver/Data/Quest/ProgressData.cs @@ -1,6 +1,8 @@ using System; using System.Runtime.Serialization; +using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Core.Types.Data; +using ElectronicObserver.Core.Types.Mocks; using ElectronicObserver.Core.Types.Quests; namespace ElectronicObserver.Data.Quest; @@ -37,8 +39,6 @@ public abstract class ProgressData : IIdentifiable [DataMember] public int QuestType { get; protected set; } - public QuestResetType QuestResetType => (QuestResetType)QuestType; - /// /// 未ロード時の進捗 /// @@ -198,11 +198,19 @@ public virtual void ApplyTemporaryProgress(QuestData q) } } - public QuestResetType GetProgressResetType() => TryGetQuest()?.GetProgressResetType() ?? QuestResetType.Unknown; + public QuestResetType GetProgressResetType() => GetQuest().GetProgressResetType(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList); - private QuestData? TryGetQuest() + private IQuestData GetQuest() { - if (!KCDatabase.Instance.Quest.Quests.ContainsKey(QuestID)) return null; + if (!KCDatabase.Instance.Quest.Quests.ContainsKey(QuestID)) + { + return new QuestDataMock() + { + QuestID = QuestID, + Type = QuestType >= 100 ? 5 : QuestType, + LabelType = QuestType >= 100 ? QuestType : 0, + }; + } return KCDatabase.Instance.Quest[QuestID]; } diff --git a/ElectronicObserver/Data/QuestData.cs b/ElectronicObserver/Data/QuestData.cs index 9e44eee58..b9310f87b 100644 --- a/ElectronicObserver/Data/QuestData.cs +++ b/ElectronicObserver/Data/QuestData.cs @@ -9,7 +9,7 @@ namespace ElectronicObserver.Data; /// /// 任務のデータを保持します。 /// -public class QuestData : ResponseWrapper, IIdentifiable +public class QuestData : ResponseWrapper, IIdentifiable, IQuestData { /// @@ -89,57 +89,6 @@ public int State /// public int Progress => (int)RawData.api_progress_flag; - public QuestResetType GetProgressResetType() - { - Dictionary questsMetadata = KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList; - - if (questsMetadata.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType) - { - return resetType; - } - - return Type switch - { - 1 => QuestResetType.Daily, - 2 => QuestResetType.Weekly, - 3 => QuestResetType.Monthly, - 4 => QuestResetType.Never, - 5 => LabelType switch - { - // 2, 3, 6 should never happen - 2 => QuestResetType.Daily, - 3 => QuestResetType.Weekly, - 6 => QuestResetType.Monthly, - 7 => ID switch - { - // BD4 - 3 carriers - 211 => QuestResetType.Daily, - // BD6 - 5 transports - 212 => QuestResetType.Daily, - - // this will be incorrect if they add any new odd daily quests - _ => QuestResetType.Quarterly - }, - 101 => QuestResetType.January, - 102 => QuestResetType.February, - 103 => QuestResetType.March, - 104 => QuestResetType.April, - 105 => QuestResetType.May, - 106 => QuestResetType.June, - 107 => QuestResetType.July, - 108 => QuestResetType.August, - 109 => QuestResetType.September, - 110 => QuestResetType.October, - 111 => QuestResetType.November, - 112 => QuestResetType.December, - - _ => QuestResetType.Unknown - }, - - _ => QuestResetType.Unknown - }; - } - public DateTime? GetEndDateTime() { if (KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.EndTime is { } endTime) diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index f153b16d1..c92a3ad85 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using ElectronicObserver.Core; using ElectronicObserver.Core.Types.Data; using ElectronicObserver.Core.Types.Extensions; @@ -53,7 +54,6 @@ public override void LoadFromResponse(string apiname, dynamic data) var progress = KCDatabase.Instance.QuestProgress; - //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) { diff --git a/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs b/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs index 6bc1a1f91..c792d5278 100644 --- a/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs +++ b/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs @@ -1,4 +1,5 @@ using ElectronicObserver.Core.Types.Quests; +using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Data; using ElectronicObserver.Window.Dialog.QuestTrackerManager.Enums; using MessagePack; @@ -14,7 +15,7 @@ public record QuestModel([property: Key(0)] int Id) [IgnoreMember] public QuestCategory Category => (QuestCategory)(TryGetQuest()?.Category ?? 0); [IgnoreMember] public int State => TryGetQuest()?.State ?? 0; [IgnoreMember] - public QuestResetType ResetType => TryGetQuest()?.GetProgressResetType() ?? QuestResetType.Unknown; + public QuestResetType ResetType => TryGetQuest()?.GetProgressResetType(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList) ?? QuestResetType.Unknown; [IgnoreMember] public string Display => $"{Code}: {Name} (ID: {Id})"; diff --git a/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs b/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs index 3b02b17d4..f0b8f7d4c 100644 --- a/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs +++ b/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs @@ -422,7 +422,7 @@ private void Updated() row.QuestView_NameToolTipExtra = ""; - if (q.Type != 1 && q.GetProgressResetType() is QuestResetType.Daily) + if (q.Type != 1 && q.GetProgressResetType(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList) is QuestResetType.Daily) { row.QuestView_NameToolTipExtra += $"{FormQuest.QuestView_ProgressResetsDaily}"; } From e2539ddb754911d6c324d7e0f91d4fd033f957b6 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:46:47 +0100 Subject: [PATCH 2/8] using --- ElectronicObserver/Data/QuestManager.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index c92a3ad85..0f22d890b 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Linq; using ElectronicObserver.Core; using ElectronicObserver.Core.Types.Data; -using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Core.Types.Quests; namespace ElectronicObserver.Data; From f6076e2b92fb108799f35aef2c1e60444b239b05 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Thu, 19 Feb 2026 17:45:21 +0100 Subject: [PATCH 3/8] Revert "using" This reverts commit e2539ddb754911d6c324d7e0f91d4fd033f957b6. --- ElectronicObserver/Data/QuestManager.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index 0f22d890b..c92a3ad85 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Linq; using ElectronicObserver.Core; using ElectronicObserver.Core.Types.Data; +using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Core.Types.Quests; namespace ElectronicObserver.Data; From a1fe1069eb064d260fd1e0f558424de982dd5b11 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Thu, 19 Feb 2026 17:45:27 +0100 Subject: [PATCH 4/8] Revert "Changed the quest progress reset logic again" This reverts commit c8b051da2f30dc68d6c38341fd9263ac06470fd2. --- .../Types/Extensions/QuestDataExtensions.cs | 57 ------------------- .../Types/Mocks/QuestDataMock.cs | 26 --------- .../Types/Quests/IQuestData.cs | 24 -------- ElectronicObserver/Data/Quest/ProgressData.cs | 18 ++---- ElectronicObserver/Data/QuestData.cs | 53 ++++++++++++++++- ElectronicObserver/Data/QuestManager.cs | 2 +- .../QuestTrackerManager/Models/QuestModel.cs | 3 +- .../Window/Wpf/Quest/QuestViewModel.cs | 2 +- 8 files changed, 60 insertions(+), 125 deletions(-) delete mode 100644 ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs delete mode 100644 ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs delete mode 100644 ElectronicObserver.Core/Types/Quests/IQuestData.cs diff --git a/ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs b/ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs deleted file mode 100644 index 14aa5e22d..000000000 --- a/ElectronicObserver.Core/Types/Extensions/QuestDataExtensions.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Collections.Generic; -using ElectronicObserver.Core.Types.Quests; -using ElectronicObserver.Core.Types.Serialization.Quests; - -namespace ElectronicObserver.Core.Types.Extensions; - -public static class QuestDataExtensions -{ - public static QuestResetType GetProgressResetType(this IQuestData quest, Dictionary questsMetadata) - { - if (questsMetadata.TryGetValue(quest.QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType) - { - return resetType; - } - - return quest.Type switch - { - 1 => QuestResetType.Daily, - 2 => QuestResetType.Weekly, - 3 => QuestResetType.Monthly, - 4 => QuestResetType.Never, - 5 => quest.LabelType switch - { - // 2, 3, 6 should never happen - 2 => QuestResetType.Daily, - 3 => QuestResetType.Weekly, - 6 => QuestResetType.Monthly, - 7 => quest.QuestID switch - { - // BD4 - 3 carriers - 211 => QuestResetType.Daily, - // BD6 - 5 transports - 212 => QuestResetType.Daily, - - // this will be incorrect if they add any new odd daily quests - _ => QuestResetType.Quarterly - }, - 101 => QuestResetType.January, - 102 => QuestResetType.February, - 103 => QuestResetType.March, - 104 => QuestResetType.April, - 105 => QuestResetType.May, - 106 => QuestResetType.June, - 107 => QuestResetType.July, - 108 => QuestResetType.August, - 109 => QuestResetType.September, - 110 => QuestResetType.October, - 111 => QuestResetType.November, - 112 => QuestResetType.December, - - _ => QuestResetType.Unknown - }, - - _ => QuestResetType.Unknown - }; - } -} diff --git a/ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs b/ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs deleted file mode 100644 index 87b1a2aaf..000000000 --- a/ElectronicObserver.Core/Types/Mocks/QuestDataMock.cs +++ /dev/null @@ -1,26 +0,0 @@ -using ElectronicObserver.Core.Types.Quests; - -namespace ElectronicObserver.Core.Types.Mocks; - -/// -/// 任務のデータを保持します。 -/// -public class QuestDataMock : IQuestData -{ - /// - /// 任務ID - /// - public int QuestID { get; set; } - - /// - /// 任務出現タイプ - /// 1=デイリー, 2=ウィークリー, 3=マンスリー, 4=単発, 5=他 - /// - public int Type { get; set; } - - /// - /// 周期アイコン種別 - /// 1=単発, 2=デイリー, 3=ウィークリー, 6=マンスリー, 7=他(輸送5と空母3,クォータリー), 100+x=イヤーリー(x月-) - /// - public int LabelType { get; set; } -} diff --git a/ElectronicObserver.Core/Types/Quests/IQuestData.cs b/ElectronicObserver.Core/Types/Quests/IQuestData.cs deleted file mode 100644 index 25d0eed78..000000000 --- a/ElectronicObserver.Core/Types/Quests/IQuestData.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace ElectronicObserver.Core.Types.Quests; - -/// -/// 任務のデータを保持します。 -/// -public interface IQuestData -{ - /// - /// 任務ID - /// - public int QuestID { get; } - - /// - /// 任務出現タイプ - /// 1=デイリー, 2=ウィークリー, 3=マンスリー, 4=単発, 5=他 - /// - public int Type { get; } - - /// - /// 周期アイコン種別 - /// 1=単発, 2=デイリー, 3=ウィークリー, 6=マンスリー, 7=他(輸送5と空母3,クォータリー), 100+x=イヤーリー(x月-) - /// - public int LabelType { get; } -} diff --git a/ElectronicObserver/Data/Quest/ProgressData.cs b/ElectronicObserver/Data/Quest/ProgressData.cs index 7ea120f5e..5cc734412 100644 --- a/ElectronicObserver/Data/Quest/ProgressData.cs +++ b/ElectronicObserver/Data/Quest/ProgressData.cs @@ -1,8 +1,6 @@ using System; using System.Runtime.Serialization; -using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Core.Types.Data; -using ElectronicObserver.Core.Types.Mocks; using ElectronicObserver.Core.Types.Quests; namespace ElectronicObserver.Data.Quest; @@ -39,6 +37,8 @@ public abstract class ProgressData : IIdentifiable [DataMember] public int QuestType { get; protected set; } + public QuestResetType QuestResetType => (QuestResetType)QuestType; + /// /// 未ロード時の進捗 /// @@ -198,19 +198,11 @@ public virtual void ApplyTemporaryProgress(QuestData q) } } - public QuestResetType GetProgressResetType() => GetQuest().GetProgressResetType(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList); + public QuestResetType GetProgressResetType() => TryGetQuest()?.GetProgressResetType() ?? QuestResetType.Unknown; - private IQuestData GetQuest() + private QuestData? TryGetQuest() { - if (!KCDatabase.Instance.Quest.Quests.ContainsKey(QuestID)) - { - return new QuestDataMock() - { - QuestID = QuestID, - Type = QuestType >= 100 ? 5 : QuestType, - LabelType = QuestType >= 100 ? QuestType : 0, - }; - } + if (!KCDatabase.Instance.Quest.Quests.ContainsKey(QuestID)) return null; return KCDatabase.Instance.Quest[QuestID]; } diff --git a/ElectronicObserver/Data/QuestData.cs b/ElectronicObserver/Data/QuestData.cs index b9310f87b..9e44eee58 100644 --- a/ElectronicObserver/Data/QuestData.cs +++ b/ElectronicObserver/Data/QuestData.cs @@ -9,7 +9,7 @@ namespace ElectronicObserver.Data; /// /// 任務のデータを保持します。 /// -public class QuestData : ResponseWrapper, IIdentifiable, IQuestData +public class QuestData : ResponseWrapper, IIdentifiable { /// @@ -89,6 +89,57 @@ public int State /// public int Progress => (int)RawData.api_progress_flag; + public QuestResetType GetProgressResetType() + { + Dictionary questsMetadata = KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList; + + if (questsMetadata.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType) + { + return resetType; + } + + return Type switch + { + 1 => QuestResetType.Daily, + 2 => QuestResetType.Weekly, + 3 => QuestResetType.Monthly, + 4 => QuestResetType.Never, + 5 => LabelType switch + { + // 2, 3, 6 should never happen + 2 => QuestResetType.Daily, + 3 => QuestResetType.Weekly, + 6 => QuestResetType.Monthly, + 7 => ID switch + { + // BD4 - 3 carriers + 211 => QuestResetType.Daily, + // BD6 - 5 transports + 212 => QuestResetType.Daily, + + // this will be incorrect if they add any new odd daily quests + _ => QuestResetType.Quarterly + }, + 101 => QuestResetType.January, + 102 => QuestResetType.February, + 103 => QuestResetType.March, + 104 => QuestResetType.April, + 105 => QuestResetType.May, + 106 => QuestResetType.June, + 107 => QuestResetType.July, + 108 => QuestResetType.August, + 109 => QuestResetType.September, + 110 => QuestResetType.October, + 111 => QuestResetType.November, + 112 => QuestResetType.December, + + _ => QuestResetType.Unknown + }, + + _ => QuestResetType.Unknown + }; + } + public DateTime? GetEndDateTime() { if (KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.EndTime is { } endTime) diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index c92a3ad85..f153b16d1 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using ElectronicObserver.Core; using ElectronicObserver.Core.Types.Data; using ElectronicObserver.Core.Types.Extensions; @@ -54,6 +53,7 @@ public override void LoadFromResponse(string apiname, dynamic data) var progress = KCDatabase.Instance.QuestProgress; + //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) { diff --git a/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs b/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs index c792d5278..6bc1a1f91 100644 --- a/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs +++ b/ElectronicObserver/Window/Dialog/QuestTrackerManager/Models/QuestModel.cs @@ -1,5 +1,4 @@ using ElectronicObserver.Core.Types.Quests; -using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Data; using ElectronicObserver.Window.Dialog.QuestTrackerManager.Enums; using MessagePack; @@ -15,7 +14,7 @@ public record QuestModel([property: Key(0)] int Id) [IgnoreMember] public QuestCategory Category => (QuestCategory)(TryGetQuest()?.Category ?? 0); [IgnoreMember] public int State => TryGetQuest()?.State ?? 0; [IgnoreMember] - public QuestResetType ResetType => TryGetQuest()?.GetProgressResetType(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList) ?? QuestResetType.Unknown; + public QuestResetType ResetType => TryGetQuest()?.GetProgressResetType() ?? QuestResetType.Unknown; [IgnoreMember] public string Display => $"{Code}: {Name} (ID: {Id})"; diff --git a/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs b/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs index f0b8f7d4c..3b02b17d4 100644 --- a/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs +++ b/ElectronicObserver/Window/Wpf/Quest/QuestViewModel.cs @@ -422,7 +422,7 @@ private void Updated() row.QuestView_NameToolTipExtra = ""; - if (q.Type != 1 && q.GetProgressResetType(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList) is QuestResetType.Daily) + if (q.Type != 1 && q.GetProgressResetType() is QuestResetType.Daily) { row.QuestView_NameToolTipExtra += $"{FormQuest.QuestView_ProgressResetsDaily}"; } From ab4dcc05de05738861d358ec4289159292fe627f Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Thu, 19 Feb 2026 17:56:43 +0100 Subject: [PATCH 5/8] New logic --- ElectronicObserver/Data/Quest/ProgressData.cs | 19 ++++++++++++++----- ElectronicObserver/Data/QuestManager.cs | 1 - 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ElectronicObserver/Data/Quest/ProgressData.cs b/ElectronicObserver/Data/Quest/ProgressData.cs index 5cc734412..dfb71f952 100644 --- a/ElectronicObserver/Data/Quest/ProgressData.cs +++ b/ElectronicObserver/Data/Quest/ProgressData.cs @@ -1,7 +1,9 @@ using System; +using System.Collections.Generic; using System.Runtime.Serialization; using ElectronicObserver.Core.Types.Data; using ElectronicObserver.Core.Types.Quests; +using ElectronicObserver.Core.Types.Serialization.Quests; namespace ElectronicObserver.Data.Quest; @@ -198,13 +200,20 @@ public virtual void ApplyTemporaryProgress(QuestData q) } } - public QuestResetType GetProgressResetType() => TryGetQuest()?.GetProgressResetType() ?? QuestResetType.Unknown; - - private QuestData? TryGetQuest() + public QuestResetType GetProgressResetType() { - if (!KCDatabase.Instance.Quest.Quests.ContainsKey(QuestID)) return null; + // Quests that are not daily but only appear on some days : + if (QuestID is 211 or 212) // 空母3 or 輸送5 + return QuestResetType.Daily; + + Dictionary questsMetadata = KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList; + + if (questsMetadata.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType) + { + return resetType; + } - return KCDatabase.Instance.Quest[QuestID]; + return QuestResetType; } /// diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index f153b16d1..919ce4987 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -53,7 +53,6 @@ public override void LoadFromResponse(string apiname, dynamic data) var progress = KCDatabase.Instance.QuestProgress; - //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) { From 16077038ecc842b0b2eba9ae736846e5faea79f5 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Thu, 19 Feb 2026 17:58:27 +0100 Subject: [PATCH 6/8] usings --- ElectronicObserver/Data/QuestManager.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index 919ce4987..0f22d890b 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using ElectronicObserver.Core; using ElectronicObserver.Core.Types.Data; -using ElectronicObserver.Core.Types.Extensions; using ElectronicObserver.Core.Types.Quests; namespace ElectronicObserver.Data; From 928432536c6b224adbb6e422a552daa4c578bd04 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Thu, 19 Feb 2026 18:04:11 +0100 Subject: [PATCH 7/8] fix --- ElectronicObserver/Data/Quest/ProgressData.cs | 21 ++++++++++++++----- ElectronicObserver/Data/QuestManager.cs | 7 +++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/ElectronicObserver/Data/Quest/ProgressData.cs b/ElectronicObserver/Data/Quest/ProgressData.cs index dfb71f952..2682af896 100644 --- a/ElectronicObserver/Data/Quest/ProgressData.cs +++ b/ElectronicObserver/Data/Quest/ProgressData.cs @@ -202,10 +202,6 @@ public virtual void ApplyTemporaryProgress(QuestData q) public QuestResetType GetProgressResetType() { - // Quests that are not daily but only appear on some days : - if (QuestID is 211 or 212) // 空母3 or 輸送5 - return QuestResetType.Daily; - Dictionary questsMetadata = KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList; if (questsMetadata.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType) @@ -213,7 +209,22 @@ public QuestResetType GetProgressResetType() return resetType; } - return QuestResetType; + return QuestID switch + { + // Quests that are not daily but only appear on some days : + 211 or 212 => QuestResetType.Daily, // 空母3 or 輸送5 + + // Some PVP quests + 311 or + 330 or + 337 or + 339 or + 341 or + 342 or + 348 => QuestResetType.Daily, + + _ => QuestResetType, + }; } /// diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index 0f22d890b..7960d18e0 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -52,6 +52,13 @@ public override void LoadFromResponse(string apiname, dynamic data) var progress = KCDatabase.Instance.QuestProgress; + Dictionary resetTypes = new Dictionary(); + + foreach (var p in progress.Progresses) + { + + } + //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) { From d425cdcd4e3096d6b8c39226bc6a7fee237f12a3 Mon Sep 17 00:00:00 2001 From: Jebzou <22751386+Jebzou@users.noreply.github.com> Date: Thu, 19 Feb 2026 18:05:46 +0100 Subject: [PATCH 8/8] oops --- ElectronicObserver/Data/QuestManager.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index 7960d18e0..0f22d890b 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -52,13 +52,6 @@ public override void LoadFromResponse(string apiname, dynamic data) var progress = KCDatabase.Instance.QuestProgress; - Dictionary resetTypes = new Dictionary(); - - foreach (var p in progress.Progresses) - { - - } - //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) {