From 0b1b2d38c7528d3a3a2808851a490f58867094b0 Mon Sep 17 00:00:00 2001 From: alydev Date: Sun, 1 Mar 2026 00:29:23 +1000 Subject: [PATCH] muffin v7.4.15 --- ...uestionable.FatePaths.FateDefinitionSchema | 9 + .../AssemblyQuestLoader.cs | 33 +- .../ActionConverter.cs | 4 + .../Questionable.Model.Questing/EAction.cs | 1 + .../FateDefinition.cs | 4 + .../FateAction.cs | 2 +- .../FateFarming.cs | 67 +- .../Interact.cs | 16 +- .../Questionable.Controller/FateController.cs | 15 +- .../Questionable.Data/ChangelogData.cs | 1995 +++++++++-------- .../Questionable.Functions/GameFunctions.cs | 26 +- .../ActiveQuestComponent.cs | 41 +- .../FateSelectionWindow.cs | 57 +- .../Questionable.Windows/QuestWindow.cs | 2 + 14 files changed, 1215 insertions(+), 1057 deletions(-) diff --git a/FatePaths/Questionable.FatePaths.FateDefinitionSchema b/FatePaths/Questionable.FatePaths.FateDefinitionSchema index 46be76b..c8cef80 100644 --- a/FatePaths/Questionable.FatePaths.FateDefinitionSchema +++ b/FatePaths/Questionable.FatePaths.FateDefinitionSchema @@ -52,6 +52,11 @@ }, "minItems": 1 }, + "RequiredQuestId": { + "description": "Quest ID that must be completed before this FATE can be farmed", + "type": "integer", + "minimum": 1 + }, "RequiredStatusId": { "description": "Status effect required to participate in the FATE", "type": "string" @@ -65,6 +70,10 @@ "description": "Position of the transform NPC", "$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-vector3.json" }, + "StopAction": { + "description": "Action to use when stopping FATE farming (e.g. to remove a transformation debuff). Only used if the player has RequiredStatusId.", + "type": "string" + }, "EventExpiry": { "description": "If this is a seasonal/event FATE, the date and time (in UTC) when it is no longer available. Date-only values are treated as ending at daily reset (14:59:59 UTC).", "format": "date-time", diff --git a/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs b/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs index 73a6925..c3c50a5 100644 --- a/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs +++ b/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs @@ -478824,10 +478824,7 @@ public static class AssemblyQuestLoader reference212 = obj228; index2++; ref QuestStep reference213 = ref span297[index2]; - QuestStep obj229 = new QuestStep(EInteractionType.FateAction, null, new Vector3(-38.322124f, 3.9999998f, -144.23155f), 130) - { - Comment = "Use correct Cheer Rhythm color on each randomly-appearing performer NPC" - }; + QuestStep questStep20 = new QuestStep(EInteractionType.FateAction, null, new Vector3(-38.322124f, 3.9999998f, -144.23155f), 130); index3 = 4; List list299 = new List(index3); CollectionsMarshal.SetCount(list299, index3); @@ -478856,13 +478853,13 @@ public static class AssemblyQuestLoader DataId = 18859u, Action = EAction.CheerRhythmRed }; - obj229.FateActionTargets = list299; - reference213 = obj229; + questStep20.FateActionTargets = list299; + reference213 = questStep20; obj227.Steps = list297; reference211 = obj227; num++; ref QuestSequence reference214 = ref span287[num]; - QuestSequence obj230 = new QuestSequence + QuestSequence obj229 = new QuestSequence { Sequence = byte.MaxValue }; @@ -478875,8 +478872,8 @@ public static class AssemblyQuestLoader { NextQuestId = new QuestId(5445) }; - obj230.Steps = list300; - reference214 = obj230; + obj229.Steps = list300; + reference214 = obj229; questRoot25.QuestSequence = list287; AddQuest(questId25, questRoot25); QuestId questId26 = new QuestId(5445); @@ -478896,7 +478893,7 @@ public static class AssemblyQuestLoader Span span302 = CollectionsMarshal.AsSpan(list302); num = 0; ref QuestSequence reference215 = ref span302[num]; - QuestSequence obj231 = new QuestSequence + QuestSequence obj230 = new QuestSequence { Sequence = 0 }; @@ -478916,11 +478913,11 @@ public static class AssemblyQuestLoader } } }; - obj231.Steps = list303; - reference215 = obj231; + obj230.Steps = list303; + reference215 = obj230; num++; ref QuestSequence reference216 = ref span302[num]; - QuestSequence obj232 = new QuestSequence + QuestSequence obj231 = new QuestSequence { Sequence = 1 }; @@ -478930,11 +478927,11 @@ public static class AssemblyQuestLoader Span span304 = CollectionsMarshal.AsSpan(list304); num2 = 0; span304[num2] = new QuestStep(EInteractionType.Interact, 1056476u, new Vector3(-35.1416f, 5.000001f, -130.38837f), 130); - obj232.Steps = list304; - reference216 = obj232; + obj231.Steps = list304; + reference216 = obj231; num++; ref QuestSequence reference217 = ref span302[num]; - QuestSequence obj233 = new QuestSequence + QuestSequence obj232 = new QuestSequence { Sequence = byte.MaxValue }; @@ -478944,8 +478941,8 @@ public static class AssemblyQuestLoader Span span305 = CollectionsMarshal.AsSpan(list305); index2 = 0; span305[index2] = new QuestStep(EInteractionType.CompleteQuest, 1056476u, new Vector3(-35.1416f, 5.000001f, -130.38837f), 130); - obj233.Steps = list305; - reference217 = obj233; + obj232.Steps = list305; + reference217 = obj232; questRoot26.QuestSequence = list302; AddQuest(questId26, questRoot26); } diff --git a/Questionable.Model/Questionable.Model.Questing.Converter/ActionConverter.cs b/Questionable.Model/Questionable.Model.Questing.Converter/ActionConverter.cs index d6da800..c3d4719 100644 --- a/Questionable.Model/Questionable.Model.Questing.Converter/ActionConverter.cs +++ b/Questionable.Model/Questionable.Model.Questing.Converter/ActionConverter.cs @@ -218,6 +218,10 @@ public sealed class ActionConverter : EnumConverter { EAction.CheerRhythmYellow, "Cheer Rhythm: Yellow" + }, + { + EAction.CurtainCall, + "Curtain Call" } }; diff --git a/Questionable.Model/Questionable.Model.Questing/EAction.cs b/Questionable.Model/Questionable.Model.Questing/EAction.cs index 7530b90..4ec6c5e 100644 --- a/Questionable.Model/Questionable.Model.Questing/EAction.cs +++ b/Questionable.Model/Questionable.Model.Questing/EAction.cs @@ -66,6 +66,7 @@ public enum EAction CheerRhythmBlue = 44502, CheerRhythmGreen = 44503, CheerRhythmYellow = 44504, + CurtainCall = 11063, Prospect = 227, CollectMiner = 240, LuckOfTheMountaineer = 4081, diff --git a/Questionable.Model/Questionable.Model.Questing/FateDefinition.cs b/Questionable.Model/Questionable.Model.Questing/FateDefinition.cs index e4a3b5e..6ed25f5 100644 --- a/Questionable.Model/Questionable.Model.Questing/FateDefinition.cs +++ b/Questionable.Model/Questionable.Model.Questing/FateDefinition.cs @@ -31,5 +31,9 @@ public sealed class FateDefinition public List? TransformDialogueChoices { get; set; } + public ushort? RequiredQuestId { get; set; } + + public EAction? StopAction { get; set; } + public DateTime? EventExpiry { get; set; } } diff --git a/Questionable/Questionable.Controller.Steps.Interactions/FateAction.cs b/Questionable/Questionable.Controller.Steps.Interactions/FateAction.cs index ff55f3d..dcae0c7 100644 --- a/Questionable/Questionable.Controller.Steps.Interactions/FateAction.cs +++ b/Questionable/Questionable.Controller.Steps.Interactions/FateAction.cs @@ -63,7 +63,7 @@ internal static class FateAction } foreach (FateActionTarget target in base.Task.Targets) { - IGameObject gameObject = gameFunctions.FindObjectByDataId(target.DataId); + IGameObject gameObject = gameFunctions.FindObjectByDataId(target.DataId, null, warnIfMissing: false); if (gameObject != null && gameObject.IsTargetable) { bool flag = gameFunctions.UseAction(gameObject, target.Action); diff --git a/Questionable/Questionable.Controller.Steps.Interactions/FateFarming.cs b/Questionable/Questionable.Controller.Steps.Interactions/FateFarming.cs index 168055a..e250642 100644 --- a/Questionable/Questionable.Controller.Steps.Interactions/FateFarming.cs +++ b/Questionable/Questionable.Controller.Steps.Interactions/FateFarming.cs @@ -21,9 +21,12 @@ internal static class FateFarming { private DateTime _nextPollAt = DateTime.MinValue; + private bool _loggedWaitingForFate; + protected override bool Start() { logger.LogInformation("Waiting for FATE targets to appear ({Count} targets)", base.Task.Targets.Count); + _loggedWaitingForFate = false; return true; } @@ -33,12 +36,24 @@ internal static class FateFarming { return ETaskResult.StillRunning; } + ushort currentFateId = gameFunctions.GetCurrentFateId(); + if (currentFateId == 0) + { + if (!_loggedWaitingForFate) + { + logger.LogInformation("No active FATE yet, waiting for FATE to start before checking targets"); + _loggedWaitingForFate = true; + } + _nextPollAt = DateTime.Now.AddSeconds(1.0); + return ETaskResult.StillRunning; + } + _loggedWaitingForFate = false; foreach (FateActionTarget target in base.Task.Targets) { - IGameObject gameObject = gameFunctions.FindObjectByDataId(target.DataId); + IGameObject gameObject = gameFunctions.FindObjectByDataId(target.DataId, null, warnIfMissing: false); if (gameObject != null && gameObject.IsTargetable) { - logger.LogInformation("FATE target {DataId} is now targetable", target.DataId); + logger.LogInformation("FATE {FateId} active and target {DataId} is targetable", currentFateId, target.DataId); return ETaskResult.TaskComplete; } } @@ -86,7 +101,7 @@ internal static class FateFarming } } - internal sealed record FateActionLoop(IReadOnlyList Targets) : ITask + internal sealed record FateActionLoop(IReadOnlyList Targets, EStatus? RequiredStatusId = null) : ITask { public bool ShouldRedoOnInterrupt() { @@ -103,12 +118,12 @@ internal static class FateFarming { private DateTime _nextActionAt = DateTime.MinValue; - private bool _fateWasActive; + private ushort _trackedFateId; protected override bool Start() { - logger.LogInformation("Starting FATE action loop with {Count} targets", base.Task.Targets.Count); - _fateWasActive = gameFunctions.GetCurrentFateId() != 0; + _trackedFateId = gameFunctions.GetCurrentFateId(); + logger.LogInformation("Starting FATE action loop with {Count} targets, tracking FATE {FateId}", base.Task.Targets.Count, _trackedFateId); return true; } @@ -118,33 +133,31 @@ internal static class FateFarming { return ETaskResult.StillRunning; } - bool flag = gameFunctions.GetCurrentFateId() != 0; - if (_fateWasActive && !flag) + if (base.Task.RequiredStatusId.HasValue && !gameFunctions.HasStatus(base.Task.RequiredStatusId.Value)) { - bool flag2 = false; - foreach (FateActionTarget target in base.Task.Targets) + logger.LogInformation("Required status {StatusId} lost during FATE action loop, ending cycle to re-apply", base.Task.RequiredStatusId.Value); + return ETaskResult.TaskComplete; + } + if (_trackedFateId == 0) + { + _trackedFateId = gameFunctions.GetCurrentFateId(); + if (_trackedFateId != 0) { - IGameObject gameObject = gameFunctions.FindObjectByDataId(target.DataId); - if (gameObject != null && gameObject.IsTargetable) - { - flag2 = true; - break; - } - } - if (!flag2) - { - logger.LogInformation("FATE completed (was active, now inactive, no targetable NPCs)"); - return ETaskResult.TaskComplete; + logger.LogInformation("Now tracking FATE {FateId}", _trackedFateId); } } - _fateWasActive = flag; - foreach (FateActionTarget target2 in base.Task.Targets) + if (_trackedFateId != 0 && !gameFunctions.IsFateStillActive(_trackedFateId)) { - IGameObject gameObject2 = gameFunctions.FindObjectByDataId(target2.DataId); - if (gameObject2 != null && gameObject2.IsTargetable) + logger.LogInformation("FATE {FateId} is no longer running, cycle complete", _trackedFateId); + return ETaskResult.TaskComplete; + } + foreach (FateActionTarget target in base.Task.Targets) + { + IGameObject gameObject = gameFunctions.FindObjectByDataId(target.DataId, null, warnIfMissing: false); + if (gameObject != null && gameObject.IsTargetable) { - bool flag3 = gameFunctions.UseAction(gameObject2, target2.Action); - _nextActionAt = (flag3 ? DateTime.Now.AddSeconds(2.5) : DateTime.Now.AddSeconds(0.5)); + bool flag = gameFunctions.UseAction(gameObject, target.Action); + _nextActionAt = (flag ? DateTime.Now.AddSeconds(2.5) : DateTime.Now.AddSeconds(0.5)); return ETaskResult.StillRunning; } } diff --git a/Questionable/Questionable.Controller.Steps.Interactions/Interact.cs b/Questionable/Questionable.Controller.Steps.Interactions/Interact.cs index 4fbd768..88708e8 100644 --- a/Questionable/Questionable.Controller.Steps.Interactions/Interact.cs +++ b/Questionable/Questionable.Controller.Steps.Interactions/Interact.cs @@ -107,13 +107,13 @@ internal static class Interact public SkipStepConditions? SkipConditions { get; init; } - public EStatus? RequiredStatusId { get; init; } + public EStatus? CompletionStatusId { get; init; } public List CompletionQuestVariablesFlags { get; } public bool HasCompletionQuestVariablesFlags { get; } - public Task(uint DataId, Quest? Quest, EInteractionType InteractionType, bool SkipMarkerCheck = false, uint? PickUpItemId = null, byte? TaxiStandId = null, SkipStepConditions? SkipConditions = null, List? CompletionQuestVariablesFlags = null, EStatus? RequiredStatusId = null) + public Task(uint DataId, Quest? Quest, EInteractionType InteractionType, bool SkipMarkerCheck = false, uint? PickUpItemId = null, byte? TaxiStandId = null, SkipStepConditions? SkipConditions = null, List? CompletionQuestVariablesFlags = null, EStatus? CompletionStatusId = null) { this.DataId = DataId; this.Quest = Quest; @@ -122,7 +122,7 @@ internal static class Interact this.PickUpItemId = PickUpItemId; this.TaxiStandId = TaxiStandId; this.SkipConditions = SkipConditions; - this.RequiredStatusId = RequiredStatusId; + this.CompletionStatusId = CompletionStatusId; this.CompletionQuestVariablesFlags = CompletionQuestVariablesFlags ?? new List(); HasCompletionQuestVariablesFlags = Quest != null && CompletionQuestVariablesFlags != null && QuestWorkUtils.HasCompletionFlags(CompletionQuestVariablesFlags); base._002Ector(); @@ -139,7 +139,7 @@ internal static class Interact } [CompilerGenerated] - public void Deconstruct(out uint DataId, out Quest? Quest, out EInteractionType InteractionType, out bool SkipMarkerCheck, out uint? PickUpItemId, out byte? TaxiStandId, out SkipStepConditions? SkipConditions, out List? CompletionQuestVariablesFlags, out EStatus? RequiredStatusId) + public void Deconstruct(out uint DataId, out Quest? Quest, out EInteractionType InteractionType, out bool SkipMarkerCheck, out uint? PickUpItemId, out byte? TaxiStandId, out SkipStepConditions? SkipConditions, out List? CompletionQuestVariablesFlags, out EStatus? CompletionStatusId) { DataId = this.DataId; Quest = this.Quest; @@ -149,7 +149,7 @@ internal static class Interact TaxiStandId = this.TaxiStandId; SkipConditions = this.SkipConditions; CompletionQuestVariablesFlags = this.CompletionQuestVariablesFlags; - RequiredStatusId = this.RequiredStatusId; + CompletionStatusId = this.CompletionStatusId; } } @@ -228,10 +228,10 @@ internal static class Interact } _needsUnmount = false; } - EStatus? requiredStatusId = base.Task.RequiredStatusId; - if (requiredStatusId.HasValue) + EStatus? completionStatusId = base.Task.CompletionStatusId; + if (completionStatusId.HasValue) { - EStatus valueOrDefault = requiredStatusId.GetValueOrDefault(); + EStatus valueOrDefault = completionStatusId.GetValueOrDefault(); if (gameFunctions.HasStatus(valueOrDefault)) { return ETaskResult.TaskComplete; diff --git a/Questionable/Questionable.Controller/FateController.cs b/Questionable/Questionable.Controller/FateController.cs index 2bb30a3..d8c1d42 100644 --- a/Questionable/Questionable.Controller/FateController.cs +++ b/Questionable/Questionable.Controller/FateController.cs @@ -102,16 +102,12 @@ internal sealed class FateController : MiniTaskController } if (_currentFate.RequiredStatusId.HasValue && _currentFate.TransformNpcDataId.HasValue && _currentFate.TransformNpcPosition.HasValue && !_gameFunctions.HasStatus(_currentFate.RequiredStatusId.Value)) { - ILogger logger = _logger; - object[] array = new object[1]; - EStatus? requiredStatusId = _currentFate.RequiredStatusId; - array[0] = requiredStatusId.Value; - logger.LogInformation("Player missing required status {StatusId}, enqueuing transform", array); + _logger.LogInformation("Player missing required status {StatusId}, enqueuing transform", _currentFate.RequiredStatusId.Value); _taskQueue.Enqueue(new MoveTask(_currentFate.TerritoryId, _currentFate.TransformNpcPosition.Value, null, 3f)); _taskQueue.Enqueue(new Mount.UnmountTask()); TaskQueue taskQueue = _taskQueue; uint value = _currentFate.TransformNpcDataId.Value; - requiredStatusId = _currentFate.RequiredStatusId.Value; + EStatus? requiredStatusId = _currentFate.RequiredStatusId; taskQueue.Enqueue(new Interact.Task(value, null, EInteractionType.Interact, SkipMarkerCheck: true, null, null, null, null, requiredStatusId)); _taskQueue.Enqueue(new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2L))); } @@ -119,7 +115,7 @@ internal sealed class FateController : MiniTaskController _taskQueue.Enqueue(new Mount.UnmountTask()); _taskQueue.Enqueue(new FateFarming.WaitForFateTargets(_currentFate.Targets)); _taskQueue.Enqueue(new FateFarming.SyncFateLevel()); - _taskQueue.Enqueue(new FateFarming.FateActionLoop(_currentFate.Targets)); + _taskQueue.Enqueue(new FateFarming.FateActionLoop(_currentFate.Targets, _currentFate.RequiredStatusId)); _taskQueue.Enqueue(new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(3L))); } } @@ -129,6 +125,11 @@ internal sealed class FateController : MiniTaskController if (_currentFate != null) { _logger.LogInformation("Stopping FATE farming: {Label} (completed {Cycles} cycles)", label, _completedCycles); + if (_currentFate.StopAction.HasValue && _currentFate.RequiredStatusId.HasValue && _gameFunctions.HasStatus(_currentFate.RequiredStatusId.Value)) + { + _logger.LogInformation("Using stop action {Action} to remove transformation", _currentFate.StopAction.Value); + _gameFunctions.UseAction(_currentFate.StopAction.Value); + } _currentFate = null; _completedCycles = 0; _cycleLimit = null; diff --git a/Questionable/Questionable.Data/ChangelogData.cs b/Questionable/Questionable.Data/ChangelogData.cs index b9f105a..6620d89 100644 --- a/Questionable/Questionable.Data/ChangelogData.cs +++ b/Questionable/Questionable.Data/ChangelogData.cs @@ -11,331 +11,335 @@ internal static class ChangelogData static ChangelogData() { - int num = 58; + int num = 60; List list = new List(num); CollectionsMarshal.SetCount(list, num); Span span = CollectionsMarshal.AsSpan(list); int num2 = 0; ref ChangelogEntry reference = ref span[num2]; - DateOnly releaseDate = new DateOnly(2026, 2, 27); + DateOnly releaseDate = new DateOnly(2026, 2, 28); int num3 = 1; List list2 = new List(num3); CollectionsMarshal.SetCount(list2, num3); Span span2 = CollectionsMarshal.AsSpan(list2); int index = 0; ref ChangeEntry reference2 = ref span2[index]; - int num4 = 1; + int num4 = 2; List list3 = new List(num4); CollectionsMarshal.SetCount(list3, num4); Span span3 = CollectionsMarshal.AsSpan(list3); - int index2 = 0; - span3[index2] = "Fixed an issue where FATE actions were not performed during the Little Ladies Day (2026) FATE event"; + int num5 = 0; + span3[num5] = "Fix FATE transform interact task never completing after NPC dialogue"; + num5++; + span3[num5] = "Fix FATE farming loop not detecting completion when NPCs persist after FATE ends"; reference2 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list3); - reference = new ChangelogEntry("7.4.13", releaseDate, list2); + reference = new ChangelogEntry("7.4.15", releaseDate, list2); num2++; ref ChangelogEntry reference3 = ref span[num2]; - DateOnly releaseDate2 = new DateOnly(2026, 2, 26); - index = 3; + DateOnly releaseDate2 = new DateOnly(2026, 2, 27); + index = 2; List list4 = new List(index); CollectionsMarshal.SetCount(list4, index); Span span4 = CollectionsMarshal.AsSpan(list4); num3 = 0; ref ChangeEntry reference4 = ref span4[num3]; - index2 = 3; - List list5 = new List(index2); - CollectionsMarshal.SetCount(list5, index2); + num5 = 2; + List list5 = new List(num5); + CollectionsMarshal.SetCount(list5, num5); Span span5 = CollectionsMarshal.AsSpan(list5); num4 = 0; - span5[num4] = "Add Saved Presets tab to quest priority window"; + span5[num4] = "Added prerequisite quest requirement to FATE farming definitions"; num4++; - span5[num4] = "Add passive FATE handling and per npc ability handling"; - num4++; - span5[num4] = "Add FATE farming support"; - reference4 = new ChangeEntry(EChangeCategory.Added, "New Features", list5); + span5[num4] = "Show active FATE in main quest UI and disable quest start during FATE farming"; + reference4 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list5); num3++; ref ChangeEntry reference5 = ref span4[num3]; num4 = 1; List list6 = new List(num4); CollectionsMarshal.SetCount(list6, num4); Span span6 = CollectionsMarshal.AsSpan(list6); - index2 = 0; - span6[index2] = "Add Little Ladies' Day 2026 quests"; - reference5 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list6); - num3++; - ref ChangeEntry reference6 = ref span4[num3]; - index2 = 1; - List list7 = new List(index2); - CollectionsMarshal.SetCount(list7, index2); - Span span7 = CollectionsMarshal.AsSpan(list7); - num4 = 0; - span7[num4] = "Quest path fixes"; - reference6 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list7); - reference3 = new ChangelogEntry("7.4.12", releaseDate2, list4); + num5 = 0; + span6[num5] = "Fixed FATE farming buff expiry and added Curtain Call cleanup on stop"; + reference5 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list6); + reference3 = new ChangelogEntry("7.4.14", releaseDate2, list4); num2++; - ref ChangelogEntry reference7 = ref span[num2]; - DateOnly releaseDate3 = new DateOnly(2026, 2, 2); - num3 = 2; - List list8 = new List(num3); - CollectionsMarshal.SetCount(list8, num3); - Span span8 = CollectionsMarshal.AsSpan(list8); + ref ChangelogEntry reference6 = ref span[num2]; + DateOnly releaseDate3 = new DateOnly(2026, 2, 27); + num3 = 1; + List list7 = new List(num3); + CollectionsMarshal.SetCount(list7, num3); + Span span7 = CollectionsMarshal.AsSpan(list7); index = 0; - ref ChangeEntry reference8 = ref span8[index]; - num4 = 1; - List list9 = new List(num4); - CollectionsMarshal.SetCount(list9, num4); - Span span9 = CollectionsMarshal.AsSpan(list9); - index2 = 0; - span9[index2] = "Add Valentione's Day 2026 quest (The Icing on the Cake)"; - reference8 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list9); - index++; - ref ChangeEntry reference9 = ref span8[index]; - index2 = 2; - List list10 = new List(index2); - CollectionsMarshal.SetCount(list10, index2); - Span span10 = CollectionsMarshal.AsSpan(list10); + ref ChangeEntry reference7 = ref span7[index]; + num5 = 1; + List list8 = new List(num5); + CollectionsMarshal.SetCount(list8, num5); + Span span8 = CollectionsMarshal.AsSpan(list8); num4 = 0; - span10[num4] = "Updated Duty journal to include missing duty types"; - num4++; - span10[num4] = "Added various missing sequences to quests"; - reference9 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list10); - reference7 = new ChangelogEntry("7.4.11", releaseDate3, list8); + span8[num4] = "Fixed an issue where FATE actions were not performed during the Little Ladies Day (2026) FATE event"; + reference7 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list8); + reference6 = new ChangelogEntry("7.4.13", releaseDate3, list7); num2++; - ref ChangelogEntry reference10 = ref span[num2]; - DateOnly releaseDate4 = new DateOnly(2026, 1, 18); - index = 2; - List list11 = new List(index); - CollectionsMarshal.SetCount(list11, index); - Span span11 = CollectionsMarshal.AsSpan(list11); + ref ChangelogEntry reference8 = ref span[num2]; + DateOnly releaseDate4 = new DateOnly(2026, 2, 26); + index = 3; + List list9 = new List(index); + CollectionsMarshal.SetCount(list9, index); + Span span9 = CollectionsMarshal.AsSpan(list9); num3 = 0; - ref ChangeEntry reference11 = ref span11[num3]; - num4 = 5; + ref ChangeEntry reference9 = ref span9[num3]; + num4 = 3; + List list10 = new List(num4); + CollectionsMarshal.SetCount(list10, num4); + Span span10 = CollectionsMarshal.AsSpan(list10); + num5 = 0; + span10[num5] = "Add Saved Presets tab to quest priority window"; + num5++; + span10[num5] = "Add passive FATE handling and per npc ability handling"; + num5++; + span10[num5] = "Add FATE farming support"; + reference9 = new ChangeEntry(EChangeCategory.Added, "New Features", list10); + num3++; + ref ChangeEntry reference10 = ref span9[num3]; + num5 = 1; + List list11 = new List(num5); + CollectionsMarshal.SetCount(list11, num5); + Span span11 = CollectionsMarshal.AsSpan(list11); + num4 = 0; + span11[num4] = "Add Little Ladies' Day 2026 quests"; + reference10 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list11); + num3++; + ref ChangeEntry reference11 = ref span9[num3]; + num4 = 1; List list12 = new List(num4); CollectionsMarshal.SetCount(list12, num4); Span span12 = CollectionsMarshal.AsSpan(list12); - index2 = 0; - span12[index2] = "Added quest blacklisting"; - index2++; - span12[index2] = "Added MSQ Priority config"; - index2++; - span12[index2] = "Added Quest priority persistence config"; - index2++; - span12[index2] = "Added Duties tab to Journal"; - index2++; - span12[index2] = "Added GC shop handling and chocobo naming for chocobo quests"; - reference11 = new ChangeEntry(EChangeCategory.Added, "Major Features", list12); - num3++; - ref ChangeEntry reference12 = ref span11[num3]; - index2 = 5; - List list13 = new List(index2); - CollectionsMarshal.SetCount(list13, index2); - Span span13 = CollectionsMarshal.AsSpan(list13); - num4 = 0; - span13[num4] = "Removed PandorasBox dependency and added QTE handling"; - num4++; - span13[num4] = "Removed CBT dependency and added Snipe handling"; - num4++; - span13[num4] = "Added drag reordering to Stop condition quests"; - num4++; - span13[num4] = "Ignore item level requirements if using Unsync config"; - num4++; - span13[num4] = "Setting a Stop quest to Off no longer removes it from the list"; - reference12 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list13); - reference10 = new ChangelogEntry("7.4.10", releaseDate4, list11); + num5 = 0; + span12[num5] = "Quest path fixes"; + reference11 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list12); + reference8 = new ChangelogEntry("7.4.12", releaseDate4, list9); num2++; - ref ChangelogEntry reference13 = ref span[num2]; - DateOnly releaseDate5 = new DateOnly(2025, 12, 31); - num3 = 3; - List list14 = new List(num3); - CollectionsMarshal.SetCount(list14, num3); - Span span14 = CollectionsMarshal.AsSpan(list14); + ref ChangelogEntry reference12 = ref span[num2]; + DateOnly releaseDate5 = new DateOnly(2026, 2, 2); + num3 = 2; + List list13 = new List(num3); + CollectionsMarshal.SetCount(list13, num3); + Span span13 = CollectionsMarshal.AsSpan(list13); index = 0; - ref ChangeEntry reference14 = ref span14[index]; - num4 = 1; + ref ChangeEntry reference13 = ref span13[index]; + num5 = 1; + List list14 = new List(num5); + CollectionsMarshal.SetCount(list14, num5); + Span span14 = CollectionsMarshal.AsSpan(list14); + num4 = 0; + span14[num4] = "Add Valentione's Day 2026 quest (The Icing on the Cake)"; + reference13 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list14); + index++; + ref ChangeEntry reference14 = ref span13[index]; + num4 = 2; List list15 = new List(num4); CollectionsMarshal.SetCount(list15, num4); Span span15 = CollectionsMarshal.AsSpan(list15); - index2 = 0; - span15[index2] = "Add Heavensturn (2026) quests"; - reference14 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list15); - index++; - ref ChangeEntry reference15 = ref span14[index]; - index2 = 1; - List list16 = new List(index2); - CollectionsMarshal.SetCount(list16, index2); - Span span16 = CollectionsMarshal.AsSpan(list16); - num4 = 0; - span16[num4] = "Added missing quest sequences"; - reference15 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list16); - index++; - ref ChangeEntry reference16 = ref span14[index]; - num4 = 1; - List list17 = new List(num4); - CollectionsMarshal.SetCount(list17, num4); - Span span17 = CollectionsMarshal.AsSpan(list17); - index2 = 0; - span17[index2] = "Fixed leveling mode not restarting properly"; - reference16 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list17); - reference13 = new ChangelogEntry("7.4.9", releaseDate5, list14); + num5 = 0; + span15[num5] = "Updated Duty journal to include missing duty types"; + num5++; + span15[num5] = "Added various missing sequences to quests"; + reference14 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list15); + reference12 = new ChangelogEntry("7.4.11", releaseDate5, list13); num2++; - ref ChangelogEntry reference17 = ref span[num2]; - DateOnly releaseDate6 = new DateOnly(2025, 12, 29); - index = 1; - List list18 = new List(index); - CollectionsMarshal.SetCount(list18, index); - Span span18 = CollectionsMarshal.AsSpan(list18); + ref ChangelogEntry reference15 = ref span[num2]; + DateOnly releaseDate6 = new DateOnly(2026, 1, 18); + index = 2; + List list16 = new List(index); + CollectionsMarshal.SetCount(list16, index); + Span span16 = CollectionsMarshal.AsSpan(list16); num3 = 0; - ref ChangeEntry reference18 = ref span18[num3]; - index2 = 2; - List list19 = new List(index2); - CollectionsMarshal.SetCount(list19, index2); - Span span19 = CollectionsMarshal.AsSpan(list19); + ref ChangeEntry reference16 = ref span16[num3]; + num5 = 5; + List list17 = new List(num5); + CollectionsMarshal.SetCount(list17, num5); + Span span17 = CollectionsMarshal.AsSpan(list17); num4 = 0; - span19[num4] = "Fixed infinite teleport loop when multiple quests compete for priority"; + span17[num4] = "Added quest blacklisting"; num4++; - span19[num4] = "Fixed leveling mode enabling for quest duties"; - reference18 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list19); - reference17 = new ChangelogEntry("7.4.8", releaseDate6, list18); + span17[num4] = "Added MSQ Priority config"; + num4++; + span17[num4] = "Added Quest priority persistence config"; + num4++; + span17[num4] = "Added Duties tab to Journal"; + num4++; + span17[num4] = "Added GC shop handling and chocobo naming for chocobo quests"; + reference16 = new ChangeEntry(EChangeCategory.Added, "Major Features", list17); + num3++; + ref ChangeEntry reference17 = ref span16[num3]; + num4 = 5; + List list18 = new List(num4); + CollectionsMarshal.SetCount(list18, num4); + Span span18 = CollectionsMarshal.AsSpan(list18); + num5 = 0; + span18[num5] = "Removed PandorasBox dependency and added QTE handling"; + num5++; + span18[num5] = "Removed CBT dependency and added Snipe handling"; + num5++; + span18[num5] = "Added drag reordering to Stop condition quests"; + num5++; + span18[num5] = "Ignore item level requirements if using Unsync config"; + num5++; + span18[num5] = "Setting a Stop quest to Off no longer removes it from the list"; + reference17 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list18); + reference15 = new ChangelogEntry("7.4.10", releaseDate6, list16); num2++; - ref ChangelogEntry reference19 = ref span[num2]; - DateOnly releaseDate7 = new DateOnly(2025, 12, 28); - num3 = 4; - List list20 = new List(num3); - CollectionsMarshal.SetCount(list20, num3); - Span span20 = CollectionsMarshal.AsSpan(list20); + ref ChangelogEntry reference18 = ref span[num2]; + DateOnly releaseDate7 = new DateOnly(2025, 12, 31); + num3 = 3; + List list19 = new List(num3); + CollectionsMarshal.SetCount(list19, num3); + Span span19 = CollectionsMarshal.AsSpan(list19); index = 0; - ref ChangeEntry reference20 = ref span20[index]; + ref ChangeEntry reference19 = ref span19[index]; + num5 = 1; + List list20 = new List(num5); + CollectionsMarshal.SetCount(list20, num5); + Span span20 = CollectionsMarshal.AsSpan(list20); + num4 = 0; + span20[num4] = "Add Heavensturn (2026) quests"; + reference19 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list20); + index++; + ref ChangeEntry reference20 = ref span19[index]; num4 = 1; List list21 = new List(num4); CollectionsMarshal.SetCount(list21, num4); Span span21 = CollectionsMarshal.AsSpan(list21); - index2 = 0; - span21[index2] = "Added leveling mode when underleveled for MSQ"; - reference20 = new ChangeEntry(EChangeCategory.Added, "Major Features", list21); + num5 = 0; + span21[num5] = "Added missing quest sequences"; + reference20 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list21); index++; - ref ChangeEntry reference21 = ref span20[index]; - index2 = 3; - List list22 = new List(index2); - CollectionsMarshal.SetCount(list22, index2); + ref ChangeEntry reference21 = ref span19[index]; + num5 = 1; + List list22 = new List(num5); + CollectionsMarshal.SetCount(list22, num5); Span span22 = CollectionsMarshal.AsSpan(list22); num4 = 0; - span22[num4] = "Added missing dungeons to Duties"; - num4++; - span22[num4] = "Added Normal Raids and Alliance Raids to duties tab"; - num4++; - span22[num4] = "Added Pause/Stop modes to stop conditions"; - reference21 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list22); - index++; - ref ChangeEntry reference22 = ref span20[index]; - num4 = 1; - List list23 = new List(num4); - CollectionsMarshal.SetCount(list23, num4); - Span span23 = CollectionsMarshal.AsSpan(list23); - index2 = 0; - span23[index2] = "Added leveling mode IPC: IsLevelingModeEnabled, SetLevelingModeEnabled, GetMsqLevelLockInfo, StartLevelingMode, StopLevelingMode"; - reference22 = new ChangeEntry(EChangeCategory.Added, "IPC Changes", list23); - index++; - ref ChangeEntry reference23 = ref span20[index]; - index2 = 1; - List list24 = new List(index2); - CollectionsMarshal.SetCount(list24, index2); + span22[num4] = "Fixed leveling mode not restarting properly"; + reference21 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list22); + reference18 = new ChangelogEntry("7.4.9", releaseDate7, list19); + num2++; + ref ChangelogEntry reference22 = ref span[num2]; + DateOnly releaseDate8 = new DateOnly(2025, 12, 29); + index = 1; + List list23 = new List(index); + CollectionsMarshal.SetCount(list23, index); + Span span23 = CollectionsMarshal.AsSpan(list23); + num3 = 0; + ref ChangeEntry reference23 = ref span23[num3]; + num4 = 2; + List list24 = new List(num4); + CollectionsMarshal.SetCount(list24, num4); Span span24 = CollectionsMarshal.AsSpan(list24); - num4 = 0; - span24[num4] = "Fixed UI appearing in duties when debuff or interrupts occur"; + num5 = 0; + span24[num5] = "Fixed infinite teleport loop when multiple quests compete for priority"; + num5++; + span24[num5] = "Fixed leveling mode enabling for quest duties"; reference23 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list24); - reference19 = new ChangelogEntry("7.4.7", releaseDate7, list20); + reference22 = new ChangelogEntry("7.4.8", releaseDate8, list23); num2++; ref ChangelogEntry reference24 = ref span[num2]; - DateOnly releaseDate8 = new DateOnly(2025, 12, 23); - index = 2; - List list25 = new List(index); - CollectionsMarshal.SetCount(list25, index); + DateOnly releaseDate9 = new DateOnly(2025, 12, 28); + num3 = 4; + List list25 = new List(num3); + CollectionsMarshal.SetCount(list25, num3); Span span25 = CollectionsMarshal.AsSpan(list25); - num3 = 0; - ref ChangeEntry reference25 = ref span25[num3]; - num4 = 1; - List list26 = new List(num4); - CollectionsMarshal.SetCount(list26, num4); - Span span26 = CollectionsMarshal.AsSpan(list26); - index2 = 0; - span26[index2] = "Added Cinema Mode to not skip cutscenes"; - reference25 = new ChangeEntry(EChangeCategory.Added, "Major Features", list26); - num3++; - ref ChangeEntry reference26 = ref span25[num3]; - index2 = 2; - List list27 = new List(index2); - CollectionsMarshal.SetCount(list27, index2); - Span span27 = CollectionsMarshal.AsSpan(list27); - num4 = 0; - span27[num4] = "Added handling for Unsync (Party) to Party Watchdog and configuration to disable if in party"; - num4++; - span27[num4] = "Stop conditions now act as a true stop"; - reference26 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list27); - reference24 = new ChangelogEntry("7.4.6", releaseDate8, list25); - num2++; - ref ChangelogEntry reference27 = ref span[num2]; - DateOnly releaseDate9 = new DateOnly(2025, 12, 22); - num3 = 1; - List list28 = new List(num3); - CollectionsMarshal.SetCount(list28, num3); - Span span28 = CollectionsMarshal.AsSpan(list28); index = 0; - ref ChangeEntry reference28 = ref span28[index]; - num4 = 2; + ref ChangeEntry reference25 = ref span25[index]; + num5 = 1; + List list26 = new List(num5); + CollectionsMarshal.SetCount(list26, num5); + Span span26 = CollectionsMarshal.AsSpan(list26); + num4 = 0; + span26[num4] = "Added leveling mode when underleveled for MSQ"; + reference25 = new ChangeEntry(EChangeCategory.Added, "Major Features", list26); + index++; + ref ChangeEntry reference26 = ref span25[index]; + num4 = 3; + List list27 = new List(num4); + CollectionsMarshal.SetCount(list27, num4); + Span span27 = CollectionsMarshal.AsSpan(list27); + num5 = 0; + span27[num5] = "Added missing dungeons to Duties"; + num5++; + span27[num5] = "Added Normal Raids and Alliance Raids to duties tab"; + num5++; + span27[num5] = "Added Pause/Stop modes to stop conditions"; + reference26 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list27); + index++; + ref ChangeEntry reference27 = ref span25[index]; + num5 = 1; + List list28 = new List(num5); + CollectionsMarshal.SetCount(list28, num5); + Span span28 = CollectionsMarshal.AsSpan(list28); + num4 = 0; + span28[num4] = "Added leveling mode IPC: IsLevelingModeEnabled, SetLevelingModeEnabled, GetMsqLevelLockInfo, StartLevelingMode, StopLevelingMode"; + reference27 = new ChangeEntry(EChangeCategory.Added, "IPC Changes", list28); + index++; + ref ChangeEntry reference28 = ref span25[index]; + num4 = 1; List list29 = new List(num4); CollectionsMarshal.SetCount(list29, num4); Span span29 = CollectionsMarshal.AsSpan(list29); - index2 = 0; - span29[index2] = "Dive adjustments"; - index2++; - span29[index2] = "Logging message adjustments"; - reference28 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list29); - reference27 = new ChangelogEntry("7.4.5", releaseDate9, list28); + num5 = 0; + span29[num5] = "Fixed UI appearing in duties when debuff or interrupts occur"; + reference28 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list29); + reference24 = new ChangelogEntry("7.4.7", releaseDate9, list25); num2++; ref ChangelogEntry reference29 = ref span[num2]; - DateOnly releaseDate10 = new DateOnly(2025, 12, 21); + DateOnly releaseDate10 = new DateOnly(2025, 12, 23); index = 2; List list30 = new List(index); CollectionsMarshal.SetCount(list30, index); Span span30 = CollectionsMarshal.AsSpan(list30); num3 = 0; ref ChangeEntry reference30 = ref span30[num3]; - index2 = 1; - List list31 = new List(index2); - CollectionsMarshal.SetCount(list31, index2); + num5 = 1; + List list31 = new List(num5); + CollectionsMarshal.SetCount(list31, num5); Span span31 = CollectionsMarshal.AsSpan(list31); num4 = 0; - span31[num4] = "Changelog only shows once per update now"; - reference30 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list31); + span31[num4] = "Added Cinema Mode to not skip cutscenes"; + reference30 = new ChangeEntry(EChangeCategory.Added, "Major Features", list31); num3++; ref ChangeEntry reference31 = ref span30[num3]; - num4 = 1; + num4 = 2; List list32 = new List(num4); CollectionsMarshal.SetCount(list32, num4); Span span32 = CollectionsMarshal.AsSpan(list32); - index2 = 0; - span32[index2] = "Fixed gathering paths loading"; - reference31 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list32); - reference29 = new ChangelogEntry("7.4.4", releaseDate10, list30); + num5 = 0; + span32[num5] = "Added handling for Unsync (Party) to Party Watchdog and configuration to disable if in party"; + num5++; + span32[num5] = "Stop conditions now act as a true stop"; + reference31 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list32); + reference29 = new ChangelogEntry("7.4.6", releaseDate10, list30); num2++; ref ChangelogEntry reference32 = ref span[num2]; - DateOnly releaseDate11 = new DateOnly(2025, 12, 21); + DateOnly releaseDate11 = new DateOnly(2025, 12, 22); num3 = 1; List list33 = new List(num3); CollectionsMarshal.SetCount(list33, num3); Span span33 = CollectionsMarshal.AsSpan(list33); index = 0; ref ChangeEntry reference33 = ref span33[index]; - index2 = 1; - List list34 = new List(index2); - CollectionsMarshal.SetCount(list34, index2); + num5 = 2; + List list34 = new List(num5); + CollectionsMarshal.SetCount(list34, num5); Span span34 = CollectionsMarshal.AsSpan(list34); num4 = 0; - span34[num4] = "Fixed changelog version checks"; - reference33 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list34); - reference32 = new ChangelogEntry("7.4.3", releaseDate11, list33); + span34[num4] = "Dive adjustments"; + num4++; + span34[num4] = "Logging message adjustments"; + reference33 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list34); + reference32 = new ChangelogEntry("7.4.5", releaseDate11, list33); num2++; ref ChangelogEntry reference34 = ref span[num2]; - DateOnly releaseDate12 = new DateOnly(2025, 12, 20); + DateOnly releaseDate12 = new DateOnly(2025, 12, 21); index = 2; List list35 = new List(index); CollectionsMarshal.SetCount(list35, index); @@ -346,931 +350,974 @@ internal static class ChangelogData List list36 = new List(num4); CollectionsMarshal.SetCount(list36, num4); Span span36 = CollectionsMarshal.AsSpan(list36); - index2 = 0; - span36[index2] = "Add 7.4 Starlight Celebration (2025) quest"; - reference35 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list36); + num5 = 0; + span36[num5] = "Changelog only shows once per update now"; + reference35 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list36); num3++; ref ChangeEntry reference36 = ref span35[num3]; - index2 = 1; - List list37 = new List(index2); - CollectionsMarshal.SetCount(list37, index2); + num5 = 1; + List list37 = new List(num5); + CollectionsMarshal.SetCount(list37, num5); Span span37 = CollectionsMarshal.AsSpan(list37); num4 = 0; - span37[num4] = "Fixed 7.4 MSQ"; + span37[num4] = "Fixed gathering paths loading"; reference36 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list37); - reference34 = new ChangelogEntry("7.4.2", releaseDate12, list35); + reference34 = new ChangelogEntry("7.4.4", releaseDate12, list35); num2++; ref ChangelogEntry reference37 = ref span[num2]; - DateOnly releaseDate13 = new DateOnly(2025, 12, 19); + DateOnly releaseDate13 = new DateOnly(2025, 12, 21); num3 = 1; List list38 = new List(num3); CollectionsMarshal.SetCount(list38, num3); Span span38 = CollectionsMarshal.AsSpan(list38); index = 0; ref ChangeEntry reference38 = ref span38[index]; - num4 = 2; + num4 = 1; List list39 = new List(num4); CollectionsMarshal.SetCount(list39, num4); Span span39 = CollectionsMarshal.AsSpan(list39); - index2 = 0; - span39[index2] = "Add 7.4 MSQ"; - index2++; - span39[index2] = "Add 7.4 Arcadion Raid quests"; - reference38 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list39); - reference37 = new ChangelogEntry("7.4.1", releaseDate13, list38); + num5 = 0; + span39[num5] = "Fixed changelog version checks"; + reference38 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list39); + reference37 = new ChangelogEntry("7.4.3", releaseDate13, list38); num2++; ref ChangelogEntry reference39 = ref span[num2]; - DateOnly releaseDate14 = new DateOnly(2025, 12, 17); - index = 1; + DateOnly releaseDate14 = new DateOnly(2025, 12, 20); + index = 2; List list40 = new List(index); CollectionsMarshal.SetCount(list40, index); Span span40 = CollectionsMarshal.AsSpan(list40); num3 = 0; - span40[num3] = new ChangeEntry(EChangeCategory.Changed, "Api 14 update"); - reference39 = new ChangelogEntry("7.4.0", releaseDate14, list40); - num2++; - ref ChangelogEntry reference40 = ref span[num2]; - DateOnly releaseDate15 = new DateOnly(2025, 12, 6); - num3 = 2; - List list41 = new List(num3); - CollectionsMarshal.SetCount(list41, num3); - Span span41 = CollectionsMarshal.AsSpan(list41); - index = 0; - ref ChangeEntry reference41 = ref span41[index]; - index2 = 4; - List list42 = new List(index2); - CollectionsMarshal.SetCount(list42, index2); - Span span42 = CollectionsMarshal.AsSpan(list42); + ref ChangeEntry reference40 = ref span40[num3]; + num5 = 1; + List list41 = new List(num5); + CollectionsMarshal.SetCount(list41, num5); + Span span41 = CollectionsMarshal.AsSpan(list41); num4 = 0; - span42[num4] = "Added reloading and rebuilding to movement system"; - num4++; - span42[num4] = "Improved interrupts and refresh states to allow continuation of questing"; - num4++; - span42[num4] = "Added player input detection to stop automation when manually moving character"; - num4++; - span42[num4] = "Added various missing quest sequences"; - reference41 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list42); - index++; - ref ChangeEntry reference42 = ref span41[index]; - num4 = 1; - List list43 = new List(num4); - CollectionsMarshal.SetCount(list43, num4); - Span span43 = CollectionsMarshal.AsSpan(list43); - index2 = 0; - span43[index2] = "Fixed reset task state to prevent stuck interactions after interruption"; - reference42 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list43); - reference40 = new ChangelogEntry("7.38.9", releaseDate15, list41); - num2++; - ref ChangelogEntry reference43 = ref span[num2]; - DateOnly releaseDate16 = new DateOnly(2025, 11, 29); - index = 2; - List list44 = new List(index); - CollectionsMarshal.SetCount(list44, index); - Span span44 = CollectionsMarshal.AsSpan(list44); - num3 = 0; - ref ChangeEntry reference44 = ref span44[num3]; - index2 = 3; - List list45 = new List(index2); - CollectionsMarshal.SetCount(list45, index2); - Span span45 = CollectionsMarshal.AsSpan(list45); - num4 = 0; - span45[num4] = "Movement update with automatic retrying if character can't reach target position"; - num4++; - span45[num4] = "Added Hunt mob data"; - num4++; - span45[num4] = "Refactored commands"; - reference44 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list45); + span41[num4] = "Add 7.4 Starlight Celebration (2025) quest"; + reference40 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list41); num3++; - ref ChangeEntry reference45 = ref span44[num3]; - num4 = 3; - List list46 = new List(num4); - CollectionsMarshal.SetCount(list46, num4); - Span span46 = CollectionsMarshal.AsSpan(list46); - index2 = 0; - span46[index2] = "Fixed quest (Way of the Archer)"; - index2++; - span46[index2] = "Fixed quest (Spirithold Broken)"; - index2++; - span46[index2] = "Fixed quest (It's Probably Not Pirates)"; - reference45 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list46); - reference43 = new ChangelogEntry("7.38.8", releaseDate16, list44); + ref ChangeEntry reference41 = ref span40[num3]; + num4 = 1; + List list42 = new List(num4); + CollectionsMarshal.SetCount(list42, num4); + Span span42 = CollectionsMarshal.AsSpan(list42); + num5 = 0; + span42[num5] = "Fixed 7.4 MSQ"; + reference41 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list42); + reference39 = new ChangelogEntry("7.4.2", releaseDate14, list40); num2++; - ref ChangelogEntry reference46 = ref span[num2]; - DateOnly releaseDate17 = new DateOnly(2025, 11, 25); - num3 = 2; - List list47 = new List(num3); - CollectionsMarshal.SetCount(list47, num3); - Span span47 = CollectionsMarshal.AsSpan(list47); + ref ChangelogEntry reference42 = ref span[num2]; + DateOnly releaseDate15 = new DateOnly(2025, 12, 19); + num3 = 1; + List list43 = new List(num3); + CollectionsMarshal.SetCount(list43, num3); + Span span43 = CollectionsMarshal.AsSpan(list43); index = 0; - ref ChangeEntry reference47 = ref span47[index]; - index2 = 2; - List list48 = new List(index2); - CollectionsMarshal.SetCount(list48, index2); + ref ChangeEntry reference43 = ref span43[index]; + num5 = 2; + List list44 = new List(num5); + CollectionsMarshal.SetCount(list44, num5); + Span span44 = CollectionsMarshal.AsSpan(list44); + num4 = 0; + span44[num4] = "Add 7.4 MSQ"; + num4++; + span44[num4] = "Add 7.4 Arcadion Raid quests"; + reference43 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list44); + reference42 = new ChangelogEntry("7.4.1", releaseDate15, list43); + num2++; + ref ChangelogEntry reference44 = ref span[num2]; + DateOnly releaseDate16 = new DateOnly(2025, 12, 17); + index = 1; + List list45 = new List(index); + CollectionsMarshal.SetCount(list45, index); + Span span45 = CollectionsMarshal.AsSpan(list45); + num3 = 0; + span45[num3] = new ChangeEntry(EChangeCategory.Changed, "Api 14 update"); + reference44 = new ChangelogEntry("7.4.0", releaseDate16, list45); + num2++; + ref ChangelogEntry reference45 = ref span[num2]; + DateOnly releaseDate17 = new DateOnly(2025, 12, 6); + num3 = 2; + List list46 = new List(num3); + CollectionsMarshal.SetCount(list46, num3); + Span span46 = CollectionsMarshal.AsSpan(list46); + index = 0; + ref ChangeEntry reference46 = ref span46[index]; + num4 = 4; + List list47 = new List(num4); + CollectionsMarshal.SetCount(list47, num4); + Span span47 = CollectionsMarshal.AsSpan(list47); + num5 = 0; + span47[num5] = "Added reloading and rebuilding to movement system"; + num5++; + span47[num5] = "Improved interrupts and refresh states to allow continuation of questing"; + num5++; + span47[num5] = "Added player input detection to stop automation when manually moving character"; + num5++; + span47[num5] = "Added various missing quest sequences"; + reference46 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list47); + index++; + ref ChangeEntry reference47 = ref span46[index]; + num5 = 1; + List list48 = new List(num5); + CollectionsMarshal.SetCount(list48, num5); Span span48 = CollectionsMarshal.AsSpan(list48); num4 = 0; - span48[num4] = "Added individual sequence stop condition for each quest"; - num4++; - span48[num4] = "Added Trials to Duties tab in config"; - reference47 = new ChangeEntry(EChangeCategory.Added, "Major features", list48); - index++; - ref ChangeEntry reference48 = ref span47[index]; - num4 = 1; - List list49 = new List(num4); - CollectionsMarshal.SetCount(list49, num4); - Span span49 = CollectionsMarshal.AsSpan(list49); - index2 = 0; - span49[index2] = "Added IPC for stop conditions: GetQuestSequenceStopCondition, SetQuestSequenceStopCondition, RemoveQuestSequenceStopCondition, GetAllQuestSequenceStopConditions"; - reference48 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list49); - reference46 = new ChangelogEntry("7.38.7", releaseDate17, list47); + span48[num4] = "Fixed reset task state to prevent stuck interactions after interruption"; + reference47 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list48); + reference45 = new ChangelogEntry("7.38.9", releaseDate17, list46); num2++; - ref ChangelogEntry reference49 = ref span[num2]; - DateOnly releaseDate18 = new DateOnly(2025, 11, 25); - index = 3; - List list50 = new List(index); - CollectionsMarshal.SetCount(list50, index); - Span span50 = CollectionsMarshal.AsSpan(list50); + ref ChangelogEntry reference48 = ref span[num2]; + DateOnly releaseDate18 = new DateOnly(2025, 11, 29); + index = 2; + List list49 = new List(index); + CollectionsMarshal.SetCount(list49, index); + Span span49 = CollectionsMarshal.AsSpan(list49); num3 = 0; - ref ChangeEntry reference50 = ref span50[num3]; - index2 = 2; - List list51 = new List(index2); - CollectionsMarshal.SetCount(list51, index2); + ref ChangeEntry reference49 = ref span49[num3]; + num4 = 3; + List list50 = new List(num4); + CollectionsMarshal.SetCount(list50, num4); + Span span50 = CollectionsMarshal.AsSpan(list50); + num5 = 0; + span50[num5] = "Movement update with automatic retrying if character can't reach target position"; + num5++; + span50[num5] = "Added Hunt mob data"; + num5++; + span50[num5] = "Refactored commands"; + reference49 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list50); + num3++; + ref ChangeEntry reference50 = ref span49[num3]; + num5 = 3; + List list51 = new List(num5); + CollectionsMarshal.SetCount(list51, num5); Span span51 = CollectionsMarshal.AsSpan(list51); num4 = 0; - span51[num4] = "Updated Allied Society journal text"; + span51[num4] = "Fixed quest (Way of the Archer)"; num4++; - span51[num4] = "Improved Allied Society rank handling"; - reference50 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list51); - num3++; - ref ChangeEntry reference51 = ref span50[num3]; - num4 = 1; - List list52 = new List(num4); - CollectionsMarshal.SetCount(list52, num4); - Span span52 = CollectionsMarshal.AsSpan(list52); - index2 = 0; - span52[index2] = "Added IPC for Allied Society: AddAlliedSocietyOptimalQuests, GetAlliedSocietyOptimalQuests"; - reference51 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list52); - num3++; - ref ChangeEntry reference52 = ref span50[num3]; - index2 = 1; - List list53 = new List(index2); - CollectionsMarshal.SetCount(list53, index2); - Span span53 = CollectionsMarshal.AsSpan(list53); - num4 = 0; - span53[num4] = "Fixed quest (We Come in Peace)"; - reference52 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list53); - reference49 = new ChangelogEntry("7.38.6", releaseDate18, list50); + span51[num4] = "Fixed quest (Spirithold Broken)"; + num4++; + span51[num4] = "Fixed quest (It's Probably Not Pirates)"; + reference50 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list51); + reference48 = new ChangelogEntry("7.38.8", releaseDate18, list49); num2++; - ref ChangelogEntry reference53 = ref span[num2]; - DateOnly releaseDate19 = new DateOnly(2025, 11, 24); + ref ChangelogEntry reference51 = ref span[num2]; + DateOnly releaseDate19 = new DateOnly(2025, 11, 25); num3 = 2; - List list54 = new List(num3); - CollectionsMarshal.SetCount(list54, num3); - Span span54 = CollectionsMarshal.AsSpan(list54); + List list52 = new List(num3); + CollectionsMarshal.SetCount(list52, num3); + Span span52 = CollectionsMarshal.AsSpan(list52); index = 0; - ref ChangeEntry reference54 = ref span54[index]; - num4 = 1; - List list55 = new List(num4); - CollectionsMarshal.SetCount(list55, num4); - Span span55 = CollectionsMarshal.AsSpan(list55); - index2 = 0; - span55[index2] = "Added Allied Society daily allowance tracker with bulk quest adding buttons"; - reference54 = new ChangeEntry(EChangeCategory.Added, "Major features", list55); + ref ChangeEntry reference52 = ref span52[index]; + num4 = 2; + List list53 = new List(num4); + CollectionsMarshal.SetCount(list53, num4); + Span span53 = CollectionsMarshal.AsSpan(list53); + num5 = 0; + span53[num5] = "Added individual sequence stop condition for each quest"; + num5++; + span53[num5] = "Added Trials to Duties tab in config"; + reference52 = new ChangeEntry(EChangeCategory.Added, "Major features", list53); index++; - ref ChangeEntry reference55 = ref span54[index]; - index2 = 1; - List list56 = new List(index2); - CollectionsMarshal.SetCount(list56, index2); - Span span56 = CollectionsMarshal.AsSpan(list56); + ref ChangeEntry reference53 = ref span52[index]; + num5 = 1; + List list54 = new List(num5); + CollectionsMarshal.SetCount(list54, num5); + Span span54 = CollectionsMarshal.AsSpan(list54); num4 = 0; - span56[num4] = "Added IPC for Allied Society: GetRemainingAllowances, GetTimeUntilReset, GetAvailableQuestIds, GetAllAvailableQuestCounts, IsMaxRank, GetCurrentRank, GetSocietiesWithAvailableQuests"; - reference55 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list56); - reference53 = new ChangelogEntry("7.38.5", releaseDate19, list54); + span54[num4] = "Added IPC for stop conditions: GetQuestSequenceStopCondition, SetQuestSequenceStopCondition, RemoveQuestSequenceStopCondition, GetAllQuestSequenceStopConditions"; + reference53 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list54); + reference51 = new ChangelogEntry("7.38.7", releaseDate19, list52); num2++; - ref ChangelogEntry reference56 = ref span[num2]; - DateOnly releaseDate20 = new DateOnly(2025, 11, 23); - index = 2; - List list57 = new List(index); - CollectionsMarshal.SetCount(list57, index); - Span span57 = CollectionsMarshal.AsSpan(list57); + ref ChangelogEntry reference54 = ref span[num2]; + DateOnly releaseDate20 = new DateOnly(2025, 11, 25); + index = 3; + List list55 = new List(index); + CollectionsMarshal.SetCount(list55, index); + Span span55 = CollectionsMarshal.AsSpan(list55); num3 = 0; - ref ChangeEntry reference57 = ref span57[num3]; + ref ChangeEntry reference55 = ref span55[num3]; + num4 = 2; + List list56 = new List(num4); + CollectionsMarshal.SetCount(list56, num4); + Span span56 = CollectionsMarshal.AsSpan(list56); + num5 = 0; + span56[num5] = "Updated Allied Society journal text"; + num5++; + span56[num5] = "Improved Allied Society rank handling"; + reference55 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list56); + num3++; + ref ChangeEntry reference56 = ref span55[num3]; + num5 = 1; + List list57 = new List(num5); + CollectionsMarshal.SetCount(list57, num5); + Span span57 = CollectionsMarshal.AsSpan(list57); + num4 = 0; + span57[num4] = "Added IPC for Allied Society: AddAlliedSocietyOptimalQuests, GetAlliedSocietyOptimalQuests"; + reference56 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list57); + num3++; + ref ChangeEntry reference57 = ref span55[num3]; num4 = 1; List list58 = new List(num4); CollectionsMarshal.SetCount(list58, num4); Span span58 = CollectionsMarshal.AsSpan(list58); - index2 = 0; - span58[index2] = "Explicitly declare support for BMR singleplayer duty (The Rematch)"; - reference57 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list58); - num3++; - ref ChangeEntry reference58 = ref span57[num3]; - index2 = 8; - List list59 = new List(index2); - CollectionsMarshal.SetCount(list59, index2); - Span span59 = CollectionsMarshal.AsSpan(list59); - num4 = 0; - span59[num4] = "Fixed quest (Microbrewing) to not get stuck near ramp"; - num4++; - span59[num4] = "Fixed quest (The Illuminated Land) where pathing would kill the player due to fall damage"; - num4++; - span59[num4] = "Fixed quest (It's Probably Not Pirates) improper pathing and removed unneeded step"; - num4++; - span59[num4] = "Fixed quest (The Black Wolf's Ultimatum) not exiting landing area"; - num4++; - span59[num4] = "Fixed quest (Magiteknical Failure) from not interacting with NPC due to being mounted"; - num4++; - span59[num4] = "Fixed quest (We Come in Peace) shortcut navigation"; - num4++; - span59[num4] = "Fixed quest (Poisoned Hearts) where incorrect pathing caused the player to die"; - num4++; - span59[num4] = "Fixed quests (Savage Snares) and (An Apple a Day) not detecting kills"; - reference58 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list59); - reference56 = new ChangelogEntry("7.38.4", releaseDate20, list57); + num5 = 0; + span58[num5] = "Fixed quest (We Come in Peace)"; + reference57 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list58); + reference54 = new ChangelogEntry("7.38.6", releaseDate20, list55); num2++; - ref ChangelogEntry reference59 = ref span[num2]; - DateOnly releaseDate21 = new DateOnly(2025, 11, 23); - num3 = 3; - List list60 = new List(num3); - CollectionsMarshal.SetCount(list60, num3); - Span span60 = CollectionsMarshal.AsSpan(list60); + ref ChangelogEntry reference58 = ref span[num2]; + DateOnly releaseDate21 = new DateOnly(2025, 11, 24); + num3 = 2; + List list59 = new List(num3); + CollectionsMarshal.SetCount(list59, num3); + Span span59 = CollectionsMarshal.AsSpan(list59); index = 0; - ref ChangeEntry reference60 = ref span60[index]; - num4 = 2; + ref ChangeEntry reference59 = ref span59[index]; + num5 = 1; + List list60 = new List(num5); + CollectionsMarshal.SetCount(list60, num5); + Span span60 = CollectionsMarshal.AsSpan(list60); + num4 = 0; + span60[num4] = "Added Allied Society daily allowance tracker with bulk quest adding buttons"; + reference59 = new ChangeEntry(EChangeCategory.Added, "Major features", list60); + index++; + ref ChangeEntry reference60 = ref span59[index]; + num4 = 1; List list61 = new List(num4); CollectionsMarshal.SetCount(list61, num4); Span span61 = CollectionsMarshal.AsSpan(list61); - index2 = 0; - span61[index2] = "Added RequireHq to crafting InteractionType"; - index2++; - span61[index2] = "Mark GC quests as Locked if rank not achieved"; - reference60 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list61); - index++; - ref ChangeEntry reference61 = ref span60[index]; - index2 = 2; - List list62 = new List(index2); - CollectionsMarshal.SetCount(list62, index2); - Span span62 = CollectionsMarshal.AsSpan(list62); - num4 = 0; - span62[num4] = "Added IPC for stop conditions: GetStopConditionsEnabled, SetStopConditionsEnabled, GetStopQuestList, AddStopQuest, RemoveStopQuest, ClearStopQuests, GetLevelStopCondition, SetLevelStopCondition, GetSequenceStopCondition, SetSequenceStopCondition"; - num4++; - span62[num4] = "Added IPC for priority quests: GetPriorityQuests, RemovePriorityQuest, ReorderPriorityQuest, GetAvailablePresets, GetPresetQuests, AddPresetToPriority, IsPresetAvailable, IsQuestInPriority, GetQuestPriorityIndex, HasAvailablePriorityQuests"; - reference61 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list62); - index++; - ref ChangeEntry reference62 = ref span60[index]; - num4 = 3; - List list63 = new List(num4); - CollectionsMarshal.SetCount(list63, num4); - Span span63 = CollectionsMarshal.AsSpan(list63); - index2 = 0; - span63[index2] = "Fixed line breaks not working in dialog strings"; - index2++; - span63[index2] = "Fixed quest (Labor of Love)"; - index2++; - span63[index2] = "Fixed quest (Sea of Sorrow)"; - reference62 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list63); - reference59 = new ChangelogEntry("7.38.3", releaseDate21, list60); + num5 = 0; + span61[num5] = "Added IPC for Allied Society: GetRemainingAllowances, GetTimeUntilReset, GetAvailableQuestIds, GetAllAvailableQuestCounts, IsMaxRank, GetCurrentRank, GetSocietiesWithAvailableQuests"; + reference60 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list61); + reference58 = new ChangelogEntry("7.38.5", releaseDate21, list59); num2++; - ref ChangelogEntry reference63 = ref span[num2]; - DateOnly releaseDate22 = new DateOnly(2025, 11, 18); - index = 3; - List list64 = new List(index); - CollectionsMarshal.SetCount(list64, index); - Span span64 = CollectionsMarshal.AsSpan(list64); + ref ChangelogEntry reference61 = ref span[num2]; + DateOnly releaseDate22 = new DateOnly(2025, 11, 23); + index = 2; + List list62 = new List(index); + CollectionsMarshal.SetCount(list62, index); + Span span62 = CollectionsMarshal.AsSpan(list62); num3 = 0; - ref ChangeEntry reference64 = ref span64[num3]; - index2 = 2; - List list65 = new List(index2); - CollectionsMarshal.SetCount(list65, index2); - Span span65 = CollectionsMarshal.AsSpan(list65); + ref ChangeEntry reference62 = ref span62[num3]; + num5 = 1; + List list63 = new List(num5); + CollectionsMarshal.SetCount(list63, num5); + Span span63 = CollectionsMarshal.AsSpan(list63); num4 = 0; - span65[num4] = "Auto Duty unsync options for each duty (Duty Support, Unsync Solo, Unsync Party)"; - num4++; - span65[num4] = "Added Auto Duty unsync options to quest schema and updated quests using old unsync method"; - reference64 = new ChangeEntry(EChangeCategory.Added, "Major features", list65); + span63[num4] = "Explicitly declare support for BMR singleplayer duty (The Rematch)"; + reference62 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list63); num3++; - ref ChangeEntry reference65 = ref span64[num3]; - num4 = 3; - List list66 = new List(num4); - CollectionsMarshal.SetCount(list66, num4); - Span span66 = CollectionsMarshal.AsSpan(list66); - index2 = 0; - span66[index2] = "Added IPC for duty sync handling: GetDefaultDutyMode, SetDefaultDutyMode"; - index2++; - span66[index2] = "Added IPC for duty mode overrides: GetDutyModeOverride, SetDutyModeOverride"; - index2++; - span66[index2] = "Added IPC for clearing overrides: ClearDutyModeOverride, ClearAllDutyModeOverrides"; - reference65 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list66); - num3++; - span64[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest (Constant Cravings)"); - reference63 = new ChangelogEntry("7.38.2", releaseDate22, list64); + ref ChangeEntry reference63 = ref span62[num3]; + num4 = 8; + List list64 = new List(num4); + CollectionsMarshal.SetCount(list64, num4); + Span span64 = CollectionsMarshal.AsSpan(list64); + num5 = 0; + span64[num5] = "Fixed quest (Microbrewing) to not get stuck near ramp"; + num5++; + span64[num5] = "Fixed quest (The Illuminated Land) where pathing would kill the player due to fall damage"; + num5++; + span64[num5] = "Fixed quest (It's Probably Not Pirates) improper pathing and removed unneeded step"; + num5++; + span64[num5] = "Fixed quest (The Black Wolf's Ultimatum) not exiting landing area"; + num5++; + span64[num5] = "Fixed quest (Magiteknical Failure) from not interacting with NPC due to being mounted"; + num5++; + span64[num5] = "Fixed quest (We Come in Peace) shortcut navigation"; + num5++; + span64[num5] = "Fixed quest (Poisoned Hearts) where incorrect pathing caused the player to die"; + num5++; + span64[num5] = "Fixed quests (Savage Snares) and (An Apple a Day) not detecting kills"; + reference63 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list64); + reference61 = new ChangelogEntry("7.38.4", releaseDate22, list62); num2++; - ref ChangelogEntry reference66 = ref span[num2]; - DateOnly releaseDate23 = new DateOnly(2025, 11, 18); + ref ChangelogEntry reference64 = ref span[num2]; + DateOnly releaseDate23 = new DateOnly(2025, 11, 23); num3 = 3; - List list67 = new List(num3); - CollectionsMarshal.SetCount(list67, num3); - Span span67 = CollectionsMarshal.AsSpan(list67); + List list65 = new List(num3); + CollectionsMarshal.SetCount(list65, num3); + Span span65 = CollectionsMarshal.AsSpan(list65); index = 0; - ref ChangeEntry reference67 = ref span67[index]; - index2 = 1; - List list68 = new List(index2); - CollectionsMarshal.SetCount(list68, index2); + ref ChangeEntry reference65 = ref span65[index]; + num5 = 2; + List list66 = new List(num5); + CollectionsMarshal.SetCount(list66, num5); + Span span66 = CollectionsMarshal.AsSpan(list66); + num4 = 0; + span66[num4] = "Added RequireHq to crafting InteractionType"; + num4++; + span66[num4] = "Mark GC quests as Locked if rank not achieved"; + reference65 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list66); + index++; + ref ChangeEntry reference66 = ref span65[index]; + num4 = 2; + List list67 = new List(num4); + CollectionsMarshal.SetCount(list67, num4); + Span span67 = CollectionsMarshal.AsSpan(list67); + num5 = 0; + span67[num5] = "Added IPC for stop conditions: GetStopConditionsEnabled, SetStopConditionsEnabled, GetStopQuestList, AddStopQuest, RemoveStopQuest, ClearStopQuests, GetLevelStopCondition, SetLevelStopCondition, GetSequenceStopCondition, SetSequenceStopCondition"; + num5++; + span67[num5] = "Added IPC for priority quests: GetPriorityQuests, RemovePriorityQuest, ReorderPriorityQuest, GetAvailablePresets, GetPresetQuests, AddPresetToPriority, IsPresetAvailable, IsQuestInPriority, GetQuestPriorityIndex, HasAvailablePriorityQuests"; + reference66 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list67); + index++; + ref ChangeEntry reference67 = ref span65[index]; + num5 = 3; + List list68 = new List(num5); + CollectionsMarshal.SetCount(list68, num5); Span span68 = CollectionsMarshal.AsSpan(list68); num4 = 0; - span68[num4] = "Added new fields to quest schema"; - reference67 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list68); - index++; - ref ChangeEntry reference68 = ref span67[index]; - num4 = 3; - List list69 = new List(num4); - CollectionsMarshal.SetCount(list69, num4); - Span span69 = CollectionsMarshal.AsSpan(list69); - index2 = 0; - span69[index2] = "A Faerie Tale Come True"; - index2++; - span69[index2] = "Constant Cravings"; - index2++; - span69[index2] = "A Bridge Too Full"; - reference68 = new ChangeEntry(EChangeCategory.QuestUpdates, "Added new quest paths", list69); - index++; - ref ChangeEntry reference69 = ref span67[index]; - index2 = 3; - List list70 = new List(index2); - CollectionsMarshal.SetCount(list70, index2); - Span span70 = CollectionsMarshal.AsSpan(list70); - num4 = 0; - span70[num4] = "Fixed various quest schemas"; + span68[num4] = "Fixed line breaks not working in dialog strings"; num4++; - span70[num4] = "Fixed changelog bullet point encoding"; + span68[num4] = "Fixed quest (Labor of Love)"; num4++; - span70[num4] = "Fixed item use to wait until item is used before next action"; - reference69 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list70); - reference66 = new ChangelogEntry("7.38.1", releaseDate23, list67); + span68[num4] = "Fixed quest (Sea of Sorrow)"; + reference67 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list68); + reference64 = new ChangelogEntry("7.38.3", releaseDate23, list65); num2++; - ref ChangelogEntry reference70 = ref span[num2]; - DateOnly releaseDate24 = new DateOnly(2025, 11, 17); - index = 5; - List list71 = new List(index); - CollectionsMarshal.SetCount(list71, index); - Span span71 = CollectionsMarshal.AsSpan(list71); + ref ChangelogEntry reference68 = ref span[num2]; + DateOnly releaseDate24 = new DateOnly(2025, 11, 18); + index = 3; + List list69 = new List(index); + CollectionsMarshal.SetCount(list69, index); + Span span69 = CollectionsMarshal.AsSpan(list69); num3 = 0; - ref ChangeEntry reference71 = ref span71[num3]; + ref ChangeEntry reference69 = ref span69[num3]; num4 = 2; - List list72 = new List(num4); - CollectionsMarshal.SetCount(list72, num4); - Span span72 = CollectionsMarshal.AsSpan(list72); - index2 = 0; - span72[index2] = "Quest sequence window to show expected sequences in each quest (with quest searching)"; - index2++; - span72[index2] = "Changelog"; - reference71 = new ChangeEntry(EChangeCategory.Added, "Major features", list72); + List list70 = new List(num4); + CollectionsMarshal.SetCount(list70, num4); + Span span70 = CollectionsMarshal.AsSpan(list70); + num5 = 0; + span70[num5] = "Auto Duty unsync options for each duty (Duty Support, Unsync Solo, Unsync Party)"; + num5++; + span70[num5] = "Added Auto Duty unsync options to quest schema and updated quests using old unsync method"; + reference69 = new ChangeEntry(EChangeCategory.Added, "Major features", list70); num3++; - ref ChangeEntry reference72 = ref span71[num3]; - index2 = 2; - List list73 = new List(index2); - CollectionsMarshal.SetCount(list73, index2); - Span span73 = CollectionsMarshal.AsSpan(list73); + ref ChangeEntry reference70 = ref span69[num3]; + num5 = 3; + List list71 = new List(num5); + CollectionsMarshal.SetCount(list71, num5); + Span span71 = CollectionsMarshal.AsSpan(list71); num4 = 0; - span73[num4] = "Updated quest schemas"; + span71[num4] = "Added IPC for duty sync handling: GetDefaultDutyMode, SetDefaultDutyMode"; num4++; - span73[num4] = "Added search bar to preferred mounts and capitalization to mirror game mount names"; - reference72 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list73); + span71[num4] = "Added IPC for duty mode overrides: GetDutyModeOverride, SetDutyModeOverride"; + num4++; + span71[num4] = "Added IPC for clearing overrides: ClearDutyModeOverride, ClearAllDutyModeOverrides"; + reference70 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list71); num3++; - ref ChangeEntry reference73 = ref span71[num3]; - num4 = 3; - List list74 = new List(num4); - CollectionsMarshal.SetCount(list74, num4); - Span span74 = CollectionsMarshal.AsSpan(list74); - index2 = 0; - span74[index2] = "Renamed IsQuestCompleted → IsQuestComplete"; - index2++; - span74[index2] = "Renamed IsQuestAvailable → IsReadyToAcceptQuest"; - index2++; - span74[index2] = "Added GetCurrentTask IPC"; - reference73 = new ChangeEntry(EChangeCategory.Changed, "IPC changes", list74); - num3++; - span71[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added all Hildibrand quests"); - num3++; - span71[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed credits/cutscenes playback"); - reference70 = new ChangelogEntry("7.38.0", releaseDate24, list71); + span69[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest (Constant Cravings)"); + reference68 = new ChangelogEntry("7.38.2", releaseDate24, list69); num2++; - ref ChangelogEntry reference74 = ref span[num2]; - DateOnly releaseDate25 = new DateOnly(2025, 11, 8); - num3 = 1; - List list75 = new List(num3); - CollectionsMarshal.SetCount(list75, num3); - Span span75 = CollectionsMarshal.AsSpan(list75); + ref ChangelogEntry reference71 = ref span[num2]; + DateOnly releaseDate25 = new DateOnly(2025, 11, 18); + num3 = 3; + List list72 = new List(num3); + CollectionsMarshal.SetCount(list72, num3); + Span span72 = CollectionsMarshal.AsSpan(list72); index = 0; - span75[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Fall Guys quest (Just Crowning Around)"); - reference74 = new ChangelogEntry("6.38", releaseDate25, list75); + ref ChangeEntry reference72 = ref span72[index]; + num4 = 1; + List list73 = new List(num4); + CollectionsMarshal.SetCount(list73, num4); + Span span73 = CollectionsMarshal.AsSpan(list73); + num5 = 0; + span73[num5] = "Added new fields to quest schema"; + reference72 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list73); + index++; + ref ChangeEntry reference73 = ref span72[index]; + num5 = 3; + List list74 = new List(num5); + CollectionsMarshal.SetCount(list74, num5); + Span span74 = CollectionsMarshal.AsSpan(list74); + num4 = 0; + span74[num4] = "A Faerie Tale Come True"; + num4++; + span74[num4] = "Constant Cravings"; + num4++; + span74[num4] = "A Bridge Too Full"; + reference73 = new ChangeEntry(EChangeCategory.QuestUpdates, "Added new quest paths", list74); + index++; + ref ChangeEntry reference74 = ref span72[index]; + num4 = 3; + List list75 = new List(num4); + CollectionsMarshal.SetCount(list75, num4); + Span span75 = CollectionsMarshal.AsSpan(list75); + num5 = 0; + span75[num5] = "Fixed various quest schemas"; + num5++; + span75[num5] = "Fixed changelog bullet point encoding"; + num5++; + span75[num5] = "Fixed item use to wait until item is used before next action"; + reference74 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list75); + reference71 = new ChangelogEntry("7.38.1", releaseDate25, list72); num2++; ref ChangelogEntry reference75 = ref span[num2]; - DateOnly releaseDate26 = new DateOnly(2025, 11, 8); - index = 1; + DateOnly releaseDate26 = new DateOnly(2025, 11, 17); + index = 5; List list76 = new List(index); CollectionsMarshal.SetCount(list76, index); Span span76 = CollectionsMarshal.AsSpan(list76); num3 = 0; - span76[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Cosmic Exploration and various unlock quests"); - reference75 = new ChangelogEntry("6.37", releaseDate26, list76); - num2++; - ref ChangelogEntry reference76 = ref span[num2]; - DateOnly releaseDate27 = new DateOnly(2025, 11, 2); - num3 = 1; - List list77 = new List(num3); - CollectionsMarshal.SetCount(list77, num3); - Span span77 = CollectionsMarshal.AsSpan(list77); - index = 0; - span77[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 6 quest (With High Spirits)"); - reference76 = new ChangelogEntry("6.36", releaseDate27, list77); - num2++; - ref ChangelogEntry reference77 = ref span[num2]; - DateOnly releaseDate28 = new DateOnly(2025, 10, 28); - index = 1; - List list78 = new List(index); - CollectionsMarshal.SetCount(list78, index); - Span span78 = CollectionsMarshal.AsSpan(list78); - num3 = 0; - span78[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed level 3 MSQ handling if character started on non-XP buff world"); - reference77 = new ChangelogEntry("6.35", releaseDate28, list78); - num2++; - ref ChangelogEntry reference78 = ref span[num2]; - DateOnly releaseDate29 = new DateOnly(2025, 10, 23); - num3 = 2; - List list79 = new List(num3); - CollectionsMarshal.SetCount(list79, num3); - Span span79 = CollectionsMarshal.AsSpan(list79); - index = 0; - span79[index] = new ChangeEntry(EChangeCategory.Added, "Added clear priority quests on logout and on completion config settings"); - index++; - span79[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed priority quest importing to respect import order"); - reference78 = new ChangelogEntry("6.34", releaseDate29, list79); + ref ChangeEntry reference76 = ref span76[num3]; + num5 = 2; + List list77 = new List(num5); + CollectionsMarshal.SetCount(list77, num5); + Span span77 = CollectionsMarshal.AsSpan(list77); + num4 = 0; + span77[num4] = "Quest sequence window to show expected sequences in each quest (with quest searching)"; + num4++; + span77[num4] = "Changelog"; + reference76 = new ChangeEntry(EChangeCategory.Added, "Major features", list77); + num3++; + ref ChangeEntry reference77 = ref span76[num3]; + num4 = 2; + List list78 = new List(num4); + CollectionsMarshal.SetCount(list78, num4); + Span span78 = CollectionsMarshal.AsSpan(list78); + num5 = 0; + span78[num5] = "Updated quest schemas"; + num5++; + span78[num5] = "Added search bar to preferred mounts and capitalization to mirror game mount names"; + reference77 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list78); + num3++; + ref ChangeEntry reference78 = ref span76[num3]; + num5 = 3; + List list79 = new List(num5); + CollectionsMarshal.SetCount(list79, num5); + Span span79 = CollectionsMarshal.AsSpan(list79); + num4 = 0; + span79[num4] = "Renamed IsQuestCompleted → IsQuestComplete"; + num4++; + span79[num4] = "Renamed IsQuestAvailable → IsReadyToAcceptQuest"; + num4++; + span79[num4] = "Added GetCurrentTask IPC"; + reference78 = new ChangeEntry(EChangeCategory.Changed, "IPC changes", list79); + num3++; + span76[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added all Hildibrand quests"); + num3++; + span76[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed credits/cutscenes playback"); + reference75 = new ChangelogEntry("7.38.0", releaseDate26, list76); num2++; ref ChangelogEntry reference79 = ref span[num2]; - DateOnly releaseDate30 = new DateOnly(2025, 10, 23); - index = 1; - List list80 = new List(index); - CollectionsMarshal.SetCount(list80, index); + DateOnly releaseDate27 = new DateOnly(2025, 11, 8); + num3 = 1; + List list80 = new List(num3); + CollectionsMarshal.SetCount(list80, num3); Span span80 = CollectionsMarshal.AsSpan(list80); - num3 = 0; - span80[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed RSR combat module"); - reference79 = new ChangelogEntry("6.33", releaseDate30, list80); + index = 0; + span80[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Fall Guys quest (Just Crowning Around)"); + reference79 = new ChangelogEntry("6.38", releaseDate27, list80); num2++; ref ChangelogEntry reference80 = ref span[num2]; - DateOnly releaseDate31 = new DateOnly(2025, 10, 23); - num3 = 1; - List list81 = new List(num3); - CollectionsMarshal.SetCount(list81, num3); + DateOnly releaseDate28 = new DateOnly(2025, 11, 8); + index = 1; + List list81 = new List(index); + CollectionsMarshal.SetCount(list81, index); Span span81 = CollectionsMarshal.AsSpan(list81); - index = 0; - span81[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 5 quest (Forged in Corn)"); - reference80 = new ChangelogEntry("6.32", releaseDate31, list81); + num3 = 0; + span81[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Cosmic Exploration and various unlock quests"); + reference80 = new ChangelogEntry("6.37", releaseDate28, list81); num2++; ref ChangelogEntry reference81 = ref span[num2]; - DateOnly releaseDate32 = new DateOnly(2025, 10, 21); - index = 1; - List list82 = new List(index); - CollectionsMarshal.SetCount(list82, index); + DateOnly releaseDate29 = new DateOnly(2025, 11, 2); + num3 = 1; + List list82 = new List(num3); + CollectionsMarshal.SetCount(list82, num3); Span span82 = CollectionsMarshal.AsSpan(list82); - num3 = 0; - span82[num3] = new ChangeEntry(EChangeCategory.Changed, "Added checks for moogle and allied society quests when using add all available quests"); - reference81 = new ChangelogEntry("6.31", releaseDate32, list82); + index = 0; + span82[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 6 quest (With High Spirits)"); + reference81 = new ChangelogEntry("6.36", releaseDate29, list82); num2++; ref ChangelogEntry reference82 = ref span[num2]; - DateOnly releaseDate33 = new DateOnly(2025, 10, 21); - num3 = 1; - List list83 = new List(num3); - CollectionsMarshal.SetCount(list83, num3); + DateOnly releaseDate30 = new DateOnly(2025, 10, 28); + index = 1; + List list83 = new List(index); + CollectionsMarshal.SetCount(list83, index); Span span83 = CollectionsMarshal.AsSpan(list83); - index = 0; - span83[index] = new ChangeEntry(EChangeCategory.Added, "Added button to journal that allows adding all available quests to priority"); - reference82 = new ChangelogEntry("6.30", releaseDate33, list83); + num3 = 0; + span83[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed level 3 MSQ handling if character started on non-XP buff world"); + reference82 = new ChangelogEntry("6.35", releaseDate30, list83); num2++; ref ChangelogEntry reference83 = ref span[num2]; - DateOnly releaseDate34 = new DateOnly(2025, 10, 20); - index = 2; - List list84 = new List(index); - CollectionsMarshal.SetCount(list84, index); + DateOnly releaseDate31 = new DateOnly(2025, 10, 23); + num3 = 2; + List list84 = new List(num3); + CollectionsMarshal.SetCount(list84, num3); Span span84 = CollectionsMarshal.AsSpan(list84); + index = 0; + span84[index] = new ChangeEntry(EChangeCategory.Added, "Added clear priority quests on logout and on completion config settings"); + index++; + span84[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed priority quest importing to respect import order"); + reference83 = new ChangelogEntry("6.34", releaseDate31, list84); + num2++; + ref ChangelogEntry reference84 = ref span[num2]; + DateOnly releaseDate32 = new DateOnly(2025, 10, 23); + index = 1; + List list85 = new List(index); + CollectionsMarshal.SetCount(list85, index); + Span span85 = CollectionsMarshal.AsSpan(list85); num3 = 0; - ref ChangeEntry reference84 = ref span84[num3]; - index2 = 2; - List list85 = new List(index2); - CollectionsMarshal.SetCount(list85, index2); - Span span85 = CollectionsMarshal.AsSpan(list85); - num4 = 0; - span85[num4] = "Added item count to combat handling rework"; - num4++; - span85[num4] = "Updated Pandora conflicting features"; - reference84 = new ChangeEntry(EChangeCategory.Changed, "Combat handling improvements", list85); - num3++; - span84[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest to purchase Gysahl Greens if not in inventory"); - reference83 = new ChangelogEntry("6.29", releaseDate34, list84); + span85[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed RSR combat module"); + reference84 = new ChangelogEntry("6.33", releaseDate32, list85); num2++; ref ChangelogEntry reference85 = ref span[num2]; - DateOnly releaseDate35 = new DateOnly(2025, 10, 19); + DateOnly releaseDate33 = new DateOnly(2025, 10, 23); num3 = 1; List list86 = new List(num3); CollectionsMarshal.SetCount(list86, num3); Span span86 = CollectionsMarshal.AsSpan(list86); index = 0; - span86[index] = new ChangeEntry(EChangeCategory.Changed, "Reworked kill count combat handling - combat and enemy kills are now processed instantly"); - reference85 = new ChangelogEntry("6.28", releaseDate35, list86); + span86[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 5 quest (Forged in Corn)"); + reference85 = new ChangelogEntry("6.32", releaseDate33, list86); num2++; ref ChangelogEntry reference86 = ref span[num2]; - DateOnly releaseDate36 = new DateOnly(2025, 10, 18); - index = 2; + DateOnly releaseDate34 = new DateOnly(2025, 10, 21); + index = 1; List list87 = new List(index); CollectionsMarshal.SetCount(list87, index); Span span87 = CollectionsMarshal.AsSpan(list87); num3 = 0; - span87[num3] = new ChangeEntry(EChangeCategory.Changed, "Improved Aether Current checking logic"); - num3++; - span87[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Chocobo Taxi Stand CheckSkip error and Patch 7.3 Fantasia unlock quest date/time"); - reference86 = new ChangelogEntry("6.27", releaseDate36, list87); + span87[num3] = new ChangeEntry(EChangeCategory.Changed, "Added checks for moogle and allied society quests when using add all available quests"); + reference86 = new ChangelogEntry("6.31", releaseDate34, list87); num2++; ref ChangelogEntry reference87 = ref span[num2]; - DateOnly releaseDate37 = new DateOnly(2025, 10, 18); + DateOnly releaseDate35 = new DateOnly(2025, 10, 21); num3 = 1; List list88 = new List(num3); CollectionsMarshal.SetCount(list88, num3); Span span88 = CollectionsMarshal.AsSpan(list88); index = 0; - span88[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests"); - reference87 = new ChangelogEntry("6.26", releaseDate37, list88); + span88[index] = new ChangeEntry(EChangeCategory.Added, "Added button to journal that allows adding all available quests to priority"); + reference87 = new ChangelogEntry("6.30", releaseDate35, list88); num2++; ref ChangelogEntry reference88 = ref span[num2]; - DateOnly releaseDate38 = new DateOnly(2025, 10, 17); - index = 1; + DateOnly releaseDate36 = new DateOnly(2025, 10, 20); + index = 2; List list89 = new List(index); CollectionsMarshal.SetCount(list89, index); Span span89 = CollectionsMarshal.AsSpan(list89); num3 = 0; - span89[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added All Saints' Wake 2025 quests and 7.35 Yok Huy rank 4 quests"); - reference88 = new ChangelogEntry("6.25", releaseDate38, list89); - num2++; - ref ChangelogEntry reference89 = ref span[num2]; - DateOnly releaseDate39 = new DateOnly(2025, 10, 16); - num3 = 1; - List list90 = new List(num3); - CollectionsMarshal.SetCount(list90, num3); - Span span90 = CollectionsMarshal.AsSpan(list90); - index = 0; - span90[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests and Deep Dungeon quest"); - reference89 = new ChangelogEntry("6.24", releaseDate39, list90); + ref ChangeEntry reference89 = ref span89[num3]; + num4 = 2; + List list90 = new List(num4); + CollectionsMarshal.SetCount(list90, num4); + Span span90 = CollectionsMarshal.AsSpan(list90); + num5 = 0; + span90[num5] = "Added item count to combat handling rework"; + num5++; + span90[num5] = "Updated Pandora conflicting features"; + reference89 = new ChangeEntry(EChangeCategory.Changed, "Combat handling improvements", list90); + num3++; + span89[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest to purchase Gysahl Greens if not in inventory"); + reference88 = new ChangelogEntry("6.29", releaseDate36, list89); num2++; ref ChangelogEntry reference90 = ref span[num2]; - DateOnly releaseDate40 = new DateOnly(2025, 10, 13); - index = 1; - List list91 = new List(index); - CollectionsMarshal.SetCount(list91, index); + DateOnly releaseDate37 = new DateOnly(2025, 10, 19); + num3 = 1; + List list91 = new List(num3); + CollectionsMarshal.SetCount(list91, num3); Span span91 = CollectionsMarshal.AsSpan(list91); - num3 = 0; - span91[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quest (Larder Logistics)"); - reference90 = new ChangelogEntry("6.23", releaseDate40, list91); + index = 0; + span91[index] = new ChangeEntry(EChangeCategory.Changed, "Reworked kill count combat handling - combat and enemy kills are now processed instantly"); + reference90 = new ChangelogEntry("6.28", releaseDate37, list91); num2++; ref ChangelogEntry reference91 = ref span[num2]; - DateOnly releaseDate41 = new DateOnly(2025, 10, 12); - num3 = 3; - List list92 = new List(num3); - CollectionsMarshal.SetCount(list92, num3); + DateOnly releaseDate38 = new DateOnly(2025, 10, 18); + index = 2; + List list92 = new List(index); + CollectionsMarshal.SetCount(list92, index); Span span92 = CollectionsMarshal.AsSpan(list92); - index = 0; - span92[index] = new ChangeEntry(EChangeCategory.Changed, "Prevent disabled or Locked quests from being started as 'Start as next quest'"); - index++; - span92[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); - index++; - span92[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Yok Huy quest and journal quest chain priority issues"); - reference91 = new ChangelogEntry("6.22", releaseDate41, list92); + num3 = 0; + span92[num3] = new ChangeEntry(EChangeCategory.Changed, "Improved Aether Current checking logic"); + num3++; + span92[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Chocobo Taxi Stand CheckSkip error and Patch 7.3 Fantasia unlock quest date/time"); + reference91 = new ChangelogEntry("6.27", releaseDate38, list92); num2++; ref ChangelogEntry reference92 = ref span[num2]; - DateOnly releaseDate42 = new DateOnly(2025, 10, 12); - index = 2; - List list93 = new List(index); - CollectionsMarshal.SetCount(list93, index); + DateOnly releaseDate39 = new DateOnly(2025, 10, 18); + num3 = 1; + List list93 = new List(num3); + CollectionsMarshal.SetCount(list93, num3); Span span93 = CollectionsMarshal.AsSpan(list93); - num3 = 0; - span93[num3] = new ChangeEntry(EChangeCategory.Added, "Added expansion abbreviation to journal window"); - num3++; - span93[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); - reference92 = new ChangelogEntry("6.21", releaseDate42, list93); + index = 0; + span93[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests"); + reference92 = new ChangelogEntry("6.26", releaseDate39, list93); num2++; ref ChangelogEntry reference93 = ref span[num2]; - DateOnly releaseDate43 = new DateOnly(2025, 10, 10); - num3 = 2; - List list94 = new List(num3); - CollectionsMarshal.SetCount(list94, num3); + DateOnly releaseDate40 = new DateOnly(2025, 10, 17); + index = 1; + List list94 = new List(index); + CollectionsMarshal.SetCount(list94, index); Span span94 = CollectionsMarshal.AsSpan(list94); - index = 0; - span94[index] = new ChangeEntry(EChangeCategory.Changed, "Allow completed repeatable quests to be used with 'Add quest and requirements to priority' feature"); - index++; - span94[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 quest (A Work of Cart)"); - reference93 = new ChangelogEntry("6.20", releaseDate43, list94); + num3 = 0; + span94[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added All Saints' Wake 2025 quests and 7.35 Yok Huy rank 4 quests"); + reference93 = new ChangelogEntry("6.25", releaseDate40, list94); num2++; ref ChangelogEntry reference94 = ref span[num2]; - DateOnly releaseDate44 = new DateOnly(2025, 10, 9); - index = 3; - List list95 = new List(index); - CollectionsMarshal.SetCount(list95, index); + DateOnly releaseDate41 = new DateOnly(2025, 10, 16); + num3 = 1; + List list95 = new List(num3); + CollectionsMarshal.SetCount(list95, num3); Span span95 = CollectionsMarshal.AsSpan(list95); - num3 = 0; - span95[num3] = new ChangeEntry(EChangeCategory.Added, "Added config to batch Allied Society quest turn-ins"); - num3++; - span95[num3] = new ChangeEntry(EChangeCategory.Changed, "Repeatable quests now show correct availability state in journal"); - num3++; - span95[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 2 quests"); - reference94 = new ChangelogEntry("6.19", releaseDate44, list95); + index = 0; + span95[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests and Deep Dungeon quest"); + reference94 = new ChangelogEntry("6.24", releaseDate41, list95); num2++; ref ChangelogEntry reference95 = ref span[num2]; - DateOnly releaseDate45 = new DateOnly(2025, 10, 9); - num3 = 2; - List list96 = new List(num3); - CollectionsMarshal.SetCount(list96, num3); + DateOnly releaseDate42 = new DateOnly(2025, 10, 13); + index = 1; + List list96 = new List(index); + CollectionsMarshal.SetCount(list96, index); Span span96 = CollectionsMarshal.AsSpan(list96); - index = 0; - span96[index] = new ChangeEntry(EChangeCategory.Changed, "Show once completed quests with improved state display"); - index++; - span96[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy daily quest and improvements to various Yok Huy quests"); - reference95 = new ChangelogEntry("6.18", releaseDate45, list96); + num3 = 0; + span96[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quest (Larder Logistics)"); + reference95 = new ChangelogEntry("6.23", releaseDate42, list96); num2++; ref ChangelogEntry reference96 = ref span[num2]; - DateOnly releaseDate46 = new DateOnly(2025, 10, 8); - index = 1; - List list97 = new List(index); - CollectionsMarshal.SetCount(list97, index); + DateOnly releaseDate43 = new DateOnly(2025, 10, 12); + num3 = 3; + List list97 = new List(num3); + CollectionsMarshal.SetCount(list97, num3); Span span97 = CollectionsMarshal.AsSpan(list97); - num3 = 0; - span97[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 and rank 2 quests"); - reference96 = new ChangelogEntry("6.17", releaseDate46, list97); + index = 0; + span97[index] = new ChangeEntry(EChangeCategory.Changed, "Prevent disabled or Locked quests from being started as 'Start as next quest'"); + index++; + span97[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); + index++; + span97[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Yok Huy quest and journal quest chain priority issues"); + reference96 = new ChangelogEntry("6.22", releaseDate43, list97); num2++; ref ChangelogEntry reference97 = ref span[num2]; - DateOnly releaseDate47 = new DateOnly(2025, 10, 8); - num3 = 1; - List list98 = new List(num3); - CollectionsMarshal.SetCount(list98, num3); + DateOnly releaseDate44 = new DateOnly(2025, 10, 12); + index = 2; + List list98 = new List(index); + CollectionsMarshal.SetCount(list98, index); Span span98 = CollectionsMarshal.AsSpan(list98); - index = 0; - span98[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon quest (Faerie Tale)"); - reference97 = new ChangelogEntry("6.16", releaseDate47, list98); + num3 = 0; + span98[num3] = new ChangeEntry(EChangeCategory.Added, "Added expansion abbreviation to journal window"); + num3++; + span98[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); + reference97 = new ChangelogEntry("6.21", releaseDate44, list98); num2++; ref ChangelogEntry reference98 = ref span[num2]; - DateOnly releaseDate48 = new DateOnly(2025, 10, 8); - index = 2; - List list99 = new List(index); - CollectionsMarshal.SetCount(list99, index); + DateOnly releaseDate45 = new DateOnly(2025, 10, 10); + num3 = 2; + List list99 = new List(num3); + CollectionsMarshal.SetCount(list99, num3); Span span99 = CollectionsMarshal.AsSpan(list99); - num3 = 0; - span99[num3] = new ChangeEntry(EChangeCategory.Changed, "Dalamud cleanup"); - num3++; - span99[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest level requirement check log spam"); - reference98 = new ChangelogEntry("6.15", releaseDate48, list99); + index = 0; + span99[index] = new ChangeEntry(EChangeCategory.Changed, "Allow completed repeatable quests to be used with 'Add quest and requirements to priority' feature"); + index++; + span99[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 quest (A Work of Cart)"); + reference98 = new ChangelogEntry("6.20", releaseDate45, list99); num2++; ref ChangelogEntry reference99 = ref span[num2]; - DateOnly releaseDate49 = new DateOnly(2025, 10, 8); - num3 = 1; - List list100 = new List(num3); - CollectionsMarshal.SetCount(list100, num3); + DateOnly releaseDate46 = new DateOnly(2025, 10, 9); + index = 3; + List list100 = new List(index); + CollectionsMarshal.SetCount(list100, index); Span span100 = CollectionsMarshal.AsSpan(list100); - index = 0; - span100[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check logic if quest were MSQ"); - reference99 = new ChangelogEntry("6.14", releaseDate49, list100); + num3 = 0; + span100[num3] = new ChangeEntry(EChangeCategory.Added, "Added config to batch Allied Society quest turn-ins"); + num3++; + span100[num3] = new ChangeEntry(EChangeCategory.Changed, "Repeatable quests now show correct availability state in journal"); + num3++; + span100[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 2 quests"); + reference99 = new ChangelogEntry("6.19", releaseDate46, list100); num2++; ref ChangelogEntry reference100 = ref span[num2]; - DateOnly releaseDate50 = new DateOnly(2025, 10, 8); - index = 2; - List list101 = new List(index); - CollectionsMarshal.SetCount(list101, index); + DateOnly releaseDate47 = new DateOnly(2025, 10, 9); + num3 = 2; + List list101 = new List(num3); + CollectionsMarshal.SetCount(list101, num3); Span span101 = CollectionsMarshal.AsSpan(list101); + index = 0; + span101[index] = new ChangeEntry(EChangeCategory.Changed, "Show once completed quests with improved state display"); + index++; + span101[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy daily quest and improvements to various Yok Huy quests"); + reference100 = new ChangelogEntry("6.18", releaseDate47, list101); + num2++; + ref ChangelogEntry reference101 = ref span[num2]; + DateOnly releaseDate48 = new DateOnly(2025, 10, 8); + index = 1; + List list102 = new List(index); + CollectionsMarshal.SetCount(list102, index); + Span span102 = CollectionsMarshal.AsSpan(list102); num3 = 0; - ref ChangeEntry reference101 = ref span101[num3]; - num4 = 3; - List list102 = new List(num4); - CollectionsMarshal.SetCount(list102, num4); - Span span102 = CollectionsMarshal.AsSpan(list102); - index2 = 0; - span102[index2] = "Context menu option to add required quests and their chain to priority list"; - index2++; - span102[index2] = "AetheryteShortcut to multiple quests"; - index2++; - span102[index2] = "Artisan as a recommended plugin/dependency"; - reference101 = new ChangeEntry(EChangeCategory.Added, "Quest improvements", list102); - num3++; - span101[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check and priority list issues"); - reference100 = new ChangelogEntry("6.13", releaseDate50, list101); + span102[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 and rank 2 quests"); + reference101 = new ChangelogEntry("6.17", releaseDate48, list102); num2++; ref ChangelogEntry reference102 = ref span[num2]; - DateOnly releaseDate51 = new DateOnly(2025, 10, 7); - num3 = 4; + DateOnly releaseDate49 = new DateOnly(2025, 10, 8); + num3 = 1; List list103 = new List(num3); CollectionsMarshal.SetCount(list103, num3); Span span103 = CollectionsMarshal.AsSpan(list103); index = 0; - ref ChangeEntry reference103 = ref span103[index]; - index2 = 4; - List list104 = new List(index2); - CollectionsMarshal.SetCount(list104, index2); - Span span104 = CollectionsMarshal.AsSpan(list104); - num4 = 0; - span104[num4] = "FATE combat handling with auto level syncing"; - num4++; - span104[num4] = "Start accepted quests from journal with 'Start as next quest'"; - num4++; - span104[num4] = "Update quest tracking when quests are hidden or prioritised in game"; - num4++; - span104[num4] = "QuestMap as a recommended plugin/dependency"; - reference103 = new ChangeEntry(EChangeCategory.Added, "FATE and quest tracking", list104); - index++; - ref ChangeEntry reference104 = ref span103[index]; - num4 = 3; - List list105 = new List(num4); - CollectionsMarshal.SetCount(list105, num4); - Span span105 = CollectionsMarshal.AsSpan(list105); - index2 = 0; - span105[index2] = "Always prioritise next quest during teleportation/zone transitions"; - index2++; - span105[index2] = "Improved accepted quest logic with abandoned quest detection"; - index2++; - span105[index2] = "Show quests without quest paths as Locked"; - reference104 = new ChangeEntry(EChangeCategory.Changed, "Quest prioritisation improvements", list105); - index++; - span103[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon, Hildibrand, Yok Huy, Monster Hunter Wilds Collab, and Doman Enclave quests"); - index++; - span103[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed accepted/active quest display and Hildibrand quest issues"); - reference102 = new ChangelogEntry("6.12", releaseDate51, list103); + span103[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon quest (Faerie Tale)"); + reference102 = new ChangelogEntry("6.16", releaseDate49, list103); + num2++; + ref ChangelogEntry reference103 = ref span[num2]; + DateOnly releaseDate50 = new DateOnly(2025, 10, 8); + index = 2; + List list104 = new List(index); + CollectionsMarshal.SetCount(list104, index); + Span span104 = CollectionsMarshal.AsSpan(list104); + num3 = 0; + span104[num3] = new ChangeEntry(EChangeCategory.Changed, "Dalamud cleanup"); + num3++; + span104[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest level requirement check log spam"); + reference103 = new ChangelogEntry("6.15", releaseDate50, list104); + num2++; + ref ChangelogEntry reference104 = ref span[num2]; + DateOnly releaseDate51 = new DateOnly(2025, 10, 8); + num3 = 1; + List list105 = new List(num3); + CollectionsMarshal.SetCount(list105, num3); + Span span105 = CollectionsMarshal.AsSpan(list105); + index = 0; + span105[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check logic if quest were MSQ"); + reference104 = new ChangelogEntry("6.14", releaseDate51, list105); num2++; ref ChangelogEntry reference105 = ref span[num2]; - DateOnly releaseDate52 = new DateOnly(2025, 10, 3); - index = 1; + DateOnly releaseDate52 = new DateOnly(2025, 10, 8); + index = 2; List list106 = new List(index); CollectionsMarshal.SetCount(list106, index); Span span106 = CollectionsMarshal.AsSpan(list106); num3 = 0; - span106[num3] = new ChangeEntry(EChangeCategory.Changed, "Added remaining checks for quest priority to prevent infinite teleport looping"); - reference105 = new ChangelogEntry("6.11", releaseDate52, list106); - num2++; - ref ChangelogEntry reference106 = ref span[num2]; - DateOnly releaseDate53 = new DateOnly(2025, 10, 2); - num3 = 1; - List list107 = new List(num3); - CollectionsMarshal.SetCount(list107, num3); - Span span107 = CollectionsMarshal.AsSpan(list107); - index = 0; - ref ChangeEntry reference107 = ref span107[index]; - index2 = 2; - List list108 = new List(index2); - CollectionsMarshal.SetCount(list108, index2); - Span span108 = CollectionsMarshal.AsSpan(list108); + ref ChangeEntry reference106 = ref span106[num3]; + num5 = 3; + List list107 = new List(num5); + CollectionsMarshal.SetCount(list107, num5); + Span span107 = CollectionsMarshal.AsSpan(list107); num4 = 0; - span108[num4] = "Don't show quests as available if player doesn't meet level requirements"; + span107[num4] = "Context menu option to add required quests and their chain to priority list"; num4++; - span108[num4] = "Updated 'required for MSQ' text in Crystal Tower quest preset window"; - reference107 = new ChangeEntry(EChangeCategory.Changed, "Quest window improvements", list108); - reference106 = new ChangelogEntry("6.10", releaseDate53, list107); + span107[num4] = "AetheryteShortcut to multiple quests"; + num4++; + span107[num4] = "Artisan as a recommended plugin/dependency"; + reference106 = new ChangeEntry(EChangeCategory.Added, "Quest improvements", list107); + num3++; + span106[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check and priority list issues"); + reference105 = new ChangelogEntry("6.13", releaseDate52, list106); num2++; - ref ChangelogEntry reference108 = ref span[num2]; - DateOnly releaseDate54 = new DateOnly(2025, 9, 21); - index = 5; - List list109 = new List(index); - CollectionsMarshal.SetCount(list109, index); - Span span109 = CollectionsMarshal.AsSpan(list109); - num3 = 0; - ref ChangeEntry reference109 = ref span109[num3]; - num4 = 4; - List list110 = new List(num4); - CollectionsMarshal.SetCount(list110, num4); - Span span110 = CollectionsMarshal.AsSpan(list110); - index2 = 0; - span110[index2] = "Reworked event quest handling - automatically displays when events are active"; - index2++; - span110[index2] = "Reworked journal system with improved filtering and display"; - index2++; - span110[index2] = "Reworked Priority Quests tab (Manual Priority and Quest Presets)"; - index2++; - span110[index2] = "Quest path viewer site (https://wigglymuffin.github.io/FFXIV-Tools/)"; - reference109 = new ChangeEntry(EChangeCategory.Added, "Major system reworks", list110); - num3++; - ref ChangeEntry reference110 = ref span109[num3]; - index2 = 4; - List list111 = new List(index2); - CollectionsMarshal.SetCount(list111, index2); - Span span111 = CollectionsMarshal.AsSpan(list111); - num4 = 0; - span111[num4] = "Questionable.IsQuestCompleted"; - num4++; - span111[num4] = "Questionable.IsQuestAvailable"; - num4++; - span111[num4] = "Questionable.IsQuestAccepted"; - num4++; - span111[num4] = "Questionable.IsQuestUnobtainable"; - reference110 = new ChangeEntry(EChangeCategory.Added, "New IPC commands", list111); - num3++; - ref ChangeEntry reference111 = ref span109[num3]; - num4 = 5; - List list112 = new List(num4); - CollectionsMarshal.SetCount(list112, num4); - Span span112 = CollectionsMarshal.AsSpan(list112); - index2 = 0; - span112[index2] = "Improved JSON quest validation with specific error reasons"; - index2++; - span112[index2] = "Added stop at sequence stop condition"; - index2++; - span112[index2] = "Improved Pandora plugin conflict detection"; - index2++; - span112[index2] = "Improved DialogueChoices regex matching"; - index2++; - span112[index2] = "Improved refresh checker for all quest states"; - reference111 = new ChangeEntry(EChangeCategory.Changed, "Various improvements", list112); - num3++; - span109[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.31 Occult Crescent quests"); - num3++; - span109[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed cutscene crashes, Single Player Duty triggers, and various quest issues"); - reference108 = new ChangelogEntry("6.9", releaseDate54, list109); - num2++; - ref ChangelogEntry reference112 = ref span[num2]; - DateOnly releaseDate55 = new DateOnly(2025, 9, 2); + ref ChangelogEntry reference107 = ref span[num2]; + DateOnly releaseDate53 = new DateOnly(2025, 10, 7); num3 = 4; - List list113 = new List(num3); - CollectionsMarshal.SetCount(list113, num3); - Span span113 = CollectionsMarshal.AsSpan(list113); + List list108 = new List(num3); + CollectionsMarshal.SetCount(list108, num3); + Span span108 = CollectionsMarshal.AsSpan(list108); index = 0; - ref ChangeEntry reference113 = ref span113[index]; - index2 = 4; - List list114 = new List(index2); - CollectionsMarshal.SetCount(list114, index2); - Span span114 = CollectionsMarshal.AsSpan(list114); + ref ChangeEntry reference108 = ref span108[index]; + num4 = 4; + List list109 = new List(num4); + CollectionsMarshal.SetCount(list109, num4); + Span span109 = CollectionsMarshal.AsSpan(list109); + num5 = 0; + span109[num5] = "FATE combat handling with auto level syncing"; + num5++; + span109[num5] = "Start accepted quests from journal with 'Start as next quest'"; + num5++; + span109[num5] = "Update quest tracking when quests are hidden or prioritised in game"; + num5++; + span109[num5] = "QuestMap as a recommended plugin/dependency"; + reference108 = new ChangeEntry(EChangeCategory.Added, "FATE and quest tracking", list109); + index++; + ref ChangeEntry reference109 = ref span108[index]; + num5 = 3; + List list110 = new List(num5); + CollectionsMarshal.SetCount(list110, num5); + Span span110 = CollectionsMarshal.AsSpan(list110); num4 = 0; - span114[num4] = "Help commands and priority quest command"; + span110[num4] = "Always prioritise next quest during teleportation/zone transitions"; num4++; - span114[num4] = "Prevent 'CompleteQuest' step setting"; + span110[num4] = "Improved accepted quest logic with abandoned quest detection"; num4++; - span114[num4] = "Duty counts and controls in 'Quest Battles' tab"; - num4++; - span114[num4] = "'Refresh quest timer' setting (WIP)"; - reference113 = new ChangeEntry(EChangeCategory.Added, "Command and UI improvements", list114); + span110[num4] = "Show quests without quest paths as Locked"; + reference109 = new ChangeEntry(EChangeCategory.Changed, "Quest prioritisation improvements", list110); index++; - span113[index] = new ChangeEntry(EChangeCategory.Changed, "Improved 'Clear All' buttons to require CTRL being held"); + span108[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon, Hildibrand, Yok Huy, Monster Hunter Wilds Collab, and Doman Enclave quests"); index++; - span113[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Zodiac quests and 7.31 Cosmic/Occult Crescent quests"); - index++; - span113[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Fishing for Friendship and Cosmic Exploration quests"); - reference112 = new ChangelogEntry("6.8", releaseDate55, list113); + span108[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed accepted/active quest display and Hildibrand quest issues"); + reference107 = new ChangelogEntry("6.12", releaseDate53, list108); num2++; - ref ChangelogEntry reference114 = ref span[num2]; - DateOnly releaseDate56 = new DateOnly(2025, 8, 27); - index = 4; - List list115 = new List(index); - CollectionsMarshal.SetCount(list115, index); - Span span115 = CollectionsMarshal.AsSpan(list115); + ref ChangelogEntry reference110 = ref span[num2]; + DateOnly releaseDate54 = new DateOnly(2025, 10, 3); + index = 1; + List list111 = new List(index); + CollectionsMarshal.SetCount(list111, index); + Span span111 = CollectionsMarshal.AsSpan(list111); num3 = 0; - ref ChangeEntry reference115 = ref span115[num3]; + span111[num3] = new ChangeEntry(EChangeCategory.Changed, "Added remaining checks for quest priority to prevent infinite teleport looping"); + reference110 = new ChangelogEntry("6.11", releaseDate54, list111); + num2++; + ref ChangelogEntry reference111 = ref span[num2]; + DateOnly releaseDate55 = new DateOnly(2025, 10, 2); + num3 = 1; + List list112 = new List(num3); + CollectionsMarshal.SetCount(list112, num3); + Span span112 = CollectionsMarshal.AsSpan(list112); + index = 0; + ref ChangeEntry reference112 = ref span112[index]; num4 = 2; + List list113 = new List(num4); + CollectionsMarshal.SetCount(list113, num4); + Span span113 = CollectionsMarshal.AsSpan(list113); + num5 = 0; + span113[num5] = "Don't show quests as available if player doesn't meet level requirements"; + num5++; + span113[num5] = "Updated 'required for MSQ' text in Crystal Tower quest preset window"; + reference112 = new ChangeEntry(EChangeCategory.Changed, "Quest window improvements", list113); + reference111 = new ChangelogEntry("6.10", releaseDate55, list112); + num2++; + ref ChangelogEntry reference113 = ref span[num2]; + DateOnly releaseDate56 = new DateOnly(2025, 9, 21); + index = 5; + List list114 = new List(index); + CollectionsMarshal.SetCount(list114, index); + Span span114 = CollectionsMarshal.AsSpan(list114); + num3 = 0; + ref ChangeEntry reference114 = ref span114[num3]; + num5 = 4; + List list115 = new List(num5); + CollectionsMarshal.SetCount(list115, num5); + Span span115 = CollectionsMarshal.AsSpan(list115); + num4 = 0; + span115[num4] = "Reworked event quest handling - automatically displays when events are active"; + num4++; + span115[num4] = "Reworked journal system with improved filtering and display"; + num4++; + span115[num4] = "Reworked Priority Quests tab (Manual Priority and Quest Presets)"; + num4++; + span115[num4] = "Quest path viewer site (https://wigglymuffin.github.io/FFXIV-Tools/)"; + reference114 = new ChangeEntry(EChangeCategory.Added, "Major system reworks", list115); + num3++; + ref ChangeEntry reference115 = ref span114[num3]; + num4 = 4; List list116 = new List(num4); CollectionsMarshal.SetCount(list116, num4); Span span116 = CollectionsMarshal.AsSpan(list116); - index2 = 0; - span116[index2] = "Icon to 'Clear All' button in stop conditions"; - index2++; - span116[index2] = "Duty counts and 'Enable All' button in 'Duties' tab"; - reference115 = new ChangeEntry(EChangeCategory.Added, "UI improvements", list116); + num5 = 0; + span116[num5] = "Questionable.IsQuestCompleted"; + num5++; + span116[num5] = "Questionable.IsQuestAvailable"; + num5++; + span116[num5] = "Questionable.IsQuestAccepted"; + num5++; + span116[num5] = "Questionable.IsQuestUnobtainable"; + reference115 = new ChangeEntry(EChangeCategory.Added, "New IPC commands", list116); num3++; - span115[num3] = new ChangeEntry(EChangeCategory.Changed, "Renamed 'Clear' button to 'Clear All' in priority window"); - num3++; - span115[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Rising 2025 Event Quests"); - num3++; - span115[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed clipboard assigning blacklist to whitelist in 'Duties' tab"); - reference114 = new ChangelogEntry("6.7", releaseDate56, list115); - num2++; - ref ChangelogEntry reference116 = ref span[num2]; - DateOnly releaseDate57 = new DateOnly(2025, 8, 25); - num3 = 2; - List list117 = new List(num3); - CollectionsMarshal.SetCount(list117, num3); - Span span117 = CollectionsMarshal.AsSpan(list117); - index = 0; - ref ChangeEntry reference117 = ref span117[index]; - index2 = 2; - List list118 = new List(index2); - CollectionsMarshal.SetCount(list118, index2); - Span span118 = CollectionsMarshal.AsSpan(list118); + ref ChangeEntry reference116 = ref span114[num3]; + num5 = 5; + List list117 = new List(num5); + CollectionsMarshal.SetCount(list117, num5); + Span span117 = CollectionsMarshal.AsSpan(list117); num4 = 0; - span118[num4] = "Missing emotes to schema and emote handler"; + span117[num4] = "Improved JSON quest validation with specific error reasons"; num4++; - span118[num4] = "Improved stop conditions with 'Clear All' button"; - reference117 = new ChangeEntry(EChangeCategory.Added, "Emote support and stop conditions", list118); - index++; - span117[index] = new ChangeEntry(EChangeCategory.Changed, "Stop at level functionality"); - reference116 = new ChangelogEntry("6.6", releaseDate57, list117); - num2++; - ref ChangelogEntry reference118 = ref span[num2]; - DateOnly releaseDate58 = new DateOnly(2025, 8, 25); - index = 2; - List list119 = new List(index); - CollectionsMarshal.SetCount(list119, index); - Span span119 = CollectionsMarshal.AsSpan(list119); - num3 = 0; - span119[num3] = new ChangeEntry(EChangeCategory.Fixed, "Potential fix to single/solo duties softlocking"); + span117[num4] = "Added stop at sequence stop condition"; + num4++; + span117[num4] = "Improved Pandora plugin conflict detection"; + num4++; + span117[num4] = "Improved DialogueChoices regex matching"; + num4++; + span117[num4] = "Improved refresh checker for all quest states"; + reference116 = new ChangeEntry(EChangeCategory.Changed, "Various improvements", list117); num3++; - span119[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added San d'Oria: The Second Walk and various side quests"); - reference118 = new ChangelogEntry("6.5", releaseDate58, list119); + span114[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.31 Occult Crescent quests"); + num3++; + span114[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed cutscene crashes, Single Player Duty triggers, and various quest issues"); + reference113 = new ChangelogEntry("6.9", releaseDate56, list114); + num2++; + ref ChangelogEntry reference117 = ref span[num2]; + DateOnly releaseDate57 = new DateOnly(2025, 9, 2); + num3 = 4; + List list118 = new List(num3); + CollectionsMarshal.SetCount(list118, num3); + Span span118 = CollectionsMarshal.AsSpan(list118); + index = 0; + ref ChangeEntry reference118 = ref span118[index]; + num4 = 4; + List list119 = new List(num4); + CollectionsMarshal.SetCount(list119, num4); + Span span119 = CollectionsMarshal.AsSpan(list119); + num5 = 0; + span119[num5] = "Help commands and priority quest command"; + num5++; + span119[num5] = "Prevent 'CompleteQuest' step setting"; + num5++; + span119[num5] = "Duty counts and controls in 'Quest Battles' tab"; + num5++; + span119[num5] = "'Refresh quest timer' setting (WIP)"; + reference118 = new ChangeEntry(EChangeCategory.Added, "Command and UI improvements", list119); + index++; + span118[index] = new ChangeEntry(EChangeCategory.Changed, "Improved 'Clear All' buttons to require CTRL being held"); + index++; + span118[index] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Zodiac quests and 7.31 Cosmic/Occult Crescent quests"); + index++; + span118[index] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Fishing for Friendship and Cosmic Exploration quests"); + reference117 = new ChangelogEntry("6.8", releaseDate57, list118); + num2++; + ref ChangelogEntry reference119 = ref span[num2]; + DateOnly releaseDate58 = new DateOnly(2025, 8, 27); + index = 4; + List list120 = new List(index); + CollectionsMarshal.SetCount(list120, index); + Span span120 = CollectionsMarshal.AsSpan(list120); + num3 = 0; + ref ChangeEntry reference120 = ref span120[num3]; + num5 = 2; + List list121 = new List(num5); + CollectionsMarshal.SetCount(list121, num5); + Span span121 = CollectionsMarshal.AsSpan(list121); + num4 = 0; + span121[num4] = "Icon to 'Clear All' button in stop conditions"; + num4++; + span121[num4] = "Duty counts and 'Enable All' button in 'Duties' tab"; + reference120 = new ChangeEntry(EChangeCategory.Added, "UI improvements", list121); + num3++; + span120[num3] = new ChangeEntry(EChangeCategory.Changed, "Renamed 'Clear' button to 'Clear All' in priority window"); + num3++; + span120[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Rising 2025 Event Quests"); + num3++; + span120[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed clipboard assigning blacklist to whitelist in 'Duties' tab"); + reference119 = new ChangelogEntry("6.7", releaseDate58, list120); + num2++; + ref ChangelogEntry reference121 = ref span[num2]; + DateOnly releaseDate59 = new DateOnly(2025, 8, 25); + num3 = 2; + List list122 = new List(num3); + CollectionsMarshal.SetCount(list122, num3); + Span span122 = CollectionsMarshal.AsSpan(list122); + index = 0; + ref ChangeEntry reference122 = ref span122[index]; + num4 = 2; + List list123 = new List(num4); + CollectionsMarshal.SetCount(list123, num4); + Span span123 = CollectionsMarshal.AsSpan(list123); + num5 = 0; + span123[num5] = "Missing emotes to schema and emote handler"; + num5++; + span123[num5] = "Improved stop conditions with 'Clear All' button"; + reference122 = new ChangeEntry(EChangeCategory.Added, "Emote support and stop conditions", list123); + index++; + span122[index] = new ChangeEntry(EChangeCategory.Changed, "Stop at level functionality"); + reference121 = new ChangelogEntry("6.6", releaseDate59, list122); + num2++; + ref ChangelogEntry reference123 = ref span[num2]; + DateOnly releaseDate60 = new DateOnly(2025, 8, 25); + index = 2; + List list124 = new List(index); + CollectionsMarshal.SetCount(list124, index); + Span span124 = CollectionsMarshal.AsSpan(list124); + num3 = 0; + span124[num3] = new ChangeEntry(EChangeCategory.Fixed, "Potential fix to single/solo duties softlocking"); + num3++; + span124[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added San d'Oria: The Second Walk and various side quests"); + reference123 = new ChangelogEntry("6.5", releaseDate60, list124); Changelogs = list; } } diff --git a/Questionable/Questionable.Functions/GameFunctions.cs b/Questionable/Questionable.Functions/GameFunctions.cs index d1198f9..d9d615a 100644 --- a/Questionable/Questionable.Functions/GameFunctions.cs +++ b/Questionable/Questionable.Functions/GameFunctions.cs @@ -121,7 +121,7 @@ internal sealed class GameFunctions return false; } - public IGameObject? FindObjectByDataId(uint dataId, Dalamud.Game.ClientState.Objects.Enums.ObjectKind? kind = null) + public IGameObject? FindObjectByDataId(uint dataId, Dalamud.Game.ClientState.Objects.Enums.ObjectKind? kind = null, bool warnIfMissing = true) { foreach (IGameObject item in _objectTable) { @@ -132,7 +132,10 @@ internal sealed class GameFunctions return item; } } - _logger.LogWarning("Could not find GameObject with dataId {DataId}", dataId); + if (warnIfMissing) + { + _logger.LogWarning("Could not find GameObject with dataId {DataId}", dataId); + } return null; } @@ -581,6 +584,25 @@ internal sealed class GameFunctions return ptr->CurrentFate->FateId; } + public unsafe bool IsFateStillActive(ushort fateId) + { + if (fateId == 0) + { + return false; + } + FateManager* ptr = FateManager.Instance(); + if (ptr == null) + { + return false; + } + FateContext* fateById = ptr->GetFateById(fateId); + if (fateById == null) + { + return false; + } + return fateById->State == FateState.Running; + } + public uint GetItemLevel(uint itemId) { return (_dataManager.GetExcelSheet()?.GetRowOrDefault(itemId))?.LevelItem.RowId ?? 0; diff --git a/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs b/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs index fc45a05..7d74247 100644 --- a/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs +++ b/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs @@ -87,6 +87,11 @@ internal sealed class ActiveQuestComponent public void Draw(bool isMinimized) { + if (_fateController.IsRunning) + { + DrawFateActive(isMinimized); + return; + } (QuestController.QuestProgress, QuestController.ECurrentQuestType)? currentQuestDetails = _questController.CurrentQuestDetails; QuestController.QuestProgress questProgress = currentQuestDetails?.Item1; QuestController.ECurrentQuestType? currentQuestType = currentQuestDetails?.Item2; @@ -131,12 +136,12 @@ internal sealed class ActiveQuestComponent if (interactionType == EInteractionType.WaitForManualProgress || interactionType == EInteractionType.Snipe || interactionType == EInteractionType.Instruction) { flag = true; - goto IL_0154; + goto IL_0169; } } flag = false; - goto IL_0154; - IL_0154: + goto IL_0169; + IL_0169: if (flag) { color.Push(ImGuiCol.Text, ImGuiColors.DalamudOrange); @@ -178,7 +183,7 @@ internal sealed class ActiveQuestComponent text2.AppendFormatted((item2 == 1) ? string.Empty : "s"); text2.AppendLiteral(" - Leveling mode will start automatically"); ImGui.TextColored(in col, text2); - using (ImRaii.Disabled(_questController.IsRunning || !_autoDutyIpc.IsStopped())) + using (ImRaii.Disabled(_questController.IsRunning || _fateController.IsRunning || !_autoDutyIpc.IsStopped())) { if (ImGuiComponents.IconButton(FontAwesomeIcon.Play)) { @@ -247,6 +252,32 @@ internal sealed class ActiveQuestComponent } } + private void DrawFateActive(bool isMinimized) + { + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGold)) + { + ImU8String text = new ImU8String(6, 1); + text.AppendLiteral("FATE: "); + text.AppendFormatted(Shorten(_fateController.CurrentFate.Name)); + ImGui.TextUnformatted(text); + } + IList remainingTaskNames = _fateController.GetRemainingTaskNames(); + if (remainingTaskNames.Count > 0) + { + ImGui.TextColored(ImGuiColors.DalamudGrey, remainingTaskNames[0]); + } + if (!isMinimized) + { + string text2 = (_fateController.CycleLimit.HasValue ? $"Cycle {_fateController.CompletedCycles + 1} / {_fateController.CycleLimit}" : $"Cycle {_fateController.CompletedCycles + 1}"); + ImGui.TextColored(ImGuiColors.DalamudGrey3, text2); + } + if (ImGuiComponents.IconButton(FontAwesomeIcon.Stop)) + { + _fateController.Stop("UI stop"); + _movementController.Stop(); + } + } + private void DrawQuestNames(QuestController.QuestProgress currentQuest, QuestController.ECurrentQuestType? currentQuestType) { if (currentQuestType == QuestController.ECurrentQuestType.Simulated) @@ -563,7 +594,7 @@ internal sealed class ActiveQuestComponent private void DrawQuestButtons(QuestController.QuestProgress currentQuest, QuestStep? currentStep, QuestProgressInfo? questProgressInfo, bool isMinimized) { - using (ImRaii.Disabled(_questController.IsRunning)) + using (ImRaii.Disabled(_questController.IsRunning || _fateController.IsRunning)) { if (ImGuiComponents.IconButton(FontAwesomeIcon.Play)) { diff --git a/Questionable/Questionable.Windows/FateSelectionWindow.cs b/Questionable/Questionable.Windows/FateSelectionWindow.cs index d65f2df..9385541 100644 --- a/Questionable/Questionable.Windows/FateSelectionWindow.cs +++ b/Questionable/Questionable.Windows/FateSelectionWindow.cs @@ -13,6 +13,8 @@ using Dalamud.Interface.Windowing; using LLib.ImGui; using Questionable.Controller; using Questionable.Data; +using Questionable.Functions; +using Questionable.Model; using Questionable.Model.Questing; using Questionable.Windows.QuestComponents; @@ -28,17 +30,23 @@ internal sealed class FateSelectionWindow : LWindow private readonly MovementController _movementController; + private readonly QuestFunctions _questFunctions; + + private readonly QuestData _questData; + private readonly TerritoryData _territoryData; private int _cycleLimit; - public FateSelectionWindow(FateController fateController, FateDefinitionRegistry fateDefinitionRegistry, QuestController questController, MovementController movementController, TerritoryData territoryData) + public FateSelectionWindow(FateController fateController, FateDefinitionRegistry fateDefinitionRegistry, QuestController questController, MovementController movementController, QuestFunctions questFunctions, QuestData questData, TerritoryData territoryData) : base("FATE Farming###QuestionableFateFarming") { _fateController = fateController; _fateDefinitionRegistry = fateDefinitionRegistry; _questController = questController; _movementController = movementController; + _questFunctions = questFunctions; + _questData = questData; _territoryData = territoryData; base.Size = new Vector2(600f, 400f); base.SizeCondition = ImGuiCond.FirstUseEver; @@ -335,12 +343,31 @@ internal sealed class FateSelectionWindow : LWindow private void DrawFateRowActions(FateDefinition fate, bool disabled) { - using (ImRaii.Disabled(disabled)) + bool flag = fate.RequiredQuestId.HasValue && !_questFunctions.IsQuestComplete(new QuestId(fate.RequiredQuestId.Value)); + ImU8String id = new ImU8String(5, 1); + id.AppendLiteral("fate_"); + id.AppendFormatted(fate.Name); + using (ImRaii.PushId(id)) { - ImU8String id = new ImU8String(5, 1); - id.AppendLiteral("fate_"); - id.AppendFormatted(fate.Name); - using (ImRaii.PushId(id)) + if (flag) + { + using (ImRaii.PushFont(UiBuilder.IconFont)) + { + ImGui.TextColored(ImGuiColors.DalamudRed, FontAwesomeIcon.Times.ToIconString()); + } + if (ImGui.IsItemHovered()) + { + IQuestInfo questInfo; + string value = (_questData.TryGetQuestInfo(new QuestId(fate.RequiredQuestId.Value), out questInfo) ? questInfo.Name : fate.RequiredQuestId.Value.ToString(CultureInfo.InvariantCulture)); + ImU8String tooltip = new ImU8String(33, 1); + tooltip.AppendLiteral("Requires \""); + tooltip.AppendFormatted(value); + tooltip.AppendLiteral("\" to be completed first"); + ImGui.SetTooltip(tooltip); + } + return; + } + using (ImRaii.Disabled(disabled)) { if (ImGuiComponents.IconButton(FontAwesomeIcon.Play)) { @@ -350,16 +377,16 @@ internal sealed class FateSelectionWindow : LWindow _fateController.Start(fate, cycleLimit); } } - } - if (disabled && ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled)) - { - if (_fateController.IsRunning) + if (disabled && ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled)) { - ImGui.SetTooltip("Already farming a FATE"); - } - else - { - ImGui.SetTooltip("Stop quest automation first"); + if (_fateController.IsRunning) + { + ImGui.SetTooltip("Already farming a FATE"); + } + else + { + ImGui.SetTooltip("Stop quest automation first"); + } } } } diff --git a/Questionable/Questionable.Windows/QuestWindow.cs b/Questionable/Questionable.Windows/QuestWindow.cs index 178ba74..ba096c6 100644 --- a/Questionable/Questionable.Windows/QuestWindow.cs +++ b/Questionable/Questionable.Windows/QuestWindow.cs @@ -18,6 +18,8 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig { private static readonly Version PluginVersion = typeof(QuestionablePlugin).Assembly.GetName().Version; + private const string TestingSuffix = ""; + private readonly IDalamudPluginInterface _pluginInterface; private readonly QuestController _questController;