diff --git a/Questionable/Questionable.Controller.GameUi/InteractionUiController.cs b/Questionable/Questionable.Controller.GameUi/InteractionUiController.cs index 1642148..ac3dee9 100644 --- a/Questionable/Questionable.Controller.GameUi/InteractionUiController.cs +++ b/Questionable/Questionable.Controller.GameUi/InteractionUiController.cs @@ -1054,7 +1054,7 @@ internal sealed class InteractionUiController : IDisposable private unsafe void EasterMowingResultPostSetup(AddonEvent type, AddonArgs args) { - if (_seasonalDutyController.IsRunning) + if (_seasonalDutyController.IsRunning || ShouldHandleUiInteractions) { _logger.LogInformation("Dismissing EasterMowingResult"); AtkUnitBase* address = (AtkUnitBase*)args.Addon.Address; diff --git a/Questionable/Questionable.Controller/QuestController.cs b/Questionable/Questionable.Controller/QuestController.cs index 96c340b..ecbe977 100644 --- a/Questionable/Questionable.Controller/QuestController.cs +++ b/Questionable/Questionable.Controller/QuestController.cs @@ -101,6 +101,8 @@ internal sealed class QuestController : MiniTaskController private readonly FateController _fateController; + private readonly SeasonalDutyController _seasonalDutyController; + private readonly QuestRegistry _questRegistry; private readonly JournalData _journalData; @@ -246,7 +248,7 @@ internal sealed class QuestController : MiniTaskController public event AutomationTypeChangedEventHandler? AutomationTypeChanged; - public QuestController(IClientState clientState, IObjectTable objectTable, GameFunctions gameFunctions, QuestFunctions questFunctions, MovementController movementController, CombatController combatController, GatheringController gatheringController, FateController fateController, ILogger logger, QuestRegistry questRegistry, JournalData journalData, IKeyState keyState, IChatGui chatGui, ICondition condition, IToastGui toastGui, Configuration configuration, TaskCreator taskCreator, IServiceProvider serviceProvider, InterruptHandler interruptHandler, IDataManager dataManager, SinglePlayerDutyConfigComponent singlePlayerDutyConfigComponent, AutoDutyIpc autoDutyIpc, IDalamudPluginInterface pluginInterface) + public QuestController(IClientState clientState, IObjectTable objectTable, GameFunctions gameFunctions, QuestFunctions questFunctions, MovementController movementController, CombatController combatController, GatheringController gatheringController, FateController fateController, SeasonalDutyController seasonalDutyController, ILogger logger, QuestRegistry questRegistry, JournalData journalData, IKeyState keyState, IChatGui chatGui, ICondition condition, IToastGui toastGui, Configuration configuration, TaskCreator taskCreator, IServiceProvider serviceProvider, InterruptHandler interruptHandler, IDataManager dataManager, SinglePlayerDutyConfigComponent singlePlayerDutyConfigComponent, AutoDutyIpc autoDutyIpc, IDalamudPluginInterface pluginInterface) : base(chatGui, condition, serviceProvider, interruptHandler, dataManager, logger) { _clientState = clientState; @@ -257,6 +259,7 @@ internal sealed class QuestController : MiniTaskController _combatController = combatController; _gatheringController = gatheringController; _fateController = fateController; + _seasonalDutyController = seasonalDutyController; _questRegistry = questRegistry; _journalData = journalData; _keyState = keyState; @@ -922,6 +925,7 @@ internal sealed class QuestController : MiniTaskController _combatController.Stop("ClearTasksInternal"); _gatheringController.Stop("ClearTasksInternal"); _fateController.Stop("ClearTasksInternal"); + _seasonalDutyController.Stop("ClearTasksInternal"); } public override void Stop(string label) @@ -949,6 +953,7 @@ internal sealed class QuestController : MiniTaskController _combatController.Stop(label); _gatheringController.Stop(label); _fateController.Stop(label); + _seasonalDutyController.Stop(label); } private void CheckNextTasks(string label) @@ -1248,6 +1253,7 @@ internal sealed class QuestController : MiniTaskController _combatController.Stop("Execute next step"); _gatheringController.Stop("Execute next step"); _fateController.Stop("Execute next step"); + _seasonalDutyController.Stop("Execute next step"); try { foreach (ITask item5 in _taskCreator.CreateTasks(CurrentQuest.Quest, CurrentQuest.Sequence, questSequence, step)) diff --git a/Questionable/Questionable.Controller/SeasonalDutyController.cs b/Questionable/Questionable.Controller/SeasonalDutyController.cs index 1802777..5b7aa9e 100644 --- a/Questionable/Questionable.Controller/SeasonalDutyController.cs +++ b/Questionable/Questionable.Controller/SeasonalDutyController.cs @@ -9,6 +9,7 @@ using Questionable.Controller.Steps.Common; using Questionable.Controller.Steps.Interactions; using Questionable.Controller.Steps.Movement; using Questionable.Controller.Steps.Shared; +using Questionable.Functions; using Questionable.Model.Questing; namespace Questionable.Controller; @@ -17,6 +18,8 @@ internal sealed class SeasonalDutyController : MiniTaskController _logger; @@ -49,10 +52,11 @@ internal sealed class SeasonalDutyController : MiniTaskController logger, MovementController movementController, IClientState clientState) + public SeasonalDutyController(IChatGui chatGui, ICondition condition, IServiceProvider serviceProvider, InterruptHandler interruptHandler, IDataManager dataManager, ILogger logger, MovementController movementController, GameFunctions gameFunctions, IClientState clientState) : base(chatGui, condition, serviceProvider, interruptHandler, dataManager, logger) { _movementController = movementController; + _gameFunctions = gameFunctions; _clientState = clientState; _logger = logger; } @@ -89,26 +93,41 @@ internal sealed class SeasonalDutyController : MiniTaskController _clientState.TerritoryType == _currentDuty.DutyTerritoryId, $"Wait(territory: {currentDuty.DutyTerritoryId})")); - _taskQueue.Enqueue(new ClearObjectsWithAction.ClearTask(currentDuty.DataIds, currentDuty.Action, currentDuty.DutyTerritoryId, currentDuty.StopDistance, currentDuty.WaypointPositions)); - _taskQueue.Enqueue(new WaitCondition.Task(() => _clientState.TerritoryType != _currentDuty.DutyTerritoryId, "Wait(duty end)")); - _taskQueue.Enqueue(new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(3L))); + return; } + SeasonalDutyDefinition duty = _currentDuty; + _logger.LogInformation("Enqueuing seasonal duty cycle for {DutyName}", duty.Name); + if (_clientState.TerritoryType != duty.DutyTerritoryId) + { + if (_clientState.TerritoryType != duty.TerritoryId) + { + _taskQueue.Enqueue(new AetheryteShortcut.Task(null, null, duty.Aetheryte, duty.TerritoryId)); + } + if (duty.AethernetShortcut != null) + { + _taskQueue.Enqueue(new AethernetShortcut.Task(duty.AethernetShortcut.From, duty.AethernetShortcut.To)); + } + _taskQueue.Enqueue(new MoveTask(duty.TerritoryId, duty.NpcPosition, null, 3f)); + _taskQueue.Enqueue(new Mount.UnmountTask()); + bool interacted = false; + _taskQueue.Enqueue(new WaitCondition.Task(delegate + { + if (_clientState.TerritoryType == _currentDuty.DutyTerritoryId) + { + return true; + } + if (!interacted) + { + interacted = _gameFunctions.InteractWith(duty.NpcDataId); + } + return false; + }, $"InteractAndWait(territory: {duty.DutyTerritoryId})")); + } + _taskQueue.Enqueue(new ClearObjectsWithAction.ClearTask(duty.DataIds, duty.Action, duty.DutyTerritoryId, duty.StopDistance, duty.WaypointPositions)); + _taskQueue.Enqueue(new WaitCondition.Task(() => _clientState.TerritoryType != _currentDuty.DutyTerritoryId, "Wait(duty end)")); + _taskQueue.Enqueue(new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(3L))); } public override void Stop(string label) diff --git a/Questionable/Questionable.Data/ChangelogData.cs b/Questionable/Questionable.Data/ChangelogData.cs index 9a14997..e81f31c 100644 --- a/Questionable/Questionable.Data/ChangelogData.cs +++ b/Questionable/Questionable.Data/ChangelogData.cs @@ -11,47 +11,49 @@ internal static class ChangelogData static ChangelogData() { - int num = 63; + int num = 64; List list = new List(num); CollectionsMarshal.SetCount(list, num); Span span = CollectionsMarshal.AsSpan(list); ref ChangelogEntry reference = ref span[0]; DateOnly releaseDate = new DateOnly(2026, 3, 24); - int num2 = 3; + int num2 = 1; List list2 = new List(num2); CollectionsMarshal.SetCount(list2, num2); - Span span2 = CollectionsMarshal.AsSpan(list2); - ref ChangeEntry reference2 = ref span2[0]; - int num3 = 1; + ref ChangeEntry reference2 = ref CollectionsMarshal.AsSpan(list2)[0]; + int num3 = 2; List list3 = new List(num3); CollectionsMarshal.SetCount(list3, num3); - CollectionsMarshal.AsSpan(list3)[0] = "Add seasonal duty farming system (/qst duty)"; - reference2 = new ChangeEntry(EChangeCategory.Added, "New Features", list3); - ref ChangeEntry reference3 = ref span2[1]; - num3 = 1; - List list4 = new List(num3); - CollectionsMarshal.SetCount(list4, num3); - CollectionsMarshal.AsSpan(list4)[0] = "Add Hatching-tide 2026 quest"; - reference3 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list4); - ref ChangeEntry reference4 = ref span2[2]; + Span span2 = CollectionsMarshal.AsSpan(list3); + span2[0] = "Add duty handling to external and qst"; + span2[1] = "Fix duty farming NPC interact getting stuck after zone transition into duty"; + reference2 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list3); + reference = new ChangelogEntry("7.4.19", releaseDate, list2); + ref ChangelogEntry reference3 = ref span[1]; + DateOnly releaseDate2 = new DateOnly(2026, 3, 24); + num2 = 3; + List list4 = new List(num2); + CollectionsMarshal.SetCount(list4, num2); + Span span3 = CollectionsMarshal.AsSpan(list4); + ref ChangeEntry reference4 = ref span3[0]; num3 = 1; List list5 = new List(num3); CollectionsMarshal.SetCount(list5, num3); - CollectionsMarshal.AsSpan(list5)[0] = "Quest path fixes"; - reference4 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list5); - reference = new ChangelogEntry("7.4.18", releaseDate, list2); - ref ChangelogEntry reference5 = ref span[1]; - DateOnly releaseDate2 = new DateOnly(2026, 3, 1); - num2 = 1; - List list6 = new List(num2); - CollectionsMarshal.SetCount(list6, num2); - ref ChangeEntry reference6 = ref CollectionsMarshal.AsSpan(list6)[0]; + CollectionsMarshal.AsSpan(list5)[0] = "Add seasonal duty farming system (/qst duty)"; + reference4 = new ChangeEntry(EChangeCategory.Added, "New Features", list5); + ref ChangeEntry reference5 = ref span3[1]; + num3 = 1; + List list6 = new List(num3); + CollectionsMarshal.SetCount(list6, num3); + CollectionsMarshal.AsSpan(list6)[0] = "Add Hatching-tide 2026 quest"; + reference5 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list6); + ref ChangeEntry reference6 = ref span3[2]; num3 = 1; List list7 = new List(num3); CollectionsMarshal.SetCount(list7, num3); CollectionsMarshal.AsSpan(list7)[0] = "Quest path fixes"; reference6 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list7); - reference5 = new ChangelogEntry("7.4.17", releaseDate2, list6); + reference3 = new ChangelogEntry("7.4.18", releaseDate2, list4); ref ChangelogEntry reference7 = ref span[2]; DateOnly releaseDate3 = new DateOnly(2026, 3, 1); num2 = 1; @@ -61,948 +63,960 @@ internal static class ChangelogData num3 = 1; List list9 = new List(num3); CollectionsMarshal.SetCount(list9, num3); - CollectionsMarshal.AsSpan(list9)[0] = "Enable TextAdvance, PandorasBox, and Automaton IPC integration during FATE farming"; + CollectionsMarshal.AsSpan(list9)[0] = "Quest path fixes"; reference8 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list9); - reference7 = new ChangelogEntry("7.4.16", releaseDate3, list8); + reference7 = new ChangelogEntry("7.4.17", releaseDate3, list8); ref ChangelogEntry reference9 = ref span[3]; - DateOnly releaseDate4 = new DateOnly(2026, 2, 28); + DateOnly releaseDate4 = new DateOnly(2026, 3, 1); num2 = 1; List list10 = new List(num2); CollectionsMarshal.SetCount(list10, num2); ref ChangeEntry reference10 = ref CollectionsMarshal.AsSpan(list10)[0]; - num3 = 2; + num3 = 1; List list11 = new List(num3); CollectionsMarshal.SetCount(list11, num3); - Span span3 = CollectionsMarshal.AsSpan(list11); - span3[0] = "Fix FATE transform interact task never completing after NPC dialogue"; - span3[1] = "Fix FATE farming loop not detecting completion when NPCs persist after FATE ends"; + CollectionsMarshal.AsSpan(list11)[0] = "Enable TextAdvance, PandorasBox, and Automaton IPC integration during FATE farming"; reference10 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list11); - reference9 = new ChangelogEntry("7.4.15", releaseDate4, list10); + reference9 = new ChangelogEntry("7.4.16", releaseDate4, list10); ref ChangelogEntry reference11 = ref span[4]; - DateOnly releaseDate5 = new DateOnly(2026, 2, 27); - num2 = 2; + DateOnly releaseDate5 = new DateOnly(2026, 2, 28); + num2 = 1; List list12 = new List(num2); CollectionsMarshal.SetCount(list12, num2); - Span span4 = CollectionsMarshal.AsSpan(list12); - ref ChangeEntry reference12 = ref span4[0]; + ref ChangeEntry reference12 = ref CollectionsMarshal.AsSpan(list12)[0]; num3 = 2; List list13 = new List(num3); CollectionsMarshal.SetCount(list13, num3); - Span span5 = CollectionsMarshal.AsSpan(list13); - span5[0] = "Added prerequisite quest requirement to FATE farming definitions"; - span5[1] = "Show active FATE in main quest UI and disable quest start during FATE farming"; - reference12 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list13); - ref ChangeEntry reference13 = ref span4[1]; - num3 = 1; - List list14 = new List(num3); - CollectionsMarshal.SetCount(list14, num3); - CollectionsMarshal.AsSpan(list14)[0] = "Fixed FATE farming buff expiry and added Curtain Call cleanup on stop"; - reference13 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list14); - reference11 = new ChangelogEntry("7.4.14", releaseDate5, list12); - ref ChangelogEntry reference14 = ref span[5]; + Span span4 = CollectionsMarshal.AsSpan(list13); + span4[0] = "Fix FATE transform interact task never completing after NPC dialogue"; + span4[1] = "Fix FATE farming loop not detecting completion when NPCs persist after FATE ends"; + reference12 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list13); + reference11 = new ChangelogEntry("7.4.15", releaseDate5, list12); + ref ChangelogEntry reference13 = ref span[5]; DateOnly releaseDate6 = new DateOnly(2026, 2, 27); - num2 = 1; - List list15 = new List(num2); - CollectionsMarshal.SetCount(list15, num2); - ref ChangeEntry reference15 = ref CollectionsMarshal.AsSpan(list15)[0]; + num2 = 2; + List list14 = new List(num2); + CollectionsMarshal.SetCount(list14, num2); + Span span5 = CollectionsMarshal.AsSpan(list14); + ref ChangeEntry reference14 = ref span5[0]; + num3 = 2; + List list15 = new List(num3); + CollectionsMarshal.SetCount(list15, num3); + Span span6 = CollectionsMarshal.AsSpan(list15); + span6[0] = "Added prerequisite quest requirement to FATE farming definitions"; + span6[1] = "Show active FATE in main quest UI and disable quest start during FATE farming"; + reference14 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list15); + ref ChangeEntry reference15 = ref span5[1]; num3 = 1; List list16 = new List(num3); CollectionsMarshal.SetCount(list16, num3); - CollectionsMarshal.AsSpan(list16)[0] = "Fixed an issue where FATE actions were not performed during the Little Ladies Day (2026) FATE event"; + CollectionsMarshal.AsSpan(list16)[0] = "Fixed FATE farming buff expiry and added Curtain Call cleanup on stop"; reference15 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list16); - reference14 = new ChangelogEntry("7.4.13", releaseDate6, list15); + reference13 = new ChangelogEntry("7.4.14", releaseDate6, list14); ref ChangelogEntry reference16 = ref span[6]; - DateOnly releaseDate7 = new DateOnly(2026, 2, 26); - num2 = 3; + DateOnly releaseDate7 = new DateOnly(2026, 2, 27); + num2 = 1; List list17 = new List(num2); CollectionsMarshal.SetCount(list17, num2); - Span span6 = CollectionsMarshal.AsSpan(list17); - ref ChangeEntry reference17 = ref span6[0]; - num3 = 3; + ref ChangeEntry reference17 = ref CollectionsMarshal.AsSpan(list17)[0]; + num3 = 1; List list18 = new List(num3); CollectionsMarshal.SetCount(list18, num3); - Span span7 = CollectionsMarshal.AsSpan(list18); - span7[0] = "Add Saved Presets tab to quest priority window"; - span7[1] = "Add passive FATE handling and per npc ability handling"; - span7[2] = "Add FATE farming support"; - reference17 = new ChangeEntry(EChangeCategory.Added, "New Features", list18); - ref ChangeEntry reference18 = ref span6[1]; - num3 = 1; - List list19 = new List(num3); - CollectionsMarshal.SetCount(list19, num3); - CollectionsMarshal.AsSpan(list19)[0] = "Add Little Ladies' Day 2026 quests"; - reference18 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list19); - ref ChangeEntry reference19 = ref span6[2]; - num3 = 1; + CollectionsMarshal.AsSpan(list18)[0] = "Fixed an issue where FATE actions were not performed during the Little Ladies Day (2026) FATE event"; + reference17 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list18); + reference16 = new ChangelogEntry("7.4.13", releaseDate7, list17); + ref ChangelogEntry reference18 = ref span[7]; + DateOnly releaseDate8 = new DateOnly(2026, 2, 26); + num2 = 3; + List list19 = new List(num2); + CollectionsMarshal.SetCount(list19, num2); + Span span7 = CollectionsMarshal.AsSpan(list19); + ref ChangeEntry reference19 = ref span7[0]; + num3 = 3; List list20 = new List(num3); CollectionsMarshal.SetCount(list20, num3); - CollectionsMarshal.AsSpan(list20)[0] = "Quest path fixes"; - reference19 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list20); - reference16 = new ChangelogEntry("7.4.12", releaseDate7, list17); - ref ChangelogEntry reference20 = ref span[7]; - DateOnly releaseDate8 = new DateOnly(2026, 2, 2); - num2 = 2; - List list21 = new List(num2); - CollectionsMarshal.SetCount(list21, num2); - Span span8 = CollectionsMarshal.AsSpan(list21); - ref ChangeEntry reference21 = ref span8[0]; + Span span8 = CollectionsMarshal.AsSpan(list20); + span8[0] = "Add Saved Presets tab to quest priority window"; + span8[1] = "Add passive FATE handling and per npc ability handling"; + span8[2] = "Add FATE farming support"; + reference19 = new ChangeEntry(EChangeCategory.Added, "New Features", list20); + ref ChangeEntry reference20 = ref span7[1]; + num3 = 1; + List list21 = new List(num3); + CollectionsMarshal.SetCount(list21, num3); + CollectionsMarshal.AsSpan(list21)[0] = "Add Little Ladies' Day 2026 quests"; + reference20 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list21); + ref ChangeEntry reference21 = ref span7[2]; num3 = 1; List list22 = new List(num3); CollectionsMarshal.SetCount(list22, num3); - CollectionsMarshal.AsSpan(list22)[0] = "Add Valentione's Day 2026 quest (The Icing on the Cake)"; - reference21 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list22); - ref ChangeEntry reference22 = ref span8[1]; - num3 = 2; - List list23 = new List(num3); - CollectionsMarshal.SetCount(list23, num3); - Span span9 = CollectionsMarshal.AsSpan(list23); - span9[0] = "Updated Duty journal to include missing duty types"; - span9[1] = "Added various missing sequences to quests"; - reference22 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list23); - reference20 = new ChangelogEntry("7.4.11", releaseDate8, list21); - ref ChangelogEntry reference23 = ref span[8]; - DateOnly releaseDate9 = new DateOnly(2026, 1, 18); + CollectionsMarshal.AsSpan(list22)[0] = "Quest path fixes"; + reference21 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list22); + reference18 = new ChangelogEntry("7.4.12", releaseDate8, list19); + ref ChangelogEntry reference22 = ref span[8]; + DateOnly releaseDate9 = new DateOnly(2026, 2, 2); num2 = 2; - List list24 = new List(num2); - CollectionsMarshal.SetCount(list24, num2); - Span span10 = CollectionsMarshal.AsSpan(list24); - ref ChangeEntry reference24 = ref span10[0]; - num3 = 5; + List list23 = new List(num2); + CollectionsMarshal.SetCount(list23, num2); + Span span9 = CollectionsMarshal.AsSpan(list23); + ref ChangeEntry reference23 = ref span9[0]; + num3 = 1; + List list24 = new List(num3); + CollectionsMarshal.SetCount(list24, num3); + CollectionsMarshal.AsSpan(list24)[0] = "Add Valentione's Day 2026 quest (The Icing on the Cake)"; + reference23 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list24); + ref ChangeEntry reference24 = ref span9[1]; + num3 = 2; List list25 = new List(num3); CollectionsMarshal.SetCount(list25, num3); - Span span11 = CollectionsMarshal.AsSpan(list25); - span11[0] = "Added quest blacklisting"; - span11[1] = "Added MSQ Priority config"; - span11[2] = "Added Quest priority persistence config"; - span11[3] = "Added Duties tab to Journal"; - span11[4] = "Added GC shop handling and chocobo naming for chocobo quests"; - reference24 = new ChangeEntry(EChangeCategory.Added, "Major Features", list25); - ref ChangeEntry reference25 = ref span10[1]; + Span span10 = CollectionsMarshal.AsSpan(list25); + span10[0] = "Updated Duty journal to include missing duty types"; + span10[1] = "Added various missing sequences to quests"; + reference24 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list25); + reference22 = new ChangelogEntry("7.4.11", releaseDate9, list23); + ref ChangelogEntry reference25 = ref span[9]; + DateOnly releaseDate10 = new DateOnly(2026, 1, 18); + num2 = 2; + List list26 = new List(num2); + CollectionsMarshal.SetCount(list26, num2); + Span span11 = CollectionsMarshal.AsSpan(list26); + ref ChangeEntry reference26 = ref span11[0]; + num3 = 5; + List list27 = new List(num3); + CollectionsMarshal.SetCount(list27, num3); + Span span12 = CollectionsMarshal.AsSpan(list27); + span12[0] = "Added quest blacklisting"; + span12[1] = "Added MSQ Priority config"; + span12[2] = "Added Quest priority persistence config"; + span12[3] = "Added Duties tab to Journal"; + span12[4] = "Added GC shop handling and chocobo naming for chocobo quests"; + reference26 = new ChangeEntry(EChangeCategory.Added, "Major Features", list27); + ref ChangeEntry reference27 = ref span11[1]; num3 = 5; - List list26 = new List(num3); - CollectionsMarshal.SetCount(list26, num3); - Span span12 = CollectionsMarshal.AsSpan(list26); - span12[0] = "Removed PandorasBox dependency and added QTE handling"; - span12[1] = "Removed CBT dependency and added Snipe handling"; - span12[2] = "Added drag reordering to Stop condition quests"; - span12[3] = "Ignore item level requirements if using Unsync config"; - span12[4] = "Setting a Stop quest to Off no longer removes it from the list"; - reference25 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list26); - reference23 = new ChangelogEntry("7.4.10", releaseDate9, list24); - ref ChangelogEntry reference26 = ref span[9]; - DateOnly releaseDate10 = new DateOnly(2025, 12, 31); - num2 = 3; - List list27 = new List(num2); - CollectionsMarshal.SetCount(list27, num2); - Span span13 = CollectionsMarshal.AsSpan(list27); - ref ChangeEntry reference27 = ref span13[0]; - num3 = 1; List list28 = new List(num3); CollectionsMarshal.SetCount(list28, num3); - CollectionsMarshal.AsSpan(list28)[0] = "Add Heavensturn (2026) quests"; - reference27 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list28); - ref ChangeEntry reference28 = ref span13[1]; - num3 = 1; - List list29 = new List(num3); - CollectionsMarshal.SetCount(list29, num3); - CollectionsMarshal.AsSpan(list29)[0] = "Added missing quest sequences"; - reference28 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list29); - ref ChangeEntry reference29 = ref span13[2]; + Span span13 = CollectionsMarshal.AsSpan(list28); + span13[0] = "Removed PandorasBox dependency and added QTE handling"; + span13[1] = "Removed CBT dependency and added Snipe handling"; + span13[2] = "Added drag reordering to Stop condition quests"; + span13[3] = "Ignore item level requirements if using Unsync config"; + span13[4] = "Setting a Stop quest to Off no longer removes it from the list"; + reference27 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list28); + reference25 = new ChangelogEntry("7.4.10", releaseDate10, list26); + ref ChangelogEntry reference28 = ref span[10]; + DateOnly releaseDate11 = new DateOnly(2025, 12, 31); + num2 = 3; + List list29 = new List(num2); + CollectionsMarshal.SetCount(list29, num2); + Span span14 = CollectionsMarshal.AsSpan(list29); + ref ChangeEntry reference29 = ref span14[0]; num3 = 1; List list30 = new List(num3); CollectionsMarshal.SetCount(list30, num3); - CollectionsMarshal.AsSpan(list30)[0] = "Fixed leveling mode not restarting properly"; - reference29 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list30); - reference26 = new ChangelogEntry("7.4.9", releaseDate10, list27); - ref ChangelogEntry reference30 = ref span[10]; - DateOnly releaseDate11 = new DateOnly(2025, 12, 29); - num2 = 1; - List list31 = new List(num2); - CollectionsMarshal.SetCount(list31, num2); - ref ChangeEntry reference31 = ref CollectionsMarshal.AsSpan(list31)[0]; - num3 = 2; + CollectionsMarshal.AsSpan(list30)[0] = "Add Heavensturn (2026) quests"; + reference29 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list30); + ref ChangeEntry reference30 = ref span14[1]; + num3 = 1; + List list31 = new List(num3); + CollectionsMarshal.SetCount(list31, num3); + CollectionsMarshal.AsSpan(list31)[0] = "Added missing quest sequences"; + reference30 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list31); + ref ChangeEntry reference31 = ref span14[2]; + num3 = 1; List list32 = new List(num3); CollectionsMarshal.SetCount(list32, num3); - Span span14 = CollectionsMarshal.AsSpan(list32); - span14[0] = "Fixed infinite teleport loop when multiple quests compete for priority"; - span14[1] = "Fixed leveling mode enabling for quest duties"; + CollectionsMarshal.AsSpan(list32)[0] = "Fixed leveling mode not restarting properly"; reference31 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list32); - reference30 = new ChangelogEntry("7.4.8", releaseDate11, list31); + reference28 = new ChangelogEntry("7.4.9", releaseDate11, list29); ref ChangelogEntry reference32 = ref span[11]; - DateOnly releaseDate12 = new DateOnly(2025, 12, 28); - num2 = 4; + DateOnly releaseDate12 = new DateOnly(2025, 12, 29); + num2 = 1; List list33 = new List(num2); CollectionsMarshal.SetCount(list33, num2); - Span span15 = CollectionsMarshal.AsSpan(list33); - ref ChangeEntry reference33 = ref span15[0]; - num3 = 1; + ref ChangeEntry reference33 = ref CollectionsMarshal.AsSpan(list33)[0]; + num3 = 2; List list34 = new List(num3); CollectionsMarshal.SetCount(list34, num3); - CollectionsMarshal.AsSpan(list34)[0] = "Added leveling mode when underleveled for MSQ"; - reference33 = new ChangeEntry(EChangeCategory.Added, "Major Features", list34); - ref ChangeEntry reference34 = ref span15[1]; - num3 = 3; - List list35 = new List(num3); - CollectionsMarshal.SetCount(list35, num3); - Span span16 = CollectionsMarshal.AsSpan(list35); - span16[0] = "Added missing dungeons to Duties"; - span16[1] = "Added Normal Raids and Alliance Raids to duties tab"; - span16[2] = "Added Pause/Stop modes to stop conditions"; - reference34 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list35); - ref ChangeEntry reference35 = ref span15[2]; + Span span15 = CollectionsMarshal.AsSpan(list34); + span15[0] = "Fixed infinite teleport loop when multiple quests compete for priority"; + span15[1] = "Fixed leveling mode enabling for quest duties"; + reference33 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list34); + reference32 = new ChangelogEntry("7.4.8", releaseDate12, list33); + ref ChangelogEntry reference34 = ref span[12]; + DateOnly releaseDate13 = new DateOnly(2025, 12, 28); + num2 = 4; + List list35 = new List(num2); + CollectionsMarshal.SetCount(list35, num2); + Span span16 = CollectionsMarshal.AsSpan(list35); + ref ChangeEntry reference35 = ref span16[0]; num3 = 1; List list36 = new List(num3); CollectionsMarshal.SetCount(list36, num3); - CollectionsMarshal.AsSpan(list36)[0] = "Added leveling mode IPC: IsLevelingModeEnabled, SetLevelingModeEnabled, GetMsqLevelLockInfo, StartLevelingMode, StopLevelingMode"; - reference35 = new ChangeEntry(EChangeCategory.Added, "IPC Changes", list36); - ref ChangeEntry reference36 = ref span15[3]; - num3 = 1; + CollectionsMarshal.AsSpan(list36)[0] = "Added leveling mode when underleveled for MSQ"; + reference35 = new ChangeEntry(EChangeCategory.Added, "Major Features", list36); + ref ChangeEntry reference36 = ref span16[1]; + num3 = 3; List list37 = new List(num3); CollectionsMarshal.SetCount(list37, num3); - CollectionsMarshal.AsSpan(list37)[0] = "Fixed UI appearing in duties when debuff or interrupts occur"; - reference36 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list37); - reference32 = new ChangelogEntry("7.4.7", releaseDate12, list33); - ref ChangelogEntry reference37 = ref span[12]; - DateOnly releaseDate13 = new DateOnly(2025, 12, 23); - num2 = 2; - List list38 = new List(num2); - CollectionsMarshal.SetCount(list38, num2); - Span span17 = CollectionsMarshal.AsSpan(list38); - ref ChangeEntry reference38 = ref span17[0]; + Span span17 = CollectionsMarshal.AsSpan(list37); + span17[0] = "Added missing dungeons to Duties"; + span17[1] = "Added Normal Raids and Alliance Raids to duties tab"; + span17[2] = "Added Pause/Stop modes to stop conditions"; + reference36 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list37); + ref ChangeEntry reference37 = ref span16[2]; + num3 = 1; + List list38 = new List(num3); + CollectionsMarshal.SetCount(list38, num3); + CollectionsMarshal.AsSpan(list38)[0] = "Added leveling mode IPC: IsLevelingModeEnabled, SetLevelingModeEnabled, GetMsqLevelLockInfo, StartLevelingMode, StopLevelingMode"; + reference37 = new ChangeEntry(EChangeCategory.Added, "IPC Changes", list38); + ref ChangeEntry reference38 = ref span16[3]; num3 = 1; List list39 = new List(num3); CollectionsMarshal.SetCount(list39, num3); - CollectionsMarshal.AsSpan(list39)[0] = "Added Cinema Mode to not skip cutscenes"; - reference38 = new ChangeEntry(EChangeCategory.Added, "Major Features", list39); - ref ChangeEntry reference39 = ref span17[1]; - num3 = 2; - List list40 = new List(num3); - CollectionsMarshal.SetCount(list40, num3); - Span span18 = CollectionsMarshal.AsSpan(list40); - span18[0] = "Added handling for Unsync (Party) to Party Watchdog and configuration to disable if in party"; - span18[1] = "Stop conditions now act as a true stop"; - reference39 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list40); - reference37 = new ChangelogEntry("7.4.6", releaseDate13, list38); - ref ChangelogEntry reference40 = ref span[13]; - DateOnly releaseDate14 = new DateOnly(2025, 12, 22); - num2 = 1; - List list41 = new List(num2); - CollectionsMarshal.SetCount(list41, num2); - ref ChangeEntry reference41 = ref CollectionsMarshal.AsSpan(list41)[0]; + CollectionsMarshal.AsSpan(list39)[0] = "Fixed UI appearing in duties when debuff or interrupts occur"; + reference38 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list39); + reference34 = new ChangelogEntry("7.4.7", releaseDate13, list35); + ref ChangelogEntry reference39 = ref span[13]; + DateOnly releaseDate14 = new DateOnly(2025, 12, 23); + num2 = 2; + List list40 = new List(num2); + CollectionsMarshal.SetCount(list40, num2); + Span span18 = CollectionsMarshal.AsSpan(list40); + ref ChangeEntry reference40 = ref span18[0]; + num3 = 1; + List list41 = new List(num3); + CollectionsMarshal.SetCount(list41, num3); + CollectionsMarshal.AsSpan(list41)[0] = "Added Cinema Mode to not skip cutscenes"; + reference40 = new ChangeEntry(EChangeCategory.Added, "Major Features", list41); + ref ChangeEntry reference41 = ref span18[1]; num3 = 2; List list42 = new List(num3); CollectionsMarshal.SetCount(list42, num3); Span span19 = CollectionsMarshal.AsSpan(list42); - span19[0] = "Dive adjustments"; - span19[1] = "Logging message adjustments"; + span19[0] = "Added handling for Unsync (Party) to Party Watchdog and configuration to disable if in party"; + span19[1] = "Stop conditions now act as a true stop"; reference41 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list42); - reference40 = new ChangelogEntry("7.4.5", releaseDate14, list41); + reference39 = new ChangelogEntry("7.4.6", releaseDate14, list40); ref ChangelogEntry reference42 = ref span[14]; - DateOnly releaseDate15 = new DateOnly(2025, 12, 21); - num2 = 2; + DateOnly releaseDate15 = new DateOnly(2025, 12, 22); + num2 = 1; List list43 = new List(num2); CollectionsMarshal.SetCount(list43, num2); - Span span20 = CollectionsMarshal.AsSpan(list43); - ref ChangeEntry reference43 = ref span20[0]; - num3 = 1; + ref ChangeEntry reference43 = ref CollectionsMarshal.AsSpan(list43)[0]; + num3 = 2; List list44 = new List(num3); CollectionsMarshal.SetCount(list44, num3); - CollectionsMarshal.AsSpan(list44)[0] = "Changelog only shows once per update now"; + Span span20 = CollectionsMarshal.AsSpan(list44); + span20[0] = "Dive adjustments"; + span20[1] = "Logging message adjustments"; reference43 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list44); - ref ChangeEntry reference44 = ref span20[1]; - num3 = 1; - List list45 = new List(num3); - CollectionsMarshal.SetCount(list45, num3); - CollectionsMarshal.AsSpan(list45)[0] = "Fixed gathering paths loading"; - reference44 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list45); - reference42 = new ChangelogEntry("7.4.4", releaseDate15, list43); - ref ChangelogEntry reference45 = ref span[15]; + reference42 = new ChangelogEntry("7.4.5", releaseDate15, list43); + ref ChangelogEntry reference44 = ref span[15]; DateOnly releaseDate16 = new DateOnly(2025, 12, 21); - num2 = 1; - List list46 = new List(num2); - CollectionsMarshal.SetCount(list46, num2); - ref ChangeEntry reference46 = ref CollectionsMarshal.AsSpan(list46)[0]; + num2 = 2; + List list45 = new List(num2); + CollectionsMarshal.SetCount(list45, num2); + Span span21 = CollectionsMarshal.AsSpan(list45); + ref ChangeEntry reference45 = ref span21[0]; + num3 = 1; + List list46 = new List(num3); + CollectionsMarshal.SetCount(list46, num3); + CollectionsMarshal.AsSpan(list46)[0] = "Changelog only shows once per update now"; + reference45 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list46); + ref ChangeEntry reference46 = ref span21[1]; num3 = 1; List list47 = new List(num3); CollectionsMarshal.SetCount(list47, num3); - CollectionsMarshal.AsSpan(list47)[0] = "Fixed changelog version checks"; + CollectionsMarshal.AsSpan(list47)[0] = "Fixed gathering paths loading"; reference46 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list47); - reference45 = new ChangelogEntry("7.4.3", releaseDate16, list46); + reference44 = new ChangelogEntry("7.4.4", releaseDate16, list45); ref ChangelogEntry reference47 = ref span[16]; - DateOnly releaseDate17 = new DateOnly(2025, 12, 20); - num2 = 2; + DateOnly releaseDate17 = new DateOnly(2025, 12, 21); + num2 = 1; List list48 = new List(num2); CollectionsMarshal.SetCount(list48, num2); - Span span21 = CollectionsMarshal.AsSpan(list48); - ref ChangeEntry reference48 = ref span21[0]; + ref ChangeEntry reference48 = ref CollectionsMarshal.AsSpan(list48)[0]; num3 = 1; List list49 = new List(num3); CollectionsMarshal.SetCount(list49, num3); - CollectionsMarshal.AsSpan(list49)[0] = "Add 7.4 Starlight Celebration (2025) quest"; - reference48 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list49); - ref ChangeEntry reference49 = ref span21[1]; + CollectionsMarshal.AsSpan(list49)[0] = "Fixed changelog version checks"; + reference48 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list49); + reference47 = new ChangelogEntry("7.4.3", releaseDate17, list48); + ref ChangelogEntry reference49 = ref span[17]; + DateOnly releaseDate18 = new DateOnly(2025, 12, 20); + num2 = 2; + List list50 = new List(num2); + CollectionsMarshal.SetCount(list50, num2); + Span span22 = CollectionsMarshal.AsSpan(list50); + ref ChangeEntry reference50 = ref span22[0]; + num3 = 1; + List list51 = new List(num3); + CollectionsMarshal.SetCount(list51, num3); + CollectionsMarshal.AsSpan(list51)[0] = "Add 7.4 Starlight Celebration (2025) quest"; + reference50 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list51); + ref ChangeEntry reference51 = ref span22[1]; num3 = 1; - List list50 = new List(num3); - CollectionsMarshal.SetCount(list50, num3); - CollectionsMarshal.AsSpan(list50)[0] = "Fixed 7.4 MSQ"; - reference49 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list50); - reference47 = new ChangelogEntry("7.4.2", releaseDate17, list48); - ref ChangelogEntry reference50 = ref span[17]; - DateOnly releaseDate18 = new DateOnly(2025, 12, 19); - num2 = 1; - List list51 = new List(num2); - CollectionsMarshal.SetCount(list51, num2); - ref ChangeEntry reference51 = ref CollectionsMarshal.AsSpan(list51)[0]; - num3 = 2; List list52 = new List(num3); CollectionsMarshal.SetCount(list52, num3); - Span span22 = CollectionsMarshal.AsSpan(list52); - span22[0] = "Add 7.4 MSQ"; - span22[1] = "Add 7.4 Arcadion Raid quests"; - reference51 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list52); - reference50 = new ChangelogEntry("7.4.1", releaseDate18, list51); + CollectionsMarshal.AsSpan(list52)[0] = "Fixed 7.4 MSQ"; + reference51 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list52); + reference49 = new ChangelogEntry("7.4.2", releaseDate18, list50); ref ChangelogEntry reference52 = ref span[18]; - DateOnly releaseDate19 = new DateOnly(2025, 12, 17); + DateOnly releaseDate19 = new DateOnly(2025, 12, 19); num2 = 1; List list53 = new List(num2); CollectionsMarshal.SetCount(list53, num2); - CollectionsMarshal.AsSpan(list53)[0] = new ChangeEntry(EChangeCategory.Changed, "Api 14 update"); - reference52 = new ChangelogEntry("7.4.0", releaseDate19, list53); - ref ChangelogEntry reference53 = ref span[19]; - DateOnly releaseDate20 = new DateOnly(2025, 12, 6); + ref ChangeEntry reference53 = ref CollectionsMarshal.AsSpan(list53)[0]; + num3 = 2; + List list54 = new List(num3); + CollectionsMarshal.SetCount(list54, num3); + Span span23 = CollectionsMarshal.AsSpan(list54); + span23[0] = "Add 7.4 MSQ"; + span23[1] = "Add 7.4 Arcadion Raid quests"; + reference53 = new ChangeEntry(EChangeCategory.QuestUpdates, "New Quest Paths", list54); + reference52 = new ChangelogEntry("7.4.1", releaseDate19, list53); + ref ChangelogEntry reference54 = ref span[19]; + DateOnly releaseDate20 = new DateOnly(2025, 12, 17); + num2 = 1; + List list55 = new List(num2); + CollectionsMarshal.SetCount(list55, num2); + CollectionsMarshal.AsSpan(list55)[0] = new ChangeEntry(EChangeCategory.Changed, "Api 14 update"); + reference54 = new ChangelogEntry("7.4.0", releaseDate20, list55); + ref ChangelogEntry reference55 = ref span[20]; + DateOnly releaseDate21 = new DateOnly(2025, 12, 6); num2 = 2; - List list54 = new List(num2); - CollectionsMarshal.SetCount(list54, num2); - Span span23 = CollectionsMarshal.AsSpan(list54); - ref ChangeEntry reference54 = ref span23[0]; + List list56 = new List(num2); + CollectionsMarshal.SetCount(list56, num2); + Span span24 = CollectionsMarshal.AsSpan(list56); + ref ChangeEntry reference56 = ref span24[0]; num3 = 4; - List list55 = new List(num3); - CollectionsMarshal.SetCount(list55, num3); - Span span24 = CollectionsMarshal.AsSpan(list55); - span24[0] = "Added reloading and rebuilding to movement system"; - span24[1] = "Improved interrupts and refresh states to allow continuation of questing"; - span24[2] = "Added player input detection to stop automation when manually moving character"; - span24[3] = "Added various missing quest sequences"; - reference54 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list55); - ref ChangeEntry reference55 = ref span23[1]; + List list57 = new List(num3); + CollectionsMarshal.SetCount(list57, num3); + Span span25 = CollectionsMarshal.AsSpan(list57); + span25[0] = "Added reloading and rebuilding to movement system"; + span25[1] = "Improved interrupts and refresh states to allow continuation of questing"; + span25[2] = "Added player input detection to stop automation when manually moving character"; + span25[3] = "Added various missing quest sequences"; + reference56 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list57); + ref ChangeEntry reference57 = ref span24[1]; num3 = 1; - List list56 = new List(num3); - CollectionsMarshal.SetCount(list56, num3); - CollectionsMarshal.AsSpan(list56)[0] = "Fixed reset task state to prevent stuck interactions after interruption"; - reference55 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list56); - reference53 = new ChangelogEntry("7.38.9", releaseDate20, list54); - ref ChangelogEntry reference56 = ref span[20]; - DateOnly releaseDate21 = new DateOnly(2025, 11, 29); - num2 = 2; - List list57 = new List(num2); - CollectionsMarshal.SetCount(list57, num2); - Span span25 = CollectionsMarshal.AsSpan(list57); - ref ChangeEntry reference57 = ref span25[0]; - num3 = 3; List list58 = new List(num3); CollectionsMarshal.SetCount(list58, num3); - Span span26 = CollectionsMarshal.AsSpan(list58); - span26[0] = "Movement update with automatic retrying if character can't reach target position"; - span26[1] = "Added Hunt mob data"; - span26[2] = "Refactored commands"; - reference57 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list58); - ref ChangeEntry reference58 = ref span25[1]; - num3 = 3; - List list59 = new List(num3); - CollectionsMarshal.SetCount(list59, num3); - Span span27 = CollectionsMarshal.AsSpan(list59); - span27[0] = "Fixed quest (Way of the Archer)"; - span27[1] = "Fixed quest (Spirithold Broken)"; - span27[2] = "Fixed quest (It's Probably Not Pirates)"; - reference58 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list59); - reference56 = new ChangelogEntry("7.38.8", releaseDate21, list57); - ref ChangelogEntry reference59 = ref span[21]; - DateOnly releaseDate22 = new DateOnly(2025, 11, 25); + CollectionsMarshal.AsSpan(list58)[0] = "Fixed reset task state to prevent stuck interactions after interruption"; + reference57 = new ChangeEntry(EChangeCategory.Fixed, "Fixes", list58); + reference55 = new ChangelogEntry("7.38.9", releaseDate21, list56); + ref ChangelogEntry reference58 = ref span[21]; + DateOnly releaseDate22 = new DateOnly(2025, 11, 29); num2 = 2; - List list60 = new List(num2); - CollectionsMarshal.SetCount(list60, num2); - Span span28 = CollectionsMarshal.AsSpan(list60); - ref ChangeEntry reference60 = ref span28[0]; - num3 = 2; + List list59 = new List(num2); + CollectionsMarshal.SetCount(list59, num2); + Span span26 = CollectionsMarshal.AsSpan(list59); + ref ChangeEntry reference59 = ref span26[0]; + num3 = 3; + List list60 = new List(num3); + CollectionsMarshal.SetCount(list60, num3); + Span span27 = CollectionsMarshal.AsSpan(list60); + span27[0] = "Movement update with automatic retrying if character can't reach target position"; + span27[1] = "Added Hunt mob data"; + span27[2] = "Refactored commands"; + reference59 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list60); + ref ChangeEntry reference60 = ref span26[1]; + num3 = 3; List list61 = new List(num3); CollectionsMarshal.SetCount(list61, num3); - Span span29 = CollectionsMarshal.AsSpan(list61); - span29[0] = "Added individual sequence stop condition for each quest"; - span29[1] = "Added Trials to Duties tab in config"; - reference60 = new ChangeEntry(EChangeCategory.Added, "Major features", list61); - ref ChangeEntry reference61 = ref span28[1]; - num3 = 1; - List list62 = new List(num3); - CollectionsMarshal.SetCount(list62, num3); - CollectionsMarshal.AsSpan(list62)[0] = "Added IPC for stop conditions: GetQuestSequenceStopCondition, SetQuestSequenceStopCondition, RemoveQuestSequenceStopCondition, GetAllQuestSequenceStopConditions"; - reference61 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list62); - reference59 = new ChangelogEntry("7.38.7", releaseDate22, list60); - ref ChangelogEntry reference62 = ref span[22]; + Span span28 = CollectionsMarshal.AsSpan(list61); + span28[0] = "Fixed quest (Way of the Archer)"; + span28[1] = "Fixed quest (Spirithold Broken)"; + span28[2] = "Fixed quest (It's Probably Not Pirates)"; + reference60 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list61); + reference58 = new ChangelogEntry("7.38.8", releaseDate22, list59); + ref ChangelogEntry reference61 = ref span[22]; DateOnly releaseDate23 = new DateOnly(2025, 11, 25); - num2 = 3; - List list63 = new List(num2); - CollectionsMarshal.SetCount(list63, num2); - Span span30 = CollectionsMarshal.AsSpan(list63); - ref ChangeEntry reference63 = ref span30[0]; + num2 = 2; + List list62 = new List(num2); + CollectionsMarshal.SetCount(list62, num2); + Span span29 = CollectionsMarshal.AsSpan(list62); + ref ChangeEntry reference62 = ref span29[0]; num3 = 2; + List list63 = new List(num3); + CollectionsMarshal.SetCount(list63, num3); + Span span30 = CollectionsMarshal.AsSpan(list63); + span30[0] = "Added individual sequence stop condition for each quest"; + span30[1] = "Added Trials to Duties tab in config"; + reference62 = new ChangeEntry(EChangeCategory.Added, "Major features", list63); + ref ChangeEntry reference63 = ref span29[1]; + num3 = 1; List list64 = new List(num3); CollectionsMarshal.SetCount(list64, num3); - Span span31 = CollectionsMarshal.AsSpan(list64); - span31[0] = "Updated Allied Society journal text"; - span31[1] = "Improved Allied Society rank handling"; - reference63 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list64); - ref ChangeEntry reference64 = ref span30[1]; - num3 = 1; - List list65 = new List(num3); - CollectionsMarshal.SetCount(list65, num3); - CollectionsMarshal.AsSpan(list65)[0] = "Added IPC for Allied Society: AddAlliedSocietyOptimalQuests, GetAlliedSocietyOptimalQuests"; - reference64 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list65); - ref ChangeEntry reference65 = ref span30[2]; - num3 = 1; + CollectionsMarshal.AsSpan(list64)[0] = "Added IPC for stop conditions: GetQuestSequenceStopCondition, SetQuestSequenceStopCondition, RemoveQuestSequenceStopCondition, GetAllQuestSequenceStopConditions"; + reference63 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list64); + reference61 = new ChangelogEntry("7.38.7", releaseDate23, list62); + ref ChangelogEntry reference64 = ref span[23]; + DateOnly releaseDate24 = new DateOnly(2025, 11, 25); + num2 = 3; + List list65 = new List(num2); + CollectionsMarshal.SetCount(list65, num2); + Span span31 = CollectionsMarshal.AsSpan(list65); + ref ChangeEntry reference65 = ref span31[0]; + num3 = 2; List list66 = new List(num3); CollectionsMarshal.SetCount(list66, num3); - CollectionsMarshal.AsSpan(list66)[0] = "Fixed quest (We Come in Peace)"; - reference65 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list66); - reference62 = new ChangelogEntry("7.38.6", releaseDate23, list63); - ref ChangelogEntry reference66 = ref span[23]; - DateOnly releaseDate24 = new DateOnly(2025, 11, 24); - num2 = 2; - List list67 = new List(num2); - CollectionsMarshal.SetCount(list67, num2); - Span span32 = CollectionsMarshal.AsSpan(list67); - ref ChangeEntry reference67 = ref span32[0]; + Span span32 = CollectionsMarshal.AsSpan(list66); + span32[0] = "Updated Allied Society journal text"; + span32[1] = "Improved Allied Society rank handling"; + reference65 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list66); + ref ChangeEntry reference66 = ref span31[1]; + num3 = 1; + List list67 = new List(num3); + CollectionsMarshal.SetCount(list67, num3); + CollectionsMarshal.AsSpan(list67)[0] = "Added IPC for Allied Society: AddAlliedSocietyOptimalQuests, GetAlliedSocietyOptimalQuests"; + reference66 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list67); + ref ChangeEntry reference67 = ref span31[2]; num3 = 1; List list68 = new List(num3); CollectionsMarshal.SetCount(list68, num3); - CollectionsMarshal.AsSpan(list68)[0] = "Added Allied Society daily allowance tracker with bulk quest adding buttons"; - reference67 = new ChangeEntry(EChangeCategory.Added, "Major features", list68); - ref ChangeEntry reference68 = ref span32[1]; - num3 = 1; - List list69 = new List(num3); - CollectionsMarshal.SetCount(list69, num3); - CollectionsMarshal.AsSpan(list69)[0] = "Added IPC for Allied Society: GetRemainingAllowances, GetTimeUntilReset, GetAvailableQuestIds, GetAllAvailableQuestCounts, IsMaxRank, GetCurrentRank, GetSocietiesWithAvailableQuests"; - reference68 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list69); - reference66 = new ChangelogEntry("7.38.5", releaseDate24, list67); - ref ChangelogEntry reference69 = ref span[24]; - DateOnly releaseDate25 = new DateOnly(2025, 11, 23); + CollectionsMarshal.AsSpan(list68)[0] = "Fixed quest (We Come in Peace)"; + reference67 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list68); + reference64 = new ChangelogEntry("7.38.6", releaseDate24, list65); + ref ChangelogEntry reference68 = ref span[24]; + DateOnly releaseDate25 = new DateOnly(2025, 11, 24); num2 = 2; - List list70 = new List(num2); - CollectionsMarshal.SetCount(list70, num2); - Span span33 = CollectionsMarshal.AsSpan(list70); - ref ChangeEntry reference70 = ref span33[0]; + List list69 = new List(num2); + CollectionsMarshal.SetCount(list69, num2); + Span span33 = CollectionsMarshal.AsSpan(list69); + ref ChangeEntry reference69 = ref span33[0]; + num3 = 1; + List list70 = new List(num3); + CollectionsMarshal.SetCount(list70, num3); + CollectionsMarshal.AsSpan(list70)[0] = "Added Allied Society daily allowance tracker with bulk quest adding buttons"; + reference69 = new ChangeEntry(EChangeCategory.Added, "Major features", list70); + ref ChangeEntry reference70 = ref span33[1]; num3 = 1; List list71 = new List(num3); CollectionsMarshal.SetCount(list71, num3); - CollectionsMarshal.AsSpan(list71)[0] = "Explicitly declare support for BMR singleplayer duty (The Rematch)"; - reference70 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list71); - ref ChangeEntry reference71 = ref span33[1]; - num3 = 8; - List list72 = new List(num3); - CollectionsMarshal.SetCount(list72, num3); - Span span34 = CollectionsMarshal.AsSpan(list72); - span34[0] = "Fixed quest (Microbrewing) to not get stuck near ramp"; - span34[1] = "Fixed quest (The Illuminated Land) where pathing would kill the player due to fall damage"; - span34[2] = "Fixed quest (It's Probably Not Pirates) improper pathing and removed unneeded step"; - span34[3] = "Fixed quest (The Black Wolf's Ultimatum) not exiting landing area"; - span34[4] = "Fixed quest (Magiteknical Failure) from not interacting with NPC due to being mounted"; - span34[5] = "Fixed quest (We Come in Peace) shortcut navigation"; - span34[6] = "Fixed quest (Poisoned Hearts) where incorrect pathing caused the player to die"; - span34[7] = "Fixed quests (Savage Snares) and (An Apple a Day) not detecting kills"; - reference71 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list72); - reference69 = new ChangelogEntry("7.38.4", releaseDate25, list70); - ref ChangelogEntry reference72 = ref span[25]; + CollectionsMarshal.AsSpan(list71)[0] = "Added IPC for Allied Society: GetRemainingAllowances, GetTimeUntilReset, GetAvailableQuestIds, GetAllAvailableQuestCounts, IsMaxRank, GetCurrentRank, GetSocietiesWithAvailableQuests"; + reference70 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list71); + reference68 = new ChangelogEntry("7.38.5", releaseDate25, list69); + ref ChangelogEntry reference71 = ref span[25]; DateOnly releaseDate26 = new DateOnly(2025, 11, 23); - num2 = 3; - List list73 = new List(num2); - CollectionsMarshal.SetCount(list73, num2); - Span span35 = CollectionsMarshal.AsSpan(list73); - ref ChangeEntry reference73 = ref span35[0]; - num3 = 2; + num2 = 2; + List list72 = new List(num2); + CollectionsMarshal.SetCount(list72, num2); + Span span34 = CollectionsMarshal.AsSpan(list72); + ref ChangeEntry reference72 = ref span34[0]; + num3 = 1; + List list73 = new List(num3); + CollectionsMarshal.SetCount(list73, num3); + CollectionsMarshal.AsSpan(list73)[0] = "Explicitly declare support for BMR singleplayer duty (The Rematch)"; + reference72 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list73); + ref ChangeEntry reference73 = ref span34[1]; + num3 = 8; List list74 = new List(num3); CollectionsMarshal.SetCount(list74, num3); - Span span36 = CollectionsMarshal.AsSpan(list74); - span36[0] = "Added RequireHq to crafting InteractionType"; - span36[1] = "Mark GC quests as Locked if rank not achieved"; - reference73 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list74); - ref ChangeEntry reference74 = ref span35[1]; + Span span35 = CollectionsMarshal.AsSpan(list74); + span35[0] = "Fixed quest (Microbrewing) to not get stuck near ramp"; + span35[1] = "Fixed quest (The Illuminated Land) where pathing would kill the player due to fall damage"; + span35[2] = "Fixed quest (It's Probably Not Pirates) improper pathing and removed unneeded step"; + span35[3] = "Fixed quest (The Black Wolf's Ultimatum) not exiting landing area"; + span35[4] = "Fixed quest (Magiteknical Failure) from not interacting with NPC due to being mounted"; + span35[5] = "Fixed quest (We Come in Peace) shortcut navigation"; + span35[6] = "Fixed quest (Poisoned Hearts) where incorrect pathing caused the player to die"; + span35[7] = "Fixed quests (Savage Snares) and (An Apple a Day) not detecting kills"; + reference73 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list74); + reference71 = new ChangelogEntry("7.38.4", releaseDate26, list72); + ref ChangelogEntry reference74 = ref span[26]; + DateOnly releaseDate27 = new DateOnly(2025, 11, 23); + num2 = 3; + List list75 = new List(num2); + CollectionsMarshal.SetCount(list75, num2); + Span span36 = CollectionsMarshal.AsSpan(list75); + ref ChangeEntry reference75 = ref span36[0]; num3 = 2; - List list75 = new List(num3); - CollectionsMarshal.SetCount(list75, num3); - Span span37 = CollectionsMarshal.AsSpan(list75); - span37[0] = "Added IPC for stop conditions: GetStopConditionsEnabled, SetStopConditionsEnabled, GetStopQuestList, AddStopQuest, RemoveStopQuest, ClearStopQuests, GetLevelStopCondition, SetLevelStopCondition, GetSequenceStopCondition, SetSequenceStopCondition"; - span37[1] = "Added IPC for priority quests: GetPriorityQuests, RemovePriorityQuest, ReorderPriorityQuest, GetAvailablePresets, GetPresetQuests, AddPresetToPriority, IsPresetAvailable, IsQuestInPriority, GetQuestPriorityIndex, HasAvailablePriorityQuests"; - reference74 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list75); - ref ChangeEntry reference75 = ref span35[2]; - num3 = 3; List list76 = new List(num3); CollectionsMarshal.SetCount(list76, num3); - Span span38 = CollectionsMarshal.AsSpan(list76); - span38[0] = "Fixed line breaks not working in dialog strings"; - span38[1] = "Fixed quest (Labor of Love)"; - span38[2] = "Fixed quest (Sea of Sorrow)"; - reference75 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list76); - reference72 = new ChangelogEntry("7.38.3", releaseDate26, list73); - ref ChangelogEntry reference76 = ref span[26]; - DateOnly releaseDate27 = new DateOnly(2025, 11, 18); - num2 = 3; - List list77 = new List(num2); - CollectionsMarshal.SetCount(list77, num2); - Span span39 = CollectionsMarshal.AsSpan(list77); - ref ChangeEntry reference77 = ref span39[0]; + Span span37 = CollectionsMarshal.AsSpan(list76); + span37[0] = "Added RequireHq to crafting InteractionType"; + span37[1] = "Mark GC quests as Locked if rank not achieved"; + reference75 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list76); + ref ChangeEntry reference76 = ref span36[1]; num3 = 2; + List list77 = new List(num3); + CollectionsMarshal.SetCount(list77, num3); + Span span38 = CollectionsMarshal.AsSpan(list77); + span38[0] = "Added IPC for stop conditions: GetStopConditionsEnabled, SetStopConditionsEnabled, GetStopQuestList, AddStopQuest, RemoveStopQuest, ClearStopQuests, GetLevelStopCondition, SetLevelStopCondition, GetSequenceStopCondition, SetSequenceStopCondition"; + span38[1] = "Added IPC for priority quests: GetPriorityQuests, RemovePriorityQuest, ReorderPriorityQuest, GetAvailablePresets, GetPresetQuests, AddPresetToPriority, IsPresetAvailable, IsQuestInPriority, GetQuestPriorityIndex, HasAvailablePriorityQuests"; + reference76 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list77); + ref ChangeEntry reference77 = ref span36[2]; + num3 = 3; List list78 = new List(num3); CollectionsMarshal.SetCount(list78, num3); - Span span40 = CollectionsMarshal.AsSpan(list78); - span40[0] = "Auto Duty unsync options for each duty (Duty Support, Unsync Solo, Unsync Party)"; - span40[1] = "Added Auto Duty unsync options to quest schema and updated quests using old unsync method"; - reference77 = new ChangeEntry(EChangeCategory.Added, "Major features", list78); - ref ChangeEntry reference78 = ref span39[1]; - num3 = 3; - List list79 = new List(num3); - CollectionsMarshal.SetCount(list79, num3); - Span span41 = CollectionsMarshal.AsSpan(list79); - span41[0] = "Added IPC for duty sync handling: GetDefaultDutyMode, SetDefaultDutyMode"; - span41[1] = "Added IPC for duty mode overrides: GetDutyModeOverride, SetDutyModeOverride"; - span41[2] = "Added IPC for clearing overrides: ClearDutyModeOverride, ClearAllDutyModeOverrides"; - reference78 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list79); - span39[2] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest (Constant Cravings)"); - reference76 = new ChangelogEntry("7.38.2", releaseDate27, list77); - ref ChangelogEntry reference79 = ref span[27]; + Span span39 = CollectionsMarshal.AsSpan(list78); + span39[0] = "Fixed line breaks not working in dialog strings"; + span39[1] = "Fixed quest (Labor of Love)"; + span39[2] = "Fixed quest (Sea of Sorrow)"; + reference77 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list78); + reference74 = new ChangelogEntry("7.38.3", releaseDate27, list75); + ref ChangelogEntry reference78 = ref span[27]; DateOnly releaseDate28 = new DateOnly(2025, 11, 18); num2 = 3; - List list80 = new List(num2); - CollectionsMarshal.SetCount(list80, num2); - Span span42 = CollectionsMarshal.AsSpan(list80); - ref ChangeEntry reference80 = ref span42[0]; - num3 = 1; + List list79 = new List(num2); + CollectionsMarshal.SetCount(list79, num2); + Span span40 = CollectionsMarshal.AsSpan(list79); + ref ChangeEntry reference79 = ref span40[0]; + num3 = 2; + List list80 = new List(num3); + CollectionsMarshal.SetCount(list80, num3); + Span span41 = CollectionsMarshal.AsSpan(list80); + span41[0] = "Auto Duty unsync options for each duty (Duty Support, Unsync Solo, Unsync Party)"; + span41[1] = "Added Auto Duty unsync options to quest schema and updated quests using old unsync method"; + reference79 = new ChangeEntry(EChangeCategory.Added, "Major features", list80); + ref ChangeEntry reference80 = ref span40[1]; + num3 = 3; List list81 = new List(num3); CollectionsMarshal.SetCount(list81, num3); - CollectionsMarshal.AsSpan(list81)[0] = "Added new fields to quest schema"; - reference80 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list81); - ref ChangeEntry reference81 = ref span42[1]; - num3 = 3; - List list82 = new List(num3); - CollectionsMarshal.SetCount(list82, num3); - Span span43 = CollectionsMarshal.AsSpan(list82); - span43[0] = "A Faerie Tale Come True"; - span43[1] = "Constant Cravings"; - span43[2] = "A Bridge Too Full"; - reference81 = new ChangeEntry(EChangeCategory.QuestUpdates, "Added new quest paths", list82); - ref ChangeEntry reference82 = ref span42[2]; - num3 = 3; + Span span42 = CollectionsMarshal.AsSpan(list81); + span42[0] = "Added IPC for duty sync handling: GetDefaultDutyMode, SetDefaultDutyMode"; + span42[1] = "Added IPC for duty mode overrides: GetDutyModeOverride, SetDutyModeOverride"; + span42[2] = "Added IPC for clearing overrides: ClearDutyModeOverride, ClearAllDutyModeOverrides"; + reference80 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list81); + span40[2] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest (Constant Cravings)"); + reference78 = new ChangelogEntry("7.38.2", releaseDate28, list79); + ref ChangelogEntry reference81 = ref span[28]; + DateOnly releaseDate29 = new DateOnly(2025, 11, 18); + num2 = 3; + List list82 = new List(num2); + CollectionsMarshal.SetCount(list82, num2); + Span span43 = CollectionsMarshal.AsSpan(list82); + ref ChangeEntry reference82 = ref span43[0]; + num3 = 1; List list83 = new List(num3); CollectionsMarshal.SetCount(list83, num3); - Span span44 = CollectionsMarshal.AsSpan(list83); - span44[0] = "Fixed various quest schemas"; - span44[1] = "Fixed changelog bullet point encoding"; - span44[2] = "Fixed item use to wait until item is used before next action"; - reference82 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list83); - reference79 = new ChangelogEntry("7.38.1", releaseDate28, list80); - ref ChangelogEntry reference83 = ref span[28]; - DateOnly releaseDate29 = new DateOnly(2025, 11, 17); - num2 = 5; - List list84 = new List(num2); - CollectionsMarshal.SetCount(list84, num2); - Span span45 = CollectionsMarshal.AsSpan(list84); - ref ChangeEntry reference84 = ref span45[0]; - num3 = 2; + CollectionsMarshal.AsSpan(list83)[0] = "Added new fields to quest schema"; + reference82 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list83); + ref ChangeEntry reference83 = ref span43[1]; + num3 = 3; + List list84 = new List(num3); + CollectionsMarshal.SetCount(list84, num3); + Span span44 = CollectionsMarshal.AsSpan(list84); + span44[0] = "A Faerie Tale Come True"; + span44[1] = "Constant Cravings"; + span44[2] = "A Bridge Too Full"; + reference83 = new ChangeEntry(EChangeCategory.QuestUpdates, "Added new quest paths", list84); + ref ChangeEntry reference84 = ref span43[2]; + num3 = 3; List list85 = new List(num3); CollectionsMarshal.SetCount(list85, num3); - Span span46 = CollectionsMarshal.AsSpan(list85); - span46[0] = "Quest sequence window to show expected sequences in each quest (with quest searching)"; - span46[1] = "Changelog"; - reference84 = new ChangeEntry(EChangeCategory.Added, "Major features", list85); - ref ChangeEntry reference85 = ref span45[1]; + Span span45 = CollectionsMarshal.AsSpan(list85); + span45[0] = "Fixed various quest schemas"; + span45[1] = "Fixed changelog bullet point encoding"; + span45[2] = "Fixed item use to wait until item is used before next action"; + reference84 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list85); + reference81 = new ChangelogEntry("7.38.1", releaseDate29, list82); + ref ChangelogEntry reference85 = ref span[29]; + DateOnly releaseDate30 = new DateOnly(2025, 11, 17); + num2 = 5; + List list86 = new List(num2); + CollectionsMarshal.SetCount(list86, num2); + Span span46 = CollectionsMarshal.AsSpan(list86); + ref ChangeEntry reference86 = ref span46[0]; num3 = 2; - List list86 = new List(num3); - CollectionsMarshal.SetCount(list86, num3); - Span span47 = CollectionsMarshal.AsSpan(list86); - span47[0] = "Updated quest schemas"; - span47[1] = "Added search bar to preferred mounts and capitalization to mirror game mount names"; - reference85 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list86); - ref ChangeEntry reference86 = ref span45[2]; - num3 = 3; List list87 = new List(num3); CollectionsMarshal.SetCount(list87, num3); - Span span48 = CollectionsMarshal.AsSpan(list87); - span48[0] = "Renamed IsQuestCompleted → IsQuestComplete"; - span48[1] = "Renamed IsQuestAvailable → IsReadyToAcceptQuest"; - span48[2] = "Added GetCurrentTask IPC"; - reference86 = new ChangeEntry(EChangeCategory.Changed, "IPC changes", list87); - span45[3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added all Hildibrand quests"); - span45[4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed credits/cutscenes playback"); - reference83 = new ChangelogEntry("7.38.0", releaseDate29, list84); - ref ChangelogEntry reference87 = ref span[29]; - DateOnly releaseDate30 = new DateOnly(2025, 11, 8); - num2 = 1; - List list88 = new List(num2); - CollectionsMarshal.SetCount(list88, num2); - CollectionsMarshal.AsSpan(list88)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Fall Guys quest (Just Crowning Around)"); - reference87 = new ChangelogEntry("6.38", releaseDate30, list88); - ref ChangelogEntry reference88 = ref span[30]; + Span span47 = CollectionsMarshal.AsSpan(list87); + span47[0] = "Quest sequence window to show expected sequences in each quest (with quest searching)"; + span47[1] = "Changelog"; + reference86 = new ChangeEntry(EChangeCategory.Added, "Major features", list87); + ref ChangeEntry reference87 = ref span46[1]; + num3 = 2; + List list88 = new List(num3); + CollectionsMarshal.SetCount(list88, num3); + Span span48 = CollectionsMarshal.AsSpan(list88); + span48[0] = "Updated quest schemas"; + span48[1] = "Added search bar to preferred mounts and capitalization to mirror game mount names"; + reference87 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list88); + ref ChangeEntry reference88 = ref span46[2]; + num3 = 3; + List list89 = new List(num3); + CollectionsMarshal.SetCount(list89, num3); + Span span49 = CollectionsMarshal.AsSpan(list89); + span49[0] = "Renamed IsQuestCompleted → IsQuestComplete"; + span49[1] = "Renamed IsQuestAvailable → IsReadyToAcceptQuest"; + span49[2] = "Added GetCurrentTask IPC"; + reference88 = new ChangeEntry(EChangeCategory.Changed, "IPC changes", list89); + span46[3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added all Hildibrand quests"); + span46[4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed credits/cutscenes playback"); + reference85 = new ChangelogEntry("7.38.0", releaseDate30, list86); + ref ChangelogEntry reference89 = ref span[30]; DateOnly releaseDate31 = new DateOnly(2025, 11, 8); num2 = 1; - List list89 = new List(num2); - CollectionsMarshal.SetCount(list89, num2); - CollectionsMarshal.AsSpan(list89)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Cosmic Exploration and various unlock quests"); - reference88 = new ChangelogEntry("6.37", releaseDate31, list89); - ref ChangelogEntry reference89 = ref span[31]; - DateOnly releaseDate32 = new DateOnly(2025, 11, 2); - num2 = 1; List list90 = new List(num2); CollectionsMarshal.SetCount(list90, num2); - CollectionsMarshal.AsSpan(list90)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 6 quest (With High Spirits)"); - reference89 = new ChangelogEntry("6.36", releaseDate32, list90); - ref ChangelogEntry reference90 = ref span[32]; - DateOnly releaseDate33 = new DateOnly(2025, 10, 28); + CollectionsMarshal.AsSpan(list90)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Fall Guys quest (Just Crowning Around)"); + reference89 = new ChangelogEntry("6.38", releaseDate31, list90); + ref ChangelogEntry reference90 = ref span[31]; + DateOnly releaseDate32 = new DateOnly(2025, 11, 8); num2 = 1; List list91 = new List(num2); CollectionsMarshal.SetCount(list91, num2); - CollectionsMarshal.AsSpan(list91)[0] = new ChangeEntry(EChangeCategory.Fixed, "Fixed level 3 MSQ handling if character started on non-XP buff world"); - reference90 = new ChangelogEntry("6.35", releaseDate33, list91); - ref ChangelogEntry reference91 = ref span[33]; - DateOnly releaseDate34 = new DateOnly(2025, 10, 23); - num2 = 2; + CollectionsMarshal.AsSpan(list91)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Cosmic Exploration and various unlock quests"); + reference90 = new ChangelogEntry("6.37", releaseDate32, list91); + ref ChangelogEntry reference91 = ref span[32]; + DateOnly releaseDate33 = new DateOnly(2025, 11, 2); + num2 = 1; List list92 = new List(num2); CollectionsMarshal.SetCount(list92, num2); - Span span49 = CollectionsMarshal.AsSpan(list92); - span49[0] = new ChangeEntry(EChangeCategory.Added, "Added clear priority quests on logout and on completion config settings"); - span49[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed priority quest importing to respect import order"); - reference91 = new ChangelogEntry("6.34", releaseDate34, list92); - ref ChangelogEntry reference92 = ref span[34]; - DateOnly releaseDate35 = new DateOnly(2025, 10, 23); + CollectionsMarshal.AsSpan(list92)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 6 quest (With High Spirits)"); + reference91 = new ChangelogEntry("6.36", releaseDate33, list92); + ref ChangelogEntry reference92 = ref span[33]; + DateOnly releaseDate34 = new DateOnly(2025, 10, 28); num2 = 1; List list93 = new List(num2); CollectionsMarshal.SetCount(list93, num2); - CollectionsMarshal.AsSpan(list93)[0] = new ChangeEntry(EChangeCategory.Fixed, "Fixed RSR combat module"); - reference92 = new ChangelogEntry("6.33", releaseDate35, list93); - ref ChangelogEntry reference93 = ref span[35]; - DateOnly releaseDate36 = new DateOnly(2025, 10, 23); - num2 = 1; + CollectionsMarshal.AsSpan(list93)[0] = new ChangeEntry(EChangeCategory.Fixed, "Fixed level 3 MSQ handling if character started on non-XP buff world"); + reference92 = new ChangelogEntry("6.35", releaseDate34, list93); + ref ChangelogEntry reference93 = ref span[34]; + DateOnly releaseDate35 = new DateOnly(2025, 10, 23); + num2 = 2; List list94 = new List(num2); CollectionsMarshal.SetCount(list94, num2); - CollectionsMarshal.AsSpan(list94)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 5 quest (Forged in Corn)"); - reference93 = new ChangelogEntry("6.32", releaseDate36, list94); - ref ChangelogEntry reference94 = ref span[36]; - DateOnly releaseDate37 = new DateOnly(2025, 10, 21); + Span span50 = CollectionsMarshal.AsSpan(list94); + span50[0] = new ChangeEntry(EChangeCategory.Added, "Added clear priority quests on logout and on completion config settings"); + span50[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed priority quest importing to respect import order"); + reference93 = new ChangelogEntry("6.34", releaseDate35, list94); + ref ChangelogEntry reference94 = ref span[35]; + DateOnly releaseDate36 = new DateOnly(2025, 10, 23); num2 = 1; List list95 = new List(num2); CollectionsMarshal.SetCount(list95, num2); - CollectionsMarshal.AsSpan(list95)[0] = new ChangeEntry(EChangeCategory.Changed, "Added checks for moogle and allied society quests when using add all available quests"); - reference94 = new ChangelogEntry("6.31", releaseDate37, list95); - ref ChangelogEntry reference95 = ref span[37]; - DateOnly releaseDate38 = new DateOnly(2025, 10, 21); + CollectionsMarshal.AsSpan(list95)[0] = new ChangeEntry(EChangeCategory.Fixed, "Fixed RSR combat module"); + reference94 = new ChangelogEntry("6.33", releaseDate36, list95); + ref ChangelogEntry reference95 = ref span[36]; + DateOnly releaseDate37 = new DateOnly(2025, 10, 23); num2 = 1; List list96 = new List(num2); CollectionsMarshal.SetCount(list96, num2); - CollectionsMarshal.AsSpan(list96)[0] = new ChangeEntry(EChangeCategory.Added, "Added button to journal that allows adding all available quests to priority"); - reference95 = new ChangelogEntry("6.30", releaseDate38, list96); - ref ChangelogEntry reference96 = ref span[38]; - DateOnly releaseDate39 = new DateOnly(2025, 10, 20); - num2 = 2; + CollectionsMarshal.AsSpan(list96)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 5 quest (Forged in Corn)"); + reference95 = new ChangelogEntry("6.32", releaseDate37, list96); + ref ChangelogEntry reference96 = ref span[37]; + DateOnly releaseDate38 = new DateOnly(2025, 10, 21); + num2 = 1; List list97 = new List(num2); CollectionsMarshal.SetCount(list97, num2); - Span span50 = CollectionsMarshal.AsSpan(list97); - ref ChangeEntry reference97 = ref span50[0]; - num3 = 2; - List list98 = new List(num3); - CollectionsMarshal.SetCount(list98, num3); - Span span51 = CollectionsMarshal.AsSpan(list98); - span51[0] = "Added item count to combat handling rework"; - span51[1] = "Updated Pandora conflicting features"; - reference97 = new ChangeEntry(EChangeCategory.Changed, "Combat handling improvements", list98); - span50[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest to purchase Gysahl Greens if not in inventory"); - reference96 = new ChangelogEntry("6.29", releaseDate39, list97); - ref ChangelogEntry reference98 = ref span[39]; - DateOnly releaseDate40 = new DateOnly(2025, 10, 19); + CollectionsMarshal.AsSpan(list97)[0] = new ChangeEntry(EChangeCategory.Changed, "Added checks for moogle and allied society quests when using add all available quests"); + reference96 = new ChangelogEntry("6.31", releaseDate38, list97); + ref ChangelogEntry reference97 = ref span[38]; + DateOnly releaseDate39 = new DateOnly(2025, 10, 21); num2 = 1; + List list98 = new List(num2); + CollectionsMarshal.SetCount(list98, num2); + CollectionsMarshal.AsSpan(list98)[0] = new ChangeEntry(EChangeCategory.Added, "Added button to journal that allows adding all available quests to priority"); + reference97 = new ChangelogEntry("6.30", releaseDate39, list98); + ref ChangelogEntry reference98 = ref span[39]; + DateOnly releaseDate40 = new DateOnly(2025, 10, 20); + num2 = 2; List list99 = new List(num2); CollectionsMarshal.SetCount(list99, num2); - CollectionsMarshal.AsSpan(list99)[0] = new ChangeEntry(EChangeCategory.Changed, "Reworked kill count combat handling - combat and enemy kills are now processed instantly"); - reference98 = new ChangelogEntry("6.28", releaseDate40, list99); - ref ChangelogEntry reference99 = ref span[40]; - DateOnly releaseDate41 = new DateOnly(2025, 10, 18); - num2 = 2; - List list100 = new List(num2); - CollectionsMarshal.SetCount(list100, num2); - Span span52 = CollectionsMarshal.AsSpan(list100); - span52[0] = new ChangeEntry(EChangeCategory.Changed, "Improved Aether Current checking logic"); - span52[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Chocobo Taxi Stand CheckSkip error and Patch 7.3 Fantasia unlock quest date/time"); - reference99 = new ChangelogEntry("6.27", releaseDate41, list100); - ref ChangelogEntry reference100 = ref span[41]; - DateOnly releaseDate42 = new DateOnly(2025, 10, 18); + Span span51 = CollectionsMarshal.AsSpan(list99); + ref ChangeEntry reference99 = ref span51[0]; + num3 = 2; + List list100 = new List(num3); + CollectionsMarshal.SetCount(list100, num3); + Span span52 = CollectionsMarshal.AsSpan(list100); + span52[0] = "Added item count to combat handling rework"; + span52[1] = "Updated Pandora conflicting features"; + reference99 = new ChangeEntry(EChangeCategory.Changed, "Combat handling improvements", list100); + span51[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest to purchase Gysahl Greens if not in inventory"); + reference98 = new ChangelogEntry("6.29", releaseDate40, list99); + ref ChangelogEntry reference100 = ref span[40]; + DateOnly releaseDate41 = new DateOnly(2025, 10, 19); num2 = 1; List list101 = new List(num2); CollectionsMarshal.SetCount(list101, num2); - CollectionsMarshal.AsSpan(list101)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests"); - reference100 = new ChangelogEntry("6.26", releaseDate42, list101); - ref ChangelogEntry reference101 = ref span[42]; - DateOnly releaseDate43 = new DateOnly(2025, 10, 17); - num2 = 1; + CollectionsMarshal.AsSpan(list101)[0] = new ChangeEntry(EChangeCategory.Changed, "Reworked kill count combat handling - combat and enemy kills are now processed instantly"); + reference100 = new ChangelogEntry("6.28", releaseDate41, list101); + ref ChangelogEntry reference101 = ref span[41]; + DateOnly releaseDate42 = new DateOnly(2025, 10, 18); + num2 = 2; List list102 = new List(num2); CollectionsMarshal.SetCount(list102, num2); - CollectionsMarshal.AsSpan(list102)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added All Saints' Wake 2025 quests and 7.35 Yok Huy rank 4 quests"); - reference101 = new ChangelogEntry("6.25", releaseDate43, list102); - ref ChangelogEntry reference102 = ref span[43]; - DateOnly releaseDate44 = new DateOnly(2025, 10, 16); + Span span53 = CollectionsMarshal.AsSpan(list102); + span53[0] = new ChangeEntry(EChangeCategory.Changed, "Improved Aether Current checking logic"); + span53[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Chocobo Taxi Stand CheckSkip error and Patch 7.3 Fantasia unlock quest date/time"); + reference101 = new ChangelogEntry("6.27", releaseDate42, list102); + ref ChangelogEntry reference102 = ref span[42]; + DateOnly releaseDate43 = new DateOnly(2025, 10, 18); num2 = 1; List list103 = new List(num2); CollectionsMarshal.SetCount(list103, num2); - CollectionsMarshal.AsSpan(list103)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests and Deep Dungeon quest"); - reference102 = new ChangelogEntry("6.24", releaseDate44, list103); - ref ChangelogEntry reference103 = ref span[44]; - DateOnly releaseDate45 = new DateOnly(2025, 10, 13); + CollectionsMarshal.AsSpan(list103)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests"); + reference102 = new ChangelogEntry("6.26", releaseDate43, list103); + ref ChangelogEntry reference103 = ref span[43]; + DateOnly releaseDate44 = new DateOnly(2025, 10, 17); num2 = 1; List list104 = new List(num2); CollectionsMarshal.SetCount(list104, num2); - CollectionsMarshal.AsSpan(list104)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quest (Larder Logistics)"); - reference103 = new ChangelogEntry("6.23", releaseDate45, list104); - ref ChangelogEntry reference104 = ref span[45]; - DateOnly releaseDate46 = new DateOnly(2025, 10, 12); - num2 = 3; + CollectionsMarshal.AsSpan(list104)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added All Saints' Wake 2025 quests and 7.35 Yok Huy rank 4 quests"); + reference103 = new ChangelogEntry("6.25", releaseDate44, list104); + ref ChangelogEntry reference104 = ref span[44]; + DateOnly releaseDate45 = new DateOnly(2025, 10, 16); + num2 = 1; List list105 = new List(num2); CollectionsMarshal.SetCount(list105, num2); - Span span53 = CollectionsMarshal.AsSpan(list105); - span53[0] = new ChangeEntry(EChangeCategory.Changed, "Prevent disabled or Locked quests from being started as 'Start as next quest'"); - span53[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); - span53[2] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Yok Huy quest and journal quest chain priority issues"); - reference104 = new ChangelogEntry("6.22", releaseDate46, list105); - ref ChangelogEntry reference105 = ref span[46]; - DateOnly releaseDate47 = new DateOnly(2025, 10, 12); - num2 = 2; + CollectionsMarshal.AsSpan(list105)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests and Deep Dungeon quest"); + reference104 = new ChangelogEntry("6.24", releaseDate45, list105); + ref ChangelogEntry reference105 = ref span[45]; + DateOnly releaseDate46 = new DateOnly(2025, 10, 13); + num2 = 1; List list106 = new List(num2); CollectionsMarshal.SetCount(list106, num2); - Span span54 = CollectionsMarshal.AsSpan(list106); - span54[0] = new ChangeEntry(EChangeCategory.Added, "Added expansion abbreviation to journal window"); - span54[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); - reference105 = new ChangelogEntry("6.21", releaseDate47, list106); - ref ChangelogEntry reference106 = ref span[47]; - DateOnly releaseDate48 = new DateOnly(2025, 10, 10); - num2 = 2; + CollectionsMarshal.AsSpan(list106)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quest (Larder Logistics)"); + reference105 = new ChangelogEntry("6.23", releaseDate46, list106); + ref ChangelogEntry reference106 = ref span[46]; + DateOnly releaseDate47 = new DateOnly(2025, 10, 12); + num2 = 3; List list107 = new List(num2); CollectionsMarshal.SetCount(list107, num2); - Span span55 = CollectionsMarshal.AsSpan(list107); - span55[0] = new ChangeEntry(EChangeCategory.Changed, "Allow completed repeatable quests to be used with 'Add quest and requirements to priority' feature"); - span55[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 quest (A Work of Cart)"); - reference106 = new ChangelogEntry("6.20", releaseDate48, list107); - ref ChangelogEntry reference107 = ref span[48]; - DateOnly releaseDate49 = new DateOnly(2025, 10, 9); - num2 = 3; + Span span54 = CollectionsMarshal.AsSpan(list107); + span54[0] = new ChangeEntry(EChangeCategory.Changed, "Prevent disabled or Locked quests from being started as 'Start as next quest'"); + span54[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); + span54[2] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Yok Huy quest and journal quest chain priority issues"); + reference106 = new ChangelogEntry("6.22", releaseDate47, list107); + ref ChangelogEntry reference107 = ref span[47]; + DateOnly releaseDate48 = new DateOnly(2025, 10, 12); + num2 = 2; List list108 = new List(num2); CollectionsMarshal.SetCount(list108, num2); - Span span56 = CollectionsMarshal.AsSpan(list108); - span56[0] = new ChangeEntry(EChangeCategory.Added, "Added config to batch Allied Society quest turn-ins"); - span56[1] = new ChangeEntry(EChangeCategory.Changed, "Repeatable quests now show correct availability state in journal"); - span56[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 2 quests"); - reference107 = new ChangelogEntry("6.19", releaseDate49, list108); - ref ChangelogEntry reference108 = ref span[49]; - DateOnly releaseDate50 = new DateOnly(2025, 10, 9); + Span span55 = CollectionsMarshal.AsSpan(list108); + span55[0] = new ChangeEntry(EChangeCategory.Added, "Added expansion abbreviation to journal window"); + span55[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); + reference107 = new ChangelogEntry("6.21", releaseDate48, list108); + ref ChangelogEntry reference108 = ref span[48]; + DateOnly releaseDate49 = new DateOnly(2025, 10, 10); num2 = 2; List list109 = new List(num2); CollectionsMarshal.SetCount(list109, num2); - Span span57 = CollectionsMarshal.AsSpan(list109); - span57[0] = new ChangeEntry(EChangeCategory.Changed, "Show once completed quests with improved state display"); - span57[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy daily quest and improvements to various Yok Huy quests"); - reference108 = new ChangelogEntry("6.18", releaseDate50, list109); - ref ChangelogEntry reference109 = ref span[50]; - DateOnly releaseDate51 = new DateOnly(2025, 10, 8); - num2 = 1; + Span span56 = CollectionsMarshal.AsSpan(list109); + span56[0] = new ChangeEntry(EChangeCategory.Changed, "Allow completed repeatable quests to be used with 'Add quest and requirements to priority' feature"); + span56[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 quest (A Work of Cart)"); + reference108 = new ChangelogEntry("6.20", releaseDate49, list109); + ref ChangelogEntry reference109 = ref span[49]; + DateOnly releaseDate50 = new DateOnly(2025, 10, 9); + num2 = 3; List list110 = new List(num2); CollectionsMarshal.SetCount(list110, num2); - CollectionsMarshal.AsSpan(list110)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 and rank 2 quests"); - reference109 = new ChangelogEntry("6.17", releaseDate51, list110); - ref ChangelogEntry reference110 = ref span[51]; - DateOnly releaseDate52 = new DateOnly(2025, 10, 8); - num2 = 1; + Span span57 = CollectionsMarshal.AsSpan(list110); + span57[0] = new ChangeEntry(EChangeCategory.Added, "Added config to batch Allied Society quest turn-ins"); + span57[1] = new ChangeEntry(EChangeCategory.Changed, "Repeatable quests now show correct availability state in journal"); + span57[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 2 quests"); + reference109 = new ChangelogEntry("6.19", releaseDate50, list110); + ref ChangelogEntry reference110 = ref span[50]; + DateOnly releaseDate51 = new DateOnly(2025, 10, 9); + num2 = 2; List list111 = new List(num2); CollectionsMarshal.SetCount(list111, num2); - CollectionsMarshal.AsSpan(list111)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon quest (Faerie Tale)"); - reference110 = new ChangelogEntry("6.16", releaseDate52, list111); - ref ChangelogEntry reference111 = ref span[52]; - DateOnly releaseDate53 = new DateOnly(2025, 10, 8); - num2 = 2; + Span span58 = CollectionsMarshal.AsSpan(list111); + span58[0] = new ChangeEntry(EChangeCategory.Changed, "Show once completed quests with improved state display"); + span58[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy daily quest and improvements to various Yok Huy quests"); + reference110 = new ChangelogEntry("6.18", releaseDate51, list111); + ref ChangelogEntry reference111 = ref span[51]; + DateOnly releaseDate52 = new DateOnly(2025, 10, 8); + num2 = 1; List list112 = new List(num2); CollectionsMarshal.SetCount(list112, num2); - Span span58 = CollectionsMarshal.AsSpan(list112); - span58[0] = new ChangeEntry(EChangeCategory.Changed, "Dalamud cleanup"); - span58[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest level requirement check log spam"); - reference111 = new ChangelogEntry("6.15", releaseDate53, list112); - ref ChangelogEntry reference112 = ref span[53]; - DateOnly releaseDate54 = new DateOnly(2025, 10, 8); + CollectionsMarshal.AsSpan(list112)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 and rank 2 quests"); + reference111 = new ChangelogEntry("6.17", releaseDate52, list112); + ref ChangelogEntry reference112 = ref span[52]; + DateOnly releaseDate53 = new DateOnly(2025, 10, 8); num2 = 1; List list113 = new List(num2); CollectionsMarshal.SetCount(list113, num2); - CollectionsMarshal.AsSpan(list113)[0] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check logic if quest were MSQ"); - reference112 = new ChangelogEntry("6.14", releaseDate54, list113); - ref ChangelogEntry reference113 = ref span[54]; - DateOnly releaseDate55 = new DateOnly(2025, 10, 8); + CollectionsMarshal.AsSpan(list113)[0] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon quest (Faerie Tale)"); + reference112 = new ChangelogEntry("6.16", releaseDate53, list113); + ref ChangelogEntry reference113 = ref span[53]; + DateOnly releaseDate54 = new DateOnly(2025, 10, 8); num2 = 2; List list114 = new List(num2); CollectionsMarshal.SetCount(list114, num2); Span span59 = CollectionsMarshal.AsSpan(list114); - ref ChangeEntry reference114 = ref span59[0]; - num3 = 3; - List list115 = new List(num3); - CollectionsMarshal.SetCount(list115, num3); - Span span60 = CollectionsMarshal.AsSpan(list115); - span60[0] = "Context menu option to add required quests and their chain to priority list"; - span60[1] = "AetheryteShortcut to multiple quests"; - span60[2] = "Artisan as a recommended plugin/dependency"; - reference114 = new ChangeEntry(EChangeCategory.Added, "Quest improvements", list115); - span59[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check and priority list issues"); - reference113 = new ChangelogEntry("6.13", releaseDate55, list114); + span59[0] = new ChangeEntry(EChangeCategory.Changed, "Dalamud cleanup"); + span59[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest level requirement check log spam"); + reference113 = new ChangelogEntry("6.15", releaseDate54, list114); + ref ChangelogEntry reference114 = ref span[54]; + DateOnly releaseDate55 = new DateOnly(2025, 10, 8); + num2 = 1; + List list115 = new List(num2); + CollectionsMarshal.SetCount(list115, num2); + CollectionsMarshal.AsSpan(list115)[0] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check logic if quest were MSQ"); + reference114 = new ChangelogEntry("6.14", releaseDate55, list115); ref ChangelogEntry reference115 = ref span[55]; - DateOnly releaseDate56 = new DateOnly(2025, 10, 7); - num2 = 4; + DateOnly releaseDate56 = new DateOnly(2025, 10, 8); + num2 = 2; List list116 = new List(num2); CollectionsMarshal.SetCount(list116, num2); - Span span61 = CollectionsMarshal.AsSpan(list116); - ref ChangeEntry reference116 = ref span61[0]; - num3 = 4; + Span span60 = CollectionsMarshal.AsSpan(list116); + ref ChangeEntry reference116 = ref span60[0]; + num3 = 3; List list117 = new List(num3); CollectionsMarshal.SetCount(list117, num3); - Span span62 = CollectionsMarshal.AsSpan(list117); - span62[0] = "FATE combat handling with auto level syncing"; - span62[1] = "Start accepted quests from journal with 'Start as next quest'"; - span62[2] = "Update quest tracking when quests are hidden or prioritised in game"; - span62[3] = "QuestMap as a recommended plugin/dependency"; - reference116 = new ChangeEntry(EChangeCategory.Added, "FATE and quest tracking", list117); - ref ChangeEntry reference117 = ref span61[1]; + Span span61 = CollectionsMarshal.AsSpan(list117); + span61[0] = "Context menu option to add required quests and their chain to priority list"; + span61[1] = "AetheryteShortcut to multiple quests"; + span61[2] = "Artisan as a recommended plugin/dependency"; + reference116 = new ChangeEntry(EChangeCategory.Added, "Quest improvements", list117); + span60[1] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check and priority list issues"); + reference115 = new ChangelogEntry("6.13", releaseDate56, list116); + ref ChangelogEntry reference117 = ref span[56]; + DateOnly releaseDate57 = new DateOnly(2025, 10, 7); + num2 = 4; + List list118 = new List(num2); + CollectionsMarshal.SetCount(list118, num2); + Span span62 = CollectionsMarshal.AsSpan(list118); + ref ChangeEntry reference118 = ref span62[0]; + num3 = 4; + List list119 = new List(num3); + CollectionsMarshal.SetCount(list119, num3); + Span span63 = CollectionsMarshal.AsSpan(list119); + span63[0] = "FATE combat handling with auto level syncing"; + span63[1] = "Start accepted quests from journal with 'Start as next quest'"; + span63[2] = "Update quest tracking when quests are hidden or prioritised in game"; + span63[3] = "QuestMap as a recommended plugin/dependency"; + reference118 = new ChangeEntry(EChangeCategory.Added, "FATE and quest tracking", list119); + ref ChangeEntry reference119 = ref span62[1]; num3 = 3; - List list118 = new List(num3); - CollectionsMarshal.SetCount(list118, num3); - Span span63 = CollectionsMarshal.AsSpan(list118); - span63[0] = "Always prioritise next quest during teleportation/zone transitions"; - span63[1] = "Improved accepted quest logic with abandoned quest detection"; - span63[2] = "Show quests without quest paths as Locked"; - reference117 = new ChangeEntry(EChangeCategory.Changed, "Quest prioritisation improvements", list118); - span61[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon, Hildibrand, Yok Huy, Monster Hunter Wilds Collab, and Doman Enclave quests"); - span61[3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed accepted/active quest display and Hildibrand quest issues"); - reference115 = new ChangelogEntry("6.12", releaseDate56, list116); - ref ChangelogEntry reference118 = ref span[56]; - DateOnly releaseDate57 = new DateOnly(2025, 10, 3); + List list120 = new List(num3); + CollectionsMarshal.SetCount(list120, num3); + Span span64 = CollectionsMarshal.AsSpan(list120); + span64[0] = "Always prioritise next quest during teleportation/zone transitions"; + span64[1] = "Improved accepted quest logic with abandoned quest detection"; + span64[2] = "Show quests without quest paths as Locked"; + reference119 = new ChangeEntry(EChangeCategory.Changed, "Quest prioritisation improvements", list120); + span62[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon, Hildibrand, Yok Huy, Monster Hunter Wilds Collab, and Doman Enclave quests"); + span62[3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed accepted/active quest display and Hildibrand quest issues"); + reference117 = new ChangelogEntry("6.12", releaseDate57, list118); + ref ChangelogEntry reference120 = ref span[57]; + DateOnly releaseDate58 = new DateOnly(2025, 10, 3); num2 = 1; - List list119 = new List(num2); - CollectionsMarshal.SetCount(list119, num2); - CollectionsMarshal.AsSpan(list119)[0] = new ChangeEntry(EChangeCategory.Changed, "Added remaining checks for quest priority to prevent infinite teleport looping"); - reference118 = new ChangelogEntry("6.11", releaseDate57, list119); - ref ChangelogEntry reference119 = ref span[57]; - DateOnly releaseDate58 = new DateOnly(2025, 10, 2); - num2 = 1; - List list120 = new List(num2); - CollectionsMarshal.SetCount(list120, num2); - ref ChangeEntry reference120 = ref CollectionsMarshal.AsSpan(list120)[0]; - num3 = 2; - List list121 = new List(num3); - CollectionsMarshal.SetCount(list121, num3); - Span span64 = CollectionsMarshal.AsSpan(list121); - span64[0] = "Don't show quests as available if player doesn't meet level requirements"; - span64[1] = "Updated 'required for MSQ' text in Crystal Tower quest preset window"; - reference120 = new ChangeEntry(EChangeCategory.Changed, "Quest window improvements", list121); - reference119 = new ChangelogEntry("6.10", releaseDate58, list120); + List list121 = new List(num2); + CollectionsMarshal.SetCount(list121, num2); + CollectionsMarshal.AsSpan(list121)[0] = new ChangeEntry(EChangeCategory.Changed, "Added remaining checks for quest priority to prevent infinite teleport looping"); + reference120 = new ChangelogEntry("6.11", releaseDate58, list121); ref ChangelogEntry reference121 = ref span[58]; - DateOnly releaseDate59 = new DateOnly(2025, 9, 21); - num2 = 5; + DateOnly releaseDate59 = new DateOnly(2025, 10, 2); + num2 = 1; List list122 = new List(num2); CollectionsMarshal.SetCount(list122, num2); - Span span65 = CollectionsMarshal.AsSpan(list122); - ref ChangeEntry reference122 = ref span65[0]; - num3 = 4; + ref ChangeEntry reference122 = ref CollectionsMarshal.AsSpan(list122)[0]; + num3 = 2; List list123 = new List(num3); CollectionsMarshal.SetCount(list123, num3); - Span span66 = CollectionsMarshal.AsSpan(list123); - span66[0] = "Reworked event quest handling - automatically displays when events are active"; - span66[1] = "Reworked journal system with improved filtering and display"; - span66[2] = "Reworked Priority Quests tab (Manual Priority and Quest Presets)"; - span66[3] = "Quest path viewer site (https://wigglymuffin.github.io/FFXIV-Tools/)"; - reference122 = new ChangeEntry(EChangeCategory.Added, "Major system reworks", list123); - ref ChangeEntry reference123 = ref span65[1]; + Span span65 = CollectionsMarshal.AsSpan(list123); + span65[0] = "Don't show quests as available if player doesn't meet level requirements"; + span65[1] = "Updated 'required for MSQ' text in Crystal Tower quest preset window"; + reference122 = new ChangeEntry(EChangeCategory.Changed, "Quest window improvements", list123); + reference121 = new ChangelogEntry("6.10", releaseDate59, list122); + ref ChangelogEntry reference123 = ref span[59]; + DateOnly releaseDate60 = new DateOnly(2025, 9, 21); + num2 = 5; + List list124 = new List(num2); + CollectionsMarshal.SetCount(list124, num2); + Span span66 = CollectionsMarshal.AsSpan(list124); + ref ChangeEntry reference124 = ref span66[0]; num3 = 4; - List list124 = new List(num3); - CollectionsMarshal.SetCount(list124, num3); - Span span67 = CollectionsMarshal.AsSpan(list124); - span67[0] = "Questionable.IsQuestCompleted"; - span67[1] = "Questionable.IsQuestAvailable"; - span67[2] = "Questionable.IsQuestAccepted"; - span67[3] = "Questionable.IsQuestUnobtainable"; - reference123 = new ChangeEntry(EChangeCategory.Added, "New IPC commands", list124); - ref ChangeEntry reference124 = ref span65[2]; - num3 = 5; List list125 = new List(num3); CollectionsMarshal.SetCount(list125, num3); - Span span68 = CollectionsMarshal.AsSpan(list125); - span68[0] = "Improved JSON quest validation with specific error reasons"; - span68[1] = "Added stop at sequence stop condition"; - span68[2] = "Improved Pandora plugin conflict detection"; - span68[3] = "Improved DialogueChoices regex matching"; - span68[4] = "Improved refresh checker for all quest states"; - reference124 = new ChangeEntry(EChangeCategory.Changed, "Various improvements", list125); - span65[3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.31 Occult Crescent quests"); - span65[4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed cutscene crashes, Single Player Duty triggers, and various quest issues"); - reference121 = new ChangelogEntry("6.9", releaseDate59, list122); - ref ChangelogEntry reference125 = ref span[59]; - DateOnly releaseDate60 = new DateOnly(2025, 9, 2); - num2 = 4; - List list126 = new List(num2); - CollectionsMarshal.SetCount(list126, num2); - Span span69 = CollectionsMarshal.AsSpan(list126); - ref ChangeEntry reference126 = ref span69[0]; + Span span67 = CollectionsMarshal.AsSpan(list125); + span67[0] = "Reworked event quest handling - automatically displays when events are active"; + span67[1] = "Reworked journal system with improved filtering and display"; + span67[2] = "Reworked Priority Quests tab (Manual Priority and Quest Presets)"; + span67[3] = "Quest path viewer site (https://wigglymuffin.github.io/FFXIV-Tools/)"; + reference124 = new ChangeEntry(EChangeCategory.Added, "Major system reworks", list125); + ref ChangeEntry reference125 = ref span66[1]; num3 = 4; + List list126 = new List(num3); + CollectionsMarshal.SetCount(list126, num3); + Span span68 = CollectionsMarshal.AsSpan(list126); + span68[0] = "Questionable.IsQuestCompleted"; + span68[1] = "Questionable.IsQuestAvailable"; + span68[2] = "Questionable.IsQuestAccepted"; + span68[3] = "Questionable.IsQuestUnobtainable"; + reference125 = new ChangeEntry(EChangeCategory.Added, "New IPC commands", list126); + ref ChangeEntry reference126 = ref span66[2]; + num3 = 5; List list127 = new List(num3); CollectionsMarshal.SetCount(list127, num3); - Span span70 = CollectionsMarshal.AsSpan(list127); - span70[0] = "Help commands and priority quest command"; - span70[1] = "Prevent 'CompleteQuest' step setting"; - span70[2] = "Duty counts and controls in 'Quest Battles' tab"; - span70[3] = "'Refresh quest timer' setting (WIP)"; - reference126 = new ChangeEntry(EChangeCategory.Added, "Command and UI improvements", list127); - span69[1] = new ChangeEntry(EChangeCategory.Changed, "Improved 'Clear All' buttons to require CTRL being held"); - span69[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Zodiac quests and 7.31 Cosmic/Occult Crescent quests"); - span69[3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Fishing for Friendship and Cosmic Exploration quests"); - reference125 = new ChangelogEntry("6.8", releaseDate60, list126); + Span span69 = CollectionsMarshal.AsSpan(list127); + span69[0] = "Improved JSON quest validation with specific error reasons"; + span69[1] = "Added stop at sequence stop condition"; + span69[2] = "Improved Pandora plugin conflict detection"; + span69[3] = "Improved DialogueChoices regex matching"; + span69[4] = "Improved refresh checker for all quest states"; + reference126 = new ChangeEntry(EChangeCategory.Changed, "Various improvements", list127); + span66[3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.31 Occult Crescent quests"); + span66[4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed cutscene crashes, Single Player Duty triggers, and various quest issues"); + reference123 = new ChangelogEntry("6.9", releaseDate60, list124); ref ChangelogEntry reference127 = ref span[60]; - DateOnly releaseDate61 = new DateOnly(2025, 8, 27); + DateOnly releaseDate61 = new DateOnly(2025, 9, 2); num2 = 4; List list128 = new List(num2); CollectionsMarshal.SetCount(list128, num2); - Span span71 = CollectionsMarshal.AsSpan(list128); - ref ChangeEntry reference128 = ref span71[0]; - num3 = 2; + Span span70 = CollectionsMarshal.AsSpan(list128); + ref ChangeEntry reference128 = ref span70[0]; + num3 = 4; List list129 = new List(num3); CollectionsMarshal.SetCount(list129, num3); - Span span72 = CollectionsMarshal.AsSpan(list129); - span72[0] = "Icon to 'Clear All' button in stop conditions"; - span72[1] = "Duty counts and 'Enable All' button in 'Duties' tab"; - reference128 = new ChangeEntry(EChangeCategory.Added, "UI improvements", list129); - span71[1] = new ChangeEntry(EChangeCategory.Changed, "Renamed 'Clear' button to 'Clear All' in priority window"); - span71[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Rising 2025 Event Quests"); - span71[3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed clipboard assigning blacklist to whitelist in 'Duties' tab"); - reference127 = new ChangelogEntry("6.7", releaseDate61, list128); + Span span71 = CollectionsMarshal.AsSpan(list129); + span71[0] = "Help commands and priority quest command"; + span71[1] = "Prevent 'CompleteQuest' step setting"; + span71[2] = "Duty counts and controls in 'Quest Battles' tab"; + span71[3] = "'Refresh quest timer' setting (WIP)"; + reference128 = new ChangeEntry(EChangeCategory.Added, "Command and UI improvements", list129); + span70[1] = new ChangeEntry(EChangeCategory.Changed, "Improved 'Clear All' buttons to require CTRL being held"); + span70[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Zodiac quests and 7.31 Cosmic/Occult Crescent quests"); + span70[3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Fishing for Friendship and Cosmic Exploration quests"); + reference127 = new ChangelogEntry("6.8", releaseDate61, list128); ref ChangelogEntry reference129 = ref span[61]; - DateOnly releaseDate62 = new DateOnly(2025, 8, 25); - num2 = 2; + DateOnly releaseDate62 = new DateOnly(2025, 8, 27); + num2 = 4; List list130 = new List(num2); CollectionsMarshal.SetCount(list130, num2); - Span span73 = CollectionsMarshal.AsSpan(list130); - ref ChangeEntry reference130 = ref span73[0]; + Span span72 = CollectionsMarshal.AsSpan(list130); + ref ChangeEntry reference130 = ref span72[0]; num3 = 2; List list131 = new List(num3); CollectionsMarshal.SetCount(list131, num3); - Span span74 = CollectionsMarshal.AsSpan(list131); - span74[0] = "Missing emotes to schema and emote handler"; - span74[1] = "Improved stop conditions with 'Clear All' button"; - reference130 = new ChangeEntry(EChangeCategory.Added, "Emote support and stop conditions", list131); - span73[1] = new ChangeEntry(EChangeCategory.Changed, "Stop at level functionality"); - reference129 = new ChangelogEntry("6.6", releaseDate62, list130); + Span span73 = CollectionsMarshal.AsSpan(list131); + span73[0] = "Icon to 'Clear All' button in stop conditions"; + span73[1] = "Duty counts and 'Enable All' button in 'Duties' tab"; + reference130 = new ChangeEntry(EChangeCategory.Added, "UI improvements", list131); + span72[1] = new ChangeEntry(EChangeCategory.Changed, "Renamed 'Clear' button to 'Clear All' in priority window"); + span72[2] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Rising 2025 Event Quests"); + span72[3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed clipboard assigning blacklist to whitelist in 'Duties' tab"); + reference129 = new ChangelogEntry("6.7", releaseDate62, list130); ref ChangelogEntry reference131 = ref span[62]; DateOnly releaseDate63 = new DateOnly(2025, 8, 25); num2 = 2; List list132 = new List(num2); CollectionsMarshal.SetCount(list132, num2); - Span span75 = CollectionsMarshal.AsSpan(list132); - span75[0] = new ChangeEntry(EChangeCategory.Fixed, "Potential fix to single/solo duties softlocking"); - span75[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added San d'Oria: The Second Walk and various side quests"); - reference131 = new ChangelogEntry("6.5", releaseDate63, list132); + Span span74 = CollectionsMarshal.AsSpan(list132); + ref ChangeEntry reference132 = ref span74[0]; + num3 = 2; + List list133 = new List(num3); + CollectionsMarshal.SetCount(list133, num3); + Span span75 = CollectionsMarshal.AsSpan(list133); + span75[0] = "Missing emotes to schema and emote handler"; + span75[1] = "Improved stop conditions with 'Clear All' button"; + reference132 = new ChangeEntry(EChangeCategory.Added, "Emote support and stop conditions", list133); + span74[1] = new ChangeEntry(EChangeCategory.Changed, "Stop at level functionality"); + reference131 = new ChangelogEntry("6.6", releaseDate63, list132); + ref ChangelogEntry reference133 = ref span[63]; + DateOnly releaseDate64 = new DateOnly(2025, 8, 25); + num2 = 2; + List list134 = new List(num2); + CollectionsMarshal.SetCount(list134, num2); + Span span76 = CollectionsMarshal.AsSpan(list134); + span76[0] = new ChangeEntry(EChangeCategory.Fixed, "Potential fix to single/solo duties softlocking"); + span76[1] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added San d'Oria: The Second Walk and various side quests"); + reference133 = new ChangelogEntry("6.5", releaseDate64, list134); Changelogs = list; } } diff --git a/Questionable/Questionable.External/AutomatonIpc.cs b/Questionable/Questionable.External/AutomatonIpc.cs index 82e256c..5f6eb1b 100644 --- a/Questionable/Questionable.External/AutomatonIpc.cs +++ b/Questionable/Questionable.External/AutomatonIpc.cs @@ -28,6 +28,8 @@ internal sealed class AutomatonIpc : IDisposable private readonly FateController _fateController; + private readonly SeasonalDutyController _seasonalDutyController; + private readonly TerritoryData _territoryData; private readonly IClientState _clientState; @@ -44,11 +46,12 @@ internal sealed class AutomatonIpc : IDisposable private bool _wasFateRunning; - public AutomatonIpc(Configuration configuration, IDalamudPluginInterface pluginInterface, QuestController questController, FateController fateController, TerritoryData territoryData, IClientState clientState, IFramework framework, ILogger logger) + public AutomatonIpc(Configuration configuration, IDalamudPluginInterface pluginInterface, QuestController questController, FateController fateController, SeasonalDutyController seasonalDutyController, TerritoryData territoryData, IClientState clientState, IFramework framework, ILogger logger) { _configuration = configuration; _questController = questController; _fateController = fateController; + _seasonalDutyController = seasonalDutyController; _territoryData = territoryData; _clientState = clientState; _framework = framework; @@ -65,7 +68,7 @@ internal sealed class AutomatonIpc : IDisposable { Task.Run((Action)DisableConflictingTweaks); } - else if (!_fateController.IsRunning) + else if (!_fateController.IsRunning && !_seasonalDutyController.IsRunning) { Task.Run((Action)RestoreConflictingTweaks); } @@ -73,11 +76,11 @@ internal sealed class AutomatonIpc : IDisposable private void OnFrameworkUpdate(IFramework framework) { - bool isRunning = _fateController.IsRunning; - if (isRunning != _wasFateRunning) + bool flag = _fateController.IsRunning || _seasonalDutyController.IsRunning; + if (flag != _wasFateRunning) { - _wasFateRunning = isRunning; - if (isRunning && !_territoryData.IsDutyInstance(_clientState.TerritoryType)) + _wasFateRunning = flag; + if (flag && !_territoryData.IsDutyInstance(_clientState.TerritoryType)) { Task.Run((Action)DisableConflictingTweaks); } diff --git a/Questionable/Questionable.External/PandorasBoxIpc.cs b/Questionable/Questionable.External/PandorasBoxIpc.cs index 7085393..9a51124 100644 --- a/Questionable/Questionable.External/PandorasBoxIpc.cs +++ b/Questionable/Questionable.External/PandorasBoxIpc.cs @@ -29,6 +29,8 @@ internal sealed class PandorasBoxIpc : IDisposable private readonly FateController _fateController; + private readonly SeasonalDutyController _seasonalDutyController; + private readonly TerritoryData _territoryData; private readonly IClientState _clientState; @@ -45,11 +47,12 @@ internal sealed class PandorasBoxIpc : IDisposable private bool _wasFateRunning; - public PandorasBoxIpc(Configuration configuration, IDalamudPluginInterface pluginInterface, QuestController questController, FateController fateController, TerritoryData territoryData, IClientState clientState, IFramework framework, ILogger logger) + public PandorasBoxIpc(Configuration configuration, IDalamudPluginInterface pluginInterface, QuestController questController, FateController fateController, SeasonalDutyController seasonalDutyController, TerritoryData territoryData, IClientState clientState, IFramework framework, ILogger logger) { _configuration = configuration; _questController = questController; _fateController = fateController; + _seasonalDutyController = seasonalDutyController; _territoryData = territoryData; _clientState = clientState; _framework = framework; @@ -66,7 +69,7 @@ internal sealed class PandorasBoxIpc : IDisposable { Task.Run((Action)DisableConflictingFeatures); } - else if (!_fateController.IsRunning) + else if (!_fateController.IsRunning && !_seasonalDutyController.IsRunning) { Task.Run((Action)RestoreConflictingFeatures); } @@ -74,11 +77,11 @@ internal sealed class PandorasBoxIpc : IDisposable private void OnFrameworkUpdate(IFramework framework) { - bool isRunning = _fateController.IsRunning; - if (isRunning != _wasFateRunning) + bool flag = _fateController.IsRunning || _seasonalDutyController.IsRunning; + if (flag != _wasFateRunning) { - _wasFateRunning = isRunning; - if (isRunning && !_territoryData.IsDutyInstance(_clientState.TerritoryType)) + _wasFateRunning = flag; + if (flag && !_territoryData.IsDutyInstance(_clientState.TerritoryType)) { Task.Run((Action)DisableConflictingFeatures); } diff --git a/Questionable/Questionable.External/TextAdvanceIpc.cs b/Questionable/Questionable.External/TextAdvanceIpc.cs index 70d6a49..948c72c 100644 --- a/Questionable/Questionable.External/TextAdvanceIpc.cs +++ b/Questionable/Questionable.External/TextAdvanceIpc.cs @@ -40,6 +40,8 @@ internal sealed class TextAdvanceIpc : IDisposable private readonly FateController _fateController; + private readonly SeasonalDutyController _seasonalDutyController; + private readonly Configuration _configuration; private readonly ICondition _condition; @@ -54,11 +56,12 @@ internal sealed class TextAdvanceIpc : IDisposable private readonly string _pluginName; - public TextAdvanceIpc(IDalamudPluginInterface pluginInterface, IFramework framework, QuestController questController, FateController fateController, Configuration configuration, ICondition condition) + public TextAdvanceIpc(IDalamudPluginInterface pluginInterface, IFramework framework, QuestController questController, FateController fateController, SeasonalDutyController seasonalDutyController, Configuration configuration, ICondition condition) { _framework = framework; _questController = questController; _fateController = fateController; + _seasonalDutyController = seasonalDutyController; _configuration = configuration; _condition = condition; _isInExternalControl = pluginInterface.GetIpcSubscriber("TextAdvance.IsInExternalControl"); @@ -79,7 +82,7 @@ internal sealed class TextAdvanceIpc : IDisposable private void OnUpdate(IFramework framework) { - bool flag = _questController.IsRunning || _questController.AutomationType != QuestController.EAutomationType.Manual || _fateController.IsRunning; + bool flag = _questController.IsRunning || _questController.AutomationType != QuestController.EAutomationType.Manual || _fateController.IsRunning || _seasonalDutyController.IsRunning; if (!_configuration.General.ConfigureTextAdvance || !flag) { if (_isExternalControlActivated && (_disableExternalControl.InvokeFunc(_pluginName) || !_isInExternalControl.InvokeFunc())) diff --git a/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs b/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs index e0b14c9..9848712 100644 --- a/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs +++ b/Questionable/Questionable.Windows.QuestComponents/ActiveQuestComponent.cs @@ -34,6 +34,8 @@ internal sealed class ActiveQuestComponent private readonly FateController _fateController; + private readonly SeasonalDutyController _seasonalDutyController; + private readonly QuestFunctions _questFunctions; private readonly ICommandManager _commandManager; @@ -65,13 +67,14 @@ internal sealed class ActiveQuestComponent return _003CRegexGenerator_g_003EFBB8301322196CF81C64F1652C2FA6E1D6BF3907141F781E9D97ABED51BF056C4__MultipleWhitespaceRegex_0.Instance; } - public ActiveQuestComponent(QuestController questController, MovementController movementController, CombatController combatController, GatheringController gatheringController, FateController fateController, QuestFunctions questFunctions, ICommandManager commandManager, Configuration configuration, QuestRegistry questRegistry, PriorityWindow priorityWindow, UiUtils uiUtils, IObjectTable objectTable, IClientState clientState, IChatGui chatGui, AutoDutyIpc autoDutyIpc, ILogger logger) + public ActiveQuestComponent(QuestController questController, MovementController movementController, CombatController combatController, GatheringController gatheringController, FateController fateController, SeasonalDutyController seasonalDutyController, QuestFunctions questFunctions, ICommandManager commandManager, Configuration configuration, QuestRegistry questRegistry, PriorityWindow priorityWindow, UiUtils uiUtils, IObjectTable objectTable, IClientState clientState, IChatGui chatGui, AutoDutyIpc autoDutyIpc, ILogger logger) { _questController = questController; _movementController = movementController; _combatController = combatController; _gatheringController = gatheringController; _fateController = fateController; + _seasonalDutyController = seasonalDutyController; _questFunctions = questFunctions; _commandManager = commandManager; _configuration = configuration; @@ -92,6 +95,11 @@ internal sealed class ActiveQuestComponent DrawFateActive(isMinimized); return; } + if (_seasonalDutyController.IsRunning) + { + DrawDutyActive(isMinimized); + return; + } (QuestController.QuestProgress, QuestController.ECurrentQuestType)? currentQuestDetails = _questController.CurrentQuestDetails; QuestController.QuestProgress questProgress = currentQuestDetails?.Item1; QuestController.ECurrentQuestType? currentQuestType = currentQuestDetails?.Item2; @@ -136,12 +144,12 @@ internal sealed class ActiveQuestComponent if (interactionType == EInteractionType.WaitForManualProgress || interactionType == EInteractionType.Snipe || interactionType == EInteractionType.Instruction) { flag = true; - goto IL_0169; + goto IL_017e; } } flag = false; - goto IL_0169; - IL_0169: + goto IL_017e; + IL_017e: if (flag) { color.Push(ImGuiCol.Text, ImGuiColors.DalamudOrange); @@ -183,7 +191,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 || _fateController.IsRunning || !_autoDutyIpc.IsStopped())) + using (ImRaii.Disabled(_questController.IsRunning || _fateController.IsRunning || _seasonalDutyController.IsRunning || !_autoDutyIpc.IsStopped())) { if (ImGuiComponents.IconButton(FontAwesomeIcon.Play)) { @@ -278,6 +286,32 @@ internal sealed class ActiveQuestComponent } } + private void DrawDutyActive(bool isMinimized) + { + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) + { + ImU8String text = new ImU8String(6, 1); + text.AppendLiteral("Duty: "); + text.AppendFormatted(Shorten(_seasonalDutyController.CurrentDuty.Name)); + ImGui.TextUnformatted(text); + } + IList remainingTaskNames = _seasonalDutyController.GetRemainingTaskNames(); + if (remainingTaskNames.Count > 0) + { + ImGui.TextColored(ImGuiColors.DalamudGrey, remainingTaskNames[0]); + } + if (!isMinimized) + { + string text2 = (_seasonalDutyController.CycleLimit.HasValue ? $"Cycle {_seasonalDutyController.CompletedCycles + 1} / {_seasonalDutyController.CycleLimit}" : $"Cycle {_seasonalDutyController.CompletedCycles + 1}"); + ImGui.TextColored(ImGuiColors.DalamudGrey3, text2); + } + if (ImGuiComponents.IconButton(FontAwesomeIcon.Stop)) + { + _seasonalDutyController.Stop("UI stop"); + _movementController.Stop(); + } + } + private void DrawQuestNames(QuestController.QuestProgress currentQuest, QuestController.ECurrentQuestType? currentQuestType) { if (currentQuestType == QuestController.ECurrentQuestType.Simulated) @@ -594,7 +628,7 @@ internal sealed class ActiveQuestComponent private void DrawQuestButtons(QuestController.QuestProgress currentQuest, QuestStep? currentStep, QuestProgressInfo? questProgressInfo, bool isMinimized) { - using (ImRaii.Disabled(_questController.IsRunning || _fateController.IsRunning)) + using (ImRaii.Disabled(_questController.IsRunning || _fateController.IsRunning || _seasonalDutyController.IsRunning)) { if (ImGuiComponents.IconButton(FontAwesomeIcon.Play)) { diff --git a/Questionable/Questionable.Windows.QuestComponents/RemainingTasksComponent.cs b/Questionable/Questionable.Windows.QuestComponents/RemainingTasksComponent.cs index b737d56..f77829d 100644 --- a/Questionable/Questionable.Windows.QuestComponents/RemainingTasksComponent.cs +++ b/Questionable/Questionable.Windows.QuestComponents/RemainingTasksComponent.cs @@ -12,16 +12,19 @@ internal sealed class RemainingTasksComponent private readonly FateController _fateController; - public RemainingTasksComponent(QuestController questController, GatheringController gatheringController, FateController fateController) + private readonly SeasonalDutyController _seasonalDutyController; + + public RemainingTasksComponent(QuestController questController, GatheringController gatheringController, FateController fateController, SeasonalDutyController seasonalDutyController) { _questController = questController; _gatheringController = gatheringController; _fateController = fateController; + _seasonalDutyController = seasonalDutyController; } public void Draw() { - IList remainingTaskNames = _fateController.GetRemainingTaskNames(); + IList remainingTaskNames = _seasonalDutyController.GetRemainingTaskNames(); if (remainingTaskNames.Count > 0) { ImGui.Separator(); @@ -29,14 +32,14 @@ internal sealed class RemainingTasksComponent foreach (string item in remainingTaskNames) { ImU8String text = new ImU8String(3, 1); - text.AppendLiteral("F: "); + text.AppendLiteral("D: "); text.AppendFormatted(item); ImGui.TextUnformatted(text); } ImGui.EndDisabled(); return; } - IList remainingTaskNames2 = _gatheringController.GetRemainingTaskNames(); + IList remainingTaskNames2 = _fateController.GetRemainingTaskNames(); if (remainingTaskNames2.Count > 0) { ImGui.Separator(); @@ -44,23 +47,38 @@ internal sealed class RemainingTasksComponent foreach (string item2 in remainingTaskNames2) { ImU8String text2 = new ImU8String(3, 1); - text2.AppendLiteral("G: "); + text2.AppendLiteral("F: "); text2.AppendFormatted(item2); ImGui.TextUnformatted(text2); } ImGui.EndDisabled(); return; } - IList remainingTaskNames3 = _questController.GetRemainingTaskNames(); - if (remainingTaskNames3.Count <= 0) + IList remainingTaskNames3 = _gatheringController.GetRemainingTaskNames(); + if (remainingTaskNames3.Count > 0) + { + ImGui.Separator(); + ImGui.BeginDisabled(); + foreach (string item3 in remainingTaskNames3) + { + ImU8String text3 = new ImU8String(3, 1); + text3.AppendLiteral("G: "); + text3.AppendFormatted(item3); + ImGui.TextUnformatted(text3); + } + ImGui.EndDisabled(); + return; + } + IList remainingTaskNames4 = _questController.GetRemainingTaskNames(); + if (remainingTaskNames4.Count <= 0) { return; } ImGui.Separator(); ImGui.BeginDisabled(); - foreach (string item3 in remainingTaskNames3) + foreach (string item4 in remainingTaskNames4) { - ImGui.TextUnformatted(item3); + ImGui.TextUnformatted(item4); } ImGui.EndDisabled(); }