From 317800fb39a297ab83aad2ca600e8f5bdc05d3f9 Mon Sep 17 00:00:00 2001 From: alydev Date: Tue, 25 Nov 2025 11:31:56 +1000 Subject: [PATCH] muffin v7.38.6 --- .../AssemblyQuestLoader.cs | 7 +- .../Questionable.Data/ChangelogData.cs | 1115 +++++++++-------- .../Questionable.External/QuestionableIpc.cs | 92 +- .../AlliedSocietyJournalComponent.cs | 289 ++++- 4 files changed, 894 insertions(+), 609 deletions(-) diff --git a/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs b/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs index 0c7c286..bae8bf3 100644 --- a/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs +++ b/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs @@ -307342,12 +307342,7 @@ public static class AssemblyQuestLoader ref QuestStep reference22 = ref span3[num2]; QuestStep obj21 = new QuestStep(EInteractionType.AcceptQuest, 1000168u, new Vector3(-75.48645f, -0.5013741f, -5.081299f), 132) { - AetheryteShortcut = EAetheryteLocation.Gridania, - AethernetShortcut = new AethernetShortcut - { - From = EAetheryteLocation.Gridania, - To = EAetheryteLocation.GridaniaLancer - } + AetheryteShortcut = EAetheryteLocation.Gridania }; SkipConditions skipConditions = new SkipConditions(); SkipAetheryteCondition skipAetheryteCondition = new SkipAetheryteCondition(); diff --git a/Questionable/Questionable.Data/ChangelogData.cs b/Questionable/Questionable.Data/ChangelogData.cs index 9299866..113aacf 100644 --- a/Questionable/Questionable.Data/ChangelogData.cs +++ b/Questionable/Questionable.Data/ChangelogData.cs @@ -11,762 +11,799 @@ internal static class ChangelogData static ChangelogData() { - int num = 40; + int num = 41; List list = new List(num); CollectionsMarshal.SetCount(list, num); Span span = CollectionsMarshal.AsSpan(list); int num2 = 0; ref ChangelogEntry reference = ref span[num2]; - DateOnly releaseDate = new DateOnly(2025, 11, 24); - int num3 = 2; + DateOnly releaseDate = new DateOnly(2025, 11, 25); + int num3 = 3; List list2 = new List(num3); CollectionsMarshal.SetCount(list2, num3); Span span2 = CollectionsMarshal.AsSpan(list2); int num4 = 0; ref ChangeEntry reference2 = ref span2[num4]; - int num5 = 1; + int num5 = 2; List list3 = new List(num5); CollectionsMarshal.SetCount(list3, num5); Span span3 = CollectionsMarshal.AsSpan(list3); - int index = 0; - span3[index] = "Added Allied Society daily allowance tracker with bulk quest adding buttons"; - reference2 = new ChangeEntry(EChangeCategory.Added, "Major features", list3); + int num6 = 0; + span3[num6] = "Updated Allied Society journal text"; + num6++; + span3[num6] = "Improved Allied Society rank handling"; + reference2 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list3); num4++; ref ChangeEntry reference3 = ref span2[num4]; - index = 1; - List list4 = new List(index); - CollectionsMarshal.SetCount(list4, index); + num6 = 1; + List list4 = new List(num6); + CollectionsMarshal.SetCount(list4, num6); span3 = CollectionsMarshal.AsSpan(list4); num5 = 0; - span3[num5] = "Added IPC for Allied Society: GetRemainingAllowances, GetTimeUntilReset, GetAvailableQuestIds, GetAllAvailableQuestCounts, IsMaxRank, GetCurrentRank, GetSocietiesWithAvailableQuests"; + span3[num5] = "Added IPC for Allied Society: AddAlliedSocietyOptimalQuests, GetAlliedSocietyOptimalQuests"; reference3 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list4); - reference = new ChangelogEntry("7.38.5", releaseDate, list2); - num2++; - ref ChangelogEntry reference4 = ref span[num2]; - DateOnly releaseDate2 = new DateOnly(2025, 11, 23); - num4 = 2; - List list5 = new List(num4); - CollectionsMarshal.SetCount(list5, num4); - span2 = CollectionsMarshal.AsSpan(list5); - num3 = 0; - ref ChangeEntry reference5 = ref span2[num3]; + num4++; + ref ChangeEntry reference4 = ref span2[num4]; num5 = 1; - List list6 = new List(num5); - CollectionsMarshal.SetCount(list6, num5); - span3 = CollectionsMarshal.AsSpan(list6); - index = 0; - span3[index] = "Explicitly declare support for BMR singleplayer duty (The Rematch)"; - reference5 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list6); - num3++; + List list5 = new List(num5); + CollectionsMarshal.SetCount(list5, num5); + span3 = CollectionsMarshal.AsSpan(list5); + num6 = 0; + span3[num6] = "Fixed quest (We Come in Peace)"; + reference4 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list5); + reference = new ChangelogEntry("7.38.6", releaseDate, list2); + num2++; + ref ChangelogEntry reference5 = ref span[num2]; + DateOnly releaseDate2 = new DateOnly(2025, 11, 24); + num4 = 2; + List list6 = new List(num4); + CollectionsMarshal.SetCount(list6, num4); + span2 = CollectionsMarshal.AsSpan(list6); + num3 = 0; ref ChangeEntry reference6 = ref span2[num3]; - index = 8; - List list7 = new List(index); - CollectionsMarshal.SetCount(list7, index); + num6 = 1; + List list7 = new List(num6); + CollectionsMarshal.SetCount(list7, num6); span3 = CollectionsMarshal.AsSpan(list7); num5 = 0; - span3[num5] = "Fixed quest (Microbrewing) to not get stuck near ramp"; - num5++; - span3[num5] = "Fixed quest (The Illuminated Land) where pathing would kill the player due to fall damage"; - num5++; - span3[num5] = "Fixed quest (It's Probably Not Pirates) improper pathing and removed unneeded step"; - num5++; - span3[num5] = "Fixed quest (The Black Wolf's Ultimatum) not exiting landing area"; - num5++; - span3[num5] = "Fixed quest (Magiteknical Failure) from not interacting with NPC due to being mounted"; - num5++; - span3[num5] = "Fixed quest (We Come in Peace) shortcut navigation"; - num5++; - span3[num5] = "Fixed quest (Poisoned Hearts) where incorrect pathing caused the player to die"; - num5++; - span3[num5] = "Fixed quests (Savage Snares) and (An Apple a Day) not detecting kills"; - reference6 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list7); - reference4 = new ChangelogEntry("7.38.4", releaseDate2, list5); + span3[num5] = "Added Allied Society daily allowance tracker with bulk quest adding buttons"; + reference6 = new ChangeEntry(EChangeCategory.Added, "Major features", list7); + num3++; + ref ChangeEntry reference7 = ref span2[num3]; + num5 = 1; + List list8 = new List(num5); + CollectionsMarshal.SetCount(list8, num5); + span3 = CollectionsMarshal.AsSpan(list8); + num6 = 0; + span3[num6] = "Added IPC for Allied Society: GetRemainingAllowances, GetTimeUntilReset, GetAvailableQuestIds, GetAllAvailableQuestCounts, IsMaxRank, GetCurrentRank, GetSocietiesWithAvailableQuests"; + reference7 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list8); + reference5 = new ChangelogEntry("7.38.5", releaseDate2, list6); num2++; - ref ChangelogEntry reference7 = ref span[num2]; + ref ChangelogEntry reference8 = ref span[num2]; DateOnly releaseDate3 = new DateOnly(2025, 11, 23); - num3 = 3; - List list8 = new List(num3); - CollectionsMarshal.SetCount(list8, num3); - span2 = CollectionsMarshal.AsSpan(list8); + num3 = 2; + List list9 = new List(num3); + CollectionsMarshal.SetCount(list9, num3); + span2 = CollectionsMarshal.AsSpan(list9); num4 = 0; - ref ChangeEntry reference8 = ref span2[num4]; - num5 = 2; - List list9 = new List(num5); - CollectionsMarshal.SetCount(list9, num5); - span3 = CollectionsMarshal.AsSpan(list9); - index = 0; - span3[index] = "Added RequireHq to crafting InteractionType"; - index++; - span3[index] = "Mark GC quests as Locked if rank not achieved"; - reference8 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list9); - num4++; ref ChangeEntry reference9 = ref span2[num4]; - index = 2; - List list10 = new List(index); - CollectionsMarshal.SetCount(list10, index); + num6 = 1; + List list10 = new List(num6); + CollectionsMarshal.SetCount(list10, num6); span3 = CollectionsMarshal.AsSpan(list10); num5 = 0; - span3[num5] = "Added IPC for stop conditions: GetStopConditionsEnabled, SetStopConditionsEnabled, GetStopQuestList, AddStopQuest, RemoveStopQuest, ClearStopQuests, GetLevelStopCondition, SetLevelStopCondition, GetSequenceStopCondition, SetSequenceStopCondition"; - num5++; - span3[num5] = "Added IPC for priority quests: GetPriorityQuests, RemovePriorityQuest, ReorderPriorityQuest, GetAvailablePresets, GetPresetQuests, AddPresetToPriority, IsPresetAvailable, IsQuestInPriority, GetQuestPriorityIndex, HasAvailablePriorityQuests"; - reference9 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list10); + span3[num5] = "Explicitly declare support for BMR singleplayer duty (The Rematch)"; + reference9 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list10); num4++; ref ChangeEntry reference10 = ref span2[num4]; - num5 = 3; + num5 = 8; List list11 = new List(num5); CollectionsMarshal.SetCount(list11, num5); span3 = CollectionsMarshal.AsSpan(list11); - index = 0; - span3[index] = "Fixed line breaks not working in dialog strings"; - index++; - span3[index] = "Fixed quest (Labor of Love)"; - index++; - span3[index] = "Fixed quest (Sea of Sorrow)"; + num6 = 0; + span3[num6] = "Fixed quest (Microbrewing) to not get stuck near ramp"; + num6++; + span3[num6] = "Fixed quest (The Illuminated Land) where pathing would kill the player due to fall damage"; + num6++; + span3[num6] = "Fixed quest (It's Probably Not Pirates) improper pathing and removed unneeded step"; + num6++; + span3[num6] = "Fixed quest (The Black Wolf's Ultimatum) not exiting landing area"; + num6++; + span3[num6] = "Fixed quest (Magiteknical Failure) from not interacting with NPC due to being mounted"; + num6++; + span3[num6] = "Fixed quest (We Come in Peace) shortcut navigation"; + num6++; + span3[num6] = "Fixed quest (Poisoned Hearts) where incorrect pathing caused the player to die"; + num6++; + span3[num6] = "Fixed quests (Savage Snares) and (An Apple a Day) not detecting kills"; reference10 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list11); - reference7 = new ChangelogEntry("7.38.3", releaseDate3, list8); + reference8 = new ChangelogEntry("7.38.4", releaseDate3, list9); num2++; ref ChangelogEntry reference11 = ref span[num2]; - DateOnly releaseDate4 = new DateOnly(2025, 11, 18); + DateOnly releaseDate4 = new DateOnly(2025, 11, 23); num4 = 3; List list12 = new List(num4); CollectionsMarshal.SetCount(list12, num4); span2 = CollectionsMarshal.AsSpan(list12); num3 = 0; ref ChangeEntry reference12 = ref span2[num3]; - index = 2; - List list13 = new List(index); - CollectionsMarshal.SetCount(list13, index); + num6 = 2; + List list13 = new List(num6); + CollectionsMarshal.SetCount(list13, num6); span3 = CollectionsMarshal.AsSpan(list13); num5 = 0; - span3[num5] = "Auto Duty unsync options for each duty (Duty Support, Unsync Solo, Unsync Party)"; + span3[num5] = "Added RequireHq to crafting InteractionType"; num5++; - span3[num5] = "Added Auto Duty unsync options to quest schema and updated quests using old unsync method"; - reference12 = new ChangeEntry(EChangeCategory.Added, "Major features", list13); + span3[num5] = "Mark GC quests as Locked if rank not achieved"; + reference12 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list13); num3++; ref ChangeEntry reference13 = ref span2[num3]; - num5 = 3; + num5 = 2; List list14 = new List(num5); CollectionsMarshal.SetCount(list14, num5); span3 = CollectionsMarshal.AsSpan(list14); - index = 0; - span3[index] = "Added IPC for duty sync handling: GetDefaultDutyMode, SetDefaultDutyMode"; - index++; - span3[index] = "Added IPC for duty mode overrides: GetDutyModeOverride, SetDutyModeOverride"; - index++; - span3[index] = "Added IPC for clearing overrides: ClearDutyModeOverride, ClearAllDutyModeOverrides"; + num6 = 0; + span3[num6] = "Added IPC for stop conditions: GetStopConditionsEnabled, SetStopConditionsEnabled, GetStopQuestList, AddStopQuest, RemoveStopQuest, ClearStopQuests, GetLevelStopCondition, SetLevelStopCondition, GetSequenceStopCondition, SetSequenceStopCondition"; + num6++; + span3[num6] = "Added IPC for priority quests: GetPriorityQuests, RemovePriorityQuest, ReorderPriorityQuest, GetAvailablePresets, GetPresetQuests, AddPresetToPriority, IsPresetAvailable, IsQuestInPriority, GetQuestPriorityIndex, HasAvailablePriorityQuests"; reference13 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list14); num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest (Constant Cravings)"); - reference11 = new ChangelogEntry("7.38.2", releaseDate4, list12); + ref ChangeEntry reference14 = ref span2[num3]; + num6 = 3; + List list15 = new List(num6); + CollectionsMarshal.SetCount(list15, num6); + span3 = CollectionsMarshal.AsSpan(list15); + num5 = 0; + span3[num5] = "Fixed line breaks not working in dialog strings"; + num5++; + span3[num5] = "Fixed quest (Labor of Love)"; + num5++; + span3[num5] = "Fixed quest (Sea of Sorrow)"; + reference14 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list15); + reference11 = new ChangelogEntry("7.38.3", releaseDate4, list12); num2++; - ref ChangelogEntry reference14 = ref span[num2]; + ref ChangelogEntry reference15 = ref span[num2]; DateOnly releaseDate5 = new DateOnly(2025, 11, 18); num3 = 3; - List list15 = new List(num3); - CollectionsMarshal.SetCount(list15, num3); - span2 = CollectionsMarshal.AsSpan(list15); + List list16 = new List(num3); + CollectionsMarshal.SetCount(list16, num3); + span2 = CollectionsMarshal.AsSpan(list16); num4 = 0; - ref ChangeEntry reference15 = ref span2[num4]; - index = 1; - List list16 = new List(index); - CollectionsMarshal.SetCount(list16, index); - span3 = CollectionsMarshal.AsSpan(list16); - num5 = 0; - span3[num5] = "Added new fields to quest schema"; - reference15 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list16); - num4++; ref ChangeEntry reference16 = ref span2[num4]; - num5 = 3; + num5 = 2; List list17 = new List(num5); CollectionsMarshal.SetCount(list17, num5); span3 = CollectionsMarshal.AsSpan(list17); - index = 0; - span3[index] = "A Faerie Tale Come True"; - index++; - span3[index] = "Constant Cravings"; - index++; - span3[index] = "A Bridge Too Full"; - reference16 = new ChangeEntry(EChangeCategory.QuestUpdates, "Added new quest paths", list17); + num6 = 0; + span3[num6] = "Auto Duty unsync options for each duty (Duty Support, Unsync Solo, Unsync Party)"; + num6++; + span3[num6] = "Added Auto Duty unsync options to quest schema and updated quests using old unsync method"; + reference16 = new ChangeEntry(EChangeCategory.Added, "Major features", list17); num4++; ref ChangeEntry reference17 = ref span2[num4]; - index = 3; - List list18 = new List(index); - CollectionsMarshal.SetCount(list18, index); + num6 = 3; + List list18 = new List(num6); + CollectionsMarshal.SetCount(list18, num6); span3 = CollectionsMarshal.AsSpan(list18); num5 = 0; - span3[num5] = "Fixed various quest schemas"; + span3[num5] = "Added IPC for duty sync handling: GetDefaultDutyMode, SetDefaultDutyMode"; num5++; - span3[num5] = "Fixed changelog bullet point encoding"; + span3[num5] = "Added IPC for duty mode overrides: GetDutyModeOverride, SetDutyModeOverride"; num5++; - span3[num5] = "Fixed item use to wait until item is used before next action"; - reference17 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list18); - reference14 = new ChangelogEntry("7.38.1", releaseDate5, list15); + span3[num5] = "Added IPC for clearing overrides: ClearDutyModeOverride, ClearAllDutyModeOverrides"; + reference17 = new ChangeEntry(EChangeCategory.Added, "IPC changes", list18); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest (Constant Cravings)"); + reference15 = new ChangelogEntry("7.38.2", releaseDate5, list16); num2++; ref ChangelogEntry reference18 = ref span[num2]; - DateOnly releaseDate6 = new DateOnly(2025, 11, 17); - num4 = 5; + DateOnly releaseDate6 = new DateOnly(2025, 11, 18); + num4 = 3; List list19 = new List(num4); CollectionsMarshal.SetCount(list19, num4); span2 = CollectionsMarshal.AsSpan(list19); num3 = 0; ref ChangeEntry reference19 = ref span2[num3]; - num5 = 2; + num5 = 1; List list20 = new List(num5); CollectionsMarshal.SetCount(list20, num5); span3 = CollectionsMarshal.AsSpan(list20); - index = 0; - span3[index] = "Quest sequence window to show expected sequences in each quest (with quest searching)"; - index++; - span3[index] = "Changelog"; - reference19 = new ChangeEntry(EChangeCategory.Added, "Major features", list20); + num6 = 0; + span3[num6] = "Added new fields to quest schema"; + reference19 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list20); num3++; ref ChangeEntry reference20 = ref span2[num3]; - index = 2; - List list21 = new List(index); - CollectionsMarshal.SetCount(list21, index); + num6 = 3; + List list21 = new List(num6); + CollectionsMarshal.SetCount(list21, num6); span3 = CollectionsMarshal.AsSpan(list21); num5 = 0; - span3[num5] = "Updated quest schemas"; + span3[num5] = "A Faerie Tale Come True"; num5++; - span3[num5] = "Added search bar to preferred mounts and capitalization to mirror game mount names"; - reference20 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list21); + span3[num5] = "Constant Cravings"; + num5++; + span3[num5] = "A Bridge Too Full"; + reference20 = new ChangeEntry(EChangeCategory.QuestUpdates, "Added new quest paths", list21); num3++; ref ChangeEntry reference21 = ref span2[num3]; num5 = 3; List list22 = new List(num5); CollectionsMarshal.SetCount(list22, num5); span3 = CollectionsMarshal.AsSpan(list22); - index = 0; - span3[index] = "Renamed IsQuestCompleted → IsQuestComplete"; - index++; - span3[index] = "Renamed IsQuestAvailable → IsReadyToAcceptQuest"; - index++; - span3[index] = "Added GetCurrentTask IPC"; - reference21 = new ChangeEntry(EChangeCategory.Changed, "IPC changes", list22); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added all Hildibrand quests"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed credits/cutscenes playback"); - reference18 = new ChangelogEntry("7.38.0", releaseDate6, list19); + num6 = 0; + span3[num6] = "Fixed various quest schemas"; + num6++; + span3[num6] = "Fixed changelog bullet point encoding"; + num6++; + span3[num6] = "Fixed item use to wait until item is used before next action"; + reference21 = new ChangeEntry(EChangeCategory.Fixed, "Bug fixes", list22); + reference18 = new ChangelogEntry("7.38.1", releaseDate6, list19); num2++; ref ChangelogEntry reference22 = ref span[num2]; - DateOnly releaseDate7 = new DateOnly(2025, 11, 8); - num3 = 1; + DateOnly releaseDate7 = new DateOnly(2025, 11, 17); + num3 = 5; List list23 = new List(num3); CollectionsMarshal.SetCount(list23, num3); span2 = CollectionsMarshal.AsSpan(list23); num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Fall Guys quest (Just Crowning Around)"); - reference22 = new ChangelogEntry("6.38", releaseDate7, list23); - num2++; - ref ChangelogEntry reference23 = ref span[num2]; - DateOnly releaseDate8 = new DateOnly(2025, 11, 8); - num4 = 1; - List list24 = new List(num4); - CollectionsMarshal.SetCount(list24, num4); - span2 = CollectionsMarshal.AsSpan(list24); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Cosmic Exploration and various unlock quests"); - reference23 = new ChangelogEntry("6.37", releaseDate8, list24); - num2++; - ref ChangelogEntry reference24 = ref span[num2]; - DateOnly releaseDate9 = new DateOnly(2025, 11, 2); - num3 = 1; - List list25 = new List(num3); - CollectionsMarshal.SetCount(list25, num3); - span2 = CollectionsMarshal.AsSpan(list25); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 6 quest (With High Spirits)"); - reference24 = new ChangelogEntry("6.36", releaseDate9, list25); - num2++; - ref ChangelogEntry reference25 = ref span[num2]; - DateOnly releaseDate10 = new DateOnly(2025, 10, 28); - num4 = 1; - List list26 = new List(num4); - CollectionsMarshal.SetCount(list26, num4); - span2 = CollectionsMarshal.AsSpan(list26); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed level 3 MSQ handling if character started on non-XP buff world"); - reference25 = new ChangelogEntry("6.35", releaseDate10, list26); + ref ChangeEntry reference23 = ref span2[num4]; + num6 = 2; + List list24 = new List(num6); + CollectionsMarshal.SetCount(list24, num6); + span3 = CollectionsMarshal.AsSpan(list24); + num5 = 0; + span3[num5] = "Quest sequence window to show expected sequences in each quest (with quest searching)"; + num5++; + span3[num5] = "Changelog"; + reference23 = new ChangeEntry(EChangeCategory.Added, "Major features", list24); + num4++; + ref ChangeEntry reference24 = ref span2[num4]; + num5 = 2; + List list25 = new List(num5); + CollectionsMarshal.SetCount(list25, num5); + span3 = CollectionsMarshal.AsSpan(list25); + num6 = 0; + span3[num6] = "Updated quest schemas"; + num6++; + span3[num6] = "Added search bar to preferred mounts and capitalization to mirror game mount names"; + reference24 = new ChangeEntry(EChangeCategory.Changed, "Improvements", list25); + num4++; + ref ChangeEntry reference25 = ref span2[num4]; + num6 = 3; + List list26 = new List(num6); + CollectionsMarshal.SetCount(list26, num6); + span3 = CollectionsMarshal.AsSpan(list26); + num5 = 0; + span3[num5] = "Renamed IsQuestCompleted → IsQuestComplete"; + num5++; + span3[num5] = "Renamed IsQuestAvailable → IsReadyToAcceptQuest"; + num5++; + span3[num5] = "Added GetCurrentTask IPC"; + reference25 = new ChangeEntry(EChangeCategory.Changed, "IPC changes", list26); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added all Hildibrand quests"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed credits/cutscenes playback"); + reference22 = new ChangelogEntry("7.38.0", releaseDate7, list23); num2++; ref ChangelogEntry reference26 = ref span[num2]; - DateOnly releaseDate11 = new DateOnly(2025, 10, 23); - num3 = 2; - List list27 = new List(num3); - CollectionsMarshal.SetCount(list27, num3); + DateOnly releaseDate8 = new DateOnly(2025, 11, 8); + num4 = 1; + List list27 = new List(num4); + CollectionsMarshal.SetCount(list27, num4); span2 = CollectionsMarshal.AsSpan(list27); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Added, "Added clear priority quests on logout and on completion config settings"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed priority quest importing to respect import order"); - reference26 = new ChangelogEntry("6.34", releaseDate11, list27); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Fall Guys quest (Just Crowning Around)"); + reference26 = new ChangelogEntry("6.38", releaseDate8, list27); num2++; ref ChangelogEntry reference27 = ref span[num2]; - DateOnly releaseDate12 = new DateOnly(2025, 10, 23); - num4 = 1; - List list28 = new List(num4); - CollectionsMarshal.SetCount(list28, num4); + DateOnly releaseDate9 = new DateOnly(2025, 11, 8); + num3 = 1; + List list28 = new List(num3); + CollectionsMarshal.SetCount(list28, num3); span2 = CollectionsMarshal.AsSpan(list28); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed RSR combat module"); - reference27 = new ChangelogEntry("6.33", releaseDate12, list28); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Cosmic Exploration and various unlock quests"); + reference27 = new ChangelogEntry("6.37", releaseDate9, list28); num2++; ref ChangelogEntry reference28 = ref span[num2]; - DateOnly releaseDate13 = new DateOnly(2025, 10, 23); - num3 = 1; - List list29 = new List(num3); - CollectionsMarshal.SetCount(list29, num3); + DateOnly releaseDate10 = new DateOnly(2025, 11, 2); + num4 = 1; + List list29 = new List(num4); + CollectionsMarshal.SetCount(list29, num4); span2 = CollectionsMarshal.AsSpan(list29); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 5 quest (Forged in Corn)"); - reference28 = new ChangelogEntry("6.32", releaseDate13, list29); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 6 quest (With High Spirits)"); + reference28 = new ChangelogEntry("6.36", releaseDate10, list29); num2++; ref ChangelogEntry reference29 = ref span[num2]; - DateOnly releaseDate14 = new DateOnly(2025, 10, 21); - num4 = 1; - List list30 = new List(num4); - CollectionsMarshal.SetCount(list30, num4); + DateOnly releaseDate11 = new DateOnly(2025, 10, 28); + num3 = 1; + List list30 = new List(num3); + CollectionsMarshal.SetCount(list30, num3); span2 = CollectionsMarshal.AsSpan(list30); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Added checks for moogle and allied society quests when using add all available quests"); - reference29 = new ChangelogEntry("6.31", releaseDate14, list30); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed level 3 MSQ handling if character started on non-XP buff world"); + reference29 = new ChangelogEntry("6.35", releaseDate11, list30); num2++; ref ChangelogEntry reference30 = ref span[num2]; - DateOnly releaseDate15 = new DateOnly(2025, 10, 21); - num3 = 1; - List list31 = new List(num3); - CollectionsMarshal.SetCount(list31, num3); + DateOnly releaseDate12 = new DateOnly(2025, 10, 23); + num4 = 2; + List list31 = new List(num4); + CollectionsMarshal.SetCount(list31, num4); span2 = CollectionsMarshal.AsSpan(list31); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Added, "Added button to journal that allows adding all available quests to priority"); - reference30 = new ChangelogEntry("6.30", releaseDate15, list31); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.Added, "Added clear priority quests on logout and on completion config settings"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed priority quest importing to respect import order"); + reference30 = new ChangelogEntry("6.34", releaseDate12, list31); num2++; ref ChangelogEntry reference31 = ref span[num2]; - DateOnly releaseDate16 = new DateOnly(2025, 10, 20); - num4 = 2; - List list32 = new List(num4); - CollectionsMarshal.SetCount(list32, num4); + DateOnly releaseDate13 = new DateOnly(2025, 10, 23); + num3 = 1; + List list32 = new List(num3); + CollectionsMarshal.SetCount(list32, num3); span2 = CollectionsMarshal.AsSpan(list32); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed RSR combat module"); + reference31 = new ChangelogEntry("6.33", releaseDate13, list32); + num2++; + ref ChangelogEntry reference32 = ref span[num2]; + DateOnly releaseDate14 = new DateOnly(2025, 10, 23); + num4 = 1; + List list33 = new List(num4); + CollectionsMarshal.SetCount(list33, num4); + span2 = CollectionsMarshal.AsSpan(list33); num3 = 0; - ref ChangeEntry reference32 = ref span2[num3]; - index = 2; - List list33 = new List(index); - CollectionsMarshal.SetCount(list33, index); - span3 = CollectionsMarshal.AsSpan(list33); - num5 = 0; - span3[num5] = "Added item count to combat handling rework"; - num5++; - span3[num5] = "Updated Pandora conflicting features"; - reference32 = new ChangeEntry(EChangeCategory.Changed, "Combat handling improvements", list33); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest to purchase Gysahl Greens if not in inventory"); - reference31 = new ChangelogEntry("6.29", releaseDate16, list32); + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy Rank 5 quest (Forged in Corn)"); + reference32 = new ChangelogEntry("6.32", releaseDate14, list33); num2++; ref ChangelogEntry reference33 = ref span[num2]; - DateOnly releaseDate17 = new DateOnly(2025, 10, 19); + DateOnly releaseDate15 = new DateOnly(2025, 10, 21); num3 = 1; List list34 = new List(num3); CollectionsMarshal.SetCount(list34, num3); span2 = CollectionsMarshal.AsSpan(list34); num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Reworked kill count combat handling - combat and enemy kills are now processed instantly"); - reference33 = new ChangelogEntry("6.28", releaseDate17, list34); + span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Added checks for moogle and allied society quests when using add all available quests"); + reference33 = new ChangelogEntry("6.31", releaseDate15, list34); num2++; ref ChangelogEntry reference34 = ref span[num2]; - DateOnly releaseDate18 = new DateOnly(2025, 10, 18); - num4 = 2; + DateOnly releaseDate16 = new DateOnly(2025, 10, 21); + num4 = 1; List list35 = new List(num4); CollectionsMarshal.SetCount(list35, num4); span2 = CollectionsMarshal.AsSpan(list35); num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Improved Aether Current checking logic"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Chocobo Taxi Stand CheckSkip error and Patch 7.3 Fantasia unlock quest date/time"); - reference34 = new ChangelogEntry("6.27", releaseDate18, list35); + span2[num3] = new ChangeEntry(EChangeCategory.Added, "Added button to journal that allows adding all available quests to priority"); + reference34 = new ChangelogEntry("6.30", releaseDate16, list35); num2++; ref ChangelogEntry reference35 = ref span[num2]; - DateOnly releaseDate19 = new DateOnly(2025, 10, 18); - num3 = 1; + DateOnly releaseDate17 = new DateOnly(2025, 10, 20); + num3 = 2; List list36 = new List(num3); CollectionsMarshal.SetCount(list36, num3); span2 = CollectionsMarshal.AsSpan(list36); num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests"); - reference35 = new ChangelogEntry("6.26", releaseDate19, list36); - num2++; - ref ChangelogEntry reference36 = ref span[num2]; - DateOnly releaseDate20 = new DateOnly(2025, 10, 17); - num4 = 1; - List list37 = new List(num4); - CollectionsMarshal.SetCount(list37, num4); - span2 = CollectionsMarshal.AsSpan(list37); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added All Saints' Wake 2025 quests and 7.35 Yok Huy rank 4 quests"); - reference36 = new ChangelogEntry("6.25", releaseDate20, list37); + ref ChangeEntry reference36 = ref span2[num4]; + num5 = 2; + List list37 = new List(num5); + CollectionsMarshal.SetCount(list37, num5); + span3 = CollectionsMarshal.AsSpan(list37); + num6 = 0; + span3[num6] = "Added item count to combat handling rework"; + num6++; + span3[num6] = "Updated Pandora conflicting features"; + reference36 = new ChangeEntry(EChangeCategory.Changed, "Combat handling improvements", list37); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest to purchase Gysahl Greens if not in inventory"); + reference35 = new ChangelogEntry("6.29", releaseDate17, list36); num2++; ref ChangelogEntry reference37 = ref span[num2]; - DateOnly releaseDate21 = new DateOnly(2025, 10, 16); - num3 = 1; - List list38 = new List(num3); - CollectionsMarshal.SetCount(list38, num3); + DateOnly releaseDate18 = new DateOnly(2025, 10, 19); + num4 = 1; + List list38 = new List(num4); + CollectionsMarshal.SetCount(list38, num4); span2 = CollectionsMarshal.AsSpan(list38); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests and Deep Dungeon quest"); - reference37 = new ChangelogEntry("6.24", releaseDate21, list38); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Reworked kill count combat handling - combat and enemy kills are now processed instantly"); + reference37 = new ChangelogEntry("6.28", releaseDate18, list38); num2++; ref ChangelogEntry reference38 = ref span[num2]; - DateOnly releaseDate22 = new DateOnly(2025, 10, 13); - num4 = 1; - List list39 = new List(num4); - CollectionsMarshal.SetCount(list39, num4); + DateOnly releaseDate19 = new DateOnly(2025, 10, 18); + num3 = 2; + List list39 = new List(num3); + CollectionsMarshal.SetCount(list39, num3); span2 = CollectionsMarshal.AsSpan(list39); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quest (Larder Logistics)"); - reference38 = new ChangelogEntry("6.23", releaseDate22, list39); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Improved Aether Current checking logic"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Chocobo Taxi Stand CheckSkip error and Patch 7.3 Fantasia unlock quest date/time"); + reference38 = new ChangelogEntry("6.27", releaseDate19, list39); num2++; ref ChangelogEntry reference39 = ref span[num2]; - DateOnly releaseDate23 = new DateOnly(2025, 10, 12); - num3 = 3; - List list40 = new List(num3); - CollectionsMarshal.SetCount(list40, num3); + DateOnly releaseDate20 = new DateOnly(2025, 10, 18); + num4 = 1; + List list40 = new List(num4); + CollectionsMarshal.SetCount(list40, num4); span2 = CollectionsMarshal.AsSpan(list40); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Prevent disabled or Locked quests from being started as 'Start as next quest'"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Yok Huy quest and journal quest chain priority issues"); - reference39 = new ChangelogEntry("6.22", releaseDate23, list40); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests"); + reference39 = new ChangelogEntry("6.26", releaseDate20, list40); num2++; ref ChangelogEntry reference40 = ref span[num2]; - DateOnly releaseDate24 = new DateOnly(2025, 10, 12); - num4 = 2; - List list41 = new List(num4); - CollectionsMarshal.SetCount(list41, num4); + DateOnly releaseDate21 = new DateOnly(2025, 10, 17); + num3 = 1; + List list41 = new List(num3); + CollectionsMarshal.SetCount(list41, num3); span2 = CollectionsMarshal.AsSpan(list41); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Added, "Added expansion abbreviation to journal window"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); - reference40 = new ChangelogEntry("6.21", releaseDate24, list41); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added All Saints' Wake 2025 quests and 7.35 Yok Huy rank 4 quests"); + reference40 = new ChangelogEntry("6.25", releaseDate21, list41); num2++; ref ChangelogEntry reference41 = ref span[num2]; - DateOnly releaseDate25 = new DateOnly(2025, 10, 10); - num3 = 2; - List list42 = new List(num3); - CollectionsMarshal.SetCount(list42, num3); + DateOnly releaseDate22 = new DateOnly(2025, 10, 16); + num4 = 1; + List list42 = new List(num4); + CollectionsMarshal.SetCount(list42, num4); span2 = CollectionsMarshal.AsSpan(list42); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Allow completed repeatable quests to be used with 'Add quest and requirements to priority' feature"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 quest (A Work of Cart)"); - reference41 = new ChangelogEntry("6.20", releaseDate25, list42); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 4 quests and Deep Dungeon quest"); + reference41 = new ChangelogEntry("6.24", releaseDate22, list42); num2++; ref ChangelogEntry reference42 = ref span[num2]; - DateOnly releaseDate26 = new DateOnly(2025, 10, 9); - num4 = 3; - List list43 = new List(num4); - CollectionsMarshal.SetCount(list43, num4); + DateOnly releaseDate23 = new DateOnly(2025, 10, 13); + num3 = 1; + List list43 = new List(num3); + CollectionsMarshal.SetCount(list43, num3); span2 = CollectionsMarshal.AsSpan(list43); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Added, "Added config to batch Allied Society quest turn-ins"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Repeatable quests now show correct availability state in journal"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 2 quests"); - reference42 = new ChangelogEntry("6.19", releaseDate26, list43); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quest (Larder Logistics)"); + reference42 = new ChangelogEntry("6.23", releaseDate23, list43); num2++; ref ChangelogEntry reference43 = ref span[num2]; - DateOnly releaseDate27 = new DateOnly(2025, 10, 9); - num3 = 2; - List list44 = new List(num3); - CollectionsMarshal.SetCount(list44, num3); + DateOnly releaseDate24 = new DateOnly(2025, 10, 12); + num4 = 3; + List list44 = new List(num4); + CollectionsMarshal.SetCount(list44, num4); span2 = CollectionsMarshal.AsSpan(list44); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Show once completed quests with improved state display"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy daily quest and improvements to various Yok Huy quests"); - reference43 = new ChangelogEntry("6.18", releaseDate27, list44); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Prevent disabled or Locked quests from being started as 'Start as next quest'"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Yok Huy quest and journal quest chain priority issues"); + reference43 = new ChangelogEntry("6.22", releaseDate24, list44); num2++; ref ChangelogEntry reference44 = ref span[num2]; - DateOnly releaseDate28 = new DateOnly(2025, 10, 8); - num4 = 1; - List list45 = new List(num4); - CollectionsMarshal.SetCount(list45, num4); + DateOnly releaseDate25 = new DateOnly(2025, 10, 12); + num3 = 2; + List list45 = new List(num3); + CollectionsMarshal.SetCount(list45, num3); span2 = CollectionsMarshal.AsSpan(list45); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 and rank 2 quests"); - reference44 = new ChangelogEntry("6.17", releaseDate28, list45); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Added, "Added expansion abbreviation to journal window"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 3 quests"); + reference44 = new ChangelogEntry("6.21", releaseDate25, list45); num2++; ref ChangelogEntry reference45 = ref span[num2]; - DateOnly releaseDate29 = new DateOnly(2025, 10, 8); - num3 = 1; - List list46 = new List(num3); - CollectionsMarshal.SetCount(list46, num3); + DateOnly releaseDate26 = new DateOnly(2025, 10, 10); + num4 = 2; + List list46 = new List(num4); + CollectionsMarshal.SetCount(list46, num4); span2 = CollectionsMarshal.AsSpan(list46); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon quest (Faerie Tale)"); - reference45 = new ChangelogEntry("6.16", releaseDate29, list46); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Allow completed repeatable quests to be used with 'Add quest and requirements to priority' feature"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 quest (A Work of Cart)"); + reference45 = new ChangelogEntry("6.20", releaseDate26, list46); num2++; ref ChangelogEntry reference46 = ref span[num2]; - DateOnly releaseDate30 = new DateOnly(2025, 10, 8); - num4 = 2; - List list47 = new List(num4); - CollectionsMarshal.SetCount(list47, num4); + DateOnly releaseDate27 = new DateOnly(2025, 10, 9); + num3 = 3; + List list47 = new List(num3); + CollectionsMarshal.SetCount(list47, num3); span2 = CollectionsMarshal.AsSpan(list47); - num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Dalamud cleanup"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest level requirement check log spam"); - reference46 = new ChangelogEntry("6.15", releaseDate30, list47); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Added, "Added config to batch Allied Society quest turn-ins"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Repeatable quests now show correct availability state in journal"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 2 quests"); + reference46 = new ChangelogEntry("6.19", releaseDate27, list47); num2++; ref ChangelogEntry reference47 = ref span[num2]; - DateOnly releaseDate31 = new DateOnly(2025, 10, 8); - num3 = 1; - List list48 = new List(num3); - CollectionsMarshal.SetCount(list48, num3); + DateOnly releaseDate28 = new DateOnly(2025, 10, 9); + num4 = 2; + List list48 = new List(num4); + CollectionsMarshal.SetCount(list48, num4); span2 = CollectionsMarshal.AsSpan(list48); - num4 = 0; - span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check logic if quest were MSQ"); - reference47 = new ChangelogEntry("6.14", releaseDate31, list48); + num3 = 0; + span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Show once completed quests with improved state display"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy daily quest and improvements to various Yok Huy quests"); + reference47 = new ChangelogEntry("6.18", releaseDate28, list48); num2++; ref ChangelogEntry reference48 = ref span[num2]; - DateOnly releaseDate32 = new DateOnly(2025, 10, 8); - num4 = 2; - List list49 = new List(num4); - CollectionsMarshal.SetCount(list49, num4); + DateOnly releaseDate29 = new DateOnly(2025, 10, 8); + num3 = 1; + List list49 = new List(num3); + CollectionsMarshal.SetCount(list49, num3); span2 = CollectionsMarshal.AsSpan(list49); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Yok Huy rank 1 and rank 2 quests"); + reference48 = new ChangelogEntry("6.17", releaseDate29, list49); + num2++; + ref ChangelogEntry reference49 = ref span[num2]; + DateOnly releaseDate30 = new DateOnly(2025, 10, 8); + num4 = 1; + List list50 = new List(num4); + CollectionsMarshal.SetCount(list50, num4); + span2 = CollectionsMarshal.AsSpan(list50); num3 = 0; - ref ChangeEntry reference49 = ref span2[num3]; - num5 = 3; - List list50 = new List(num5); - CollectionsMarshal.SetCount(list50, num5); - span3 = CollectionsMarshal.AsSpan(list50); - index = 0; - span3[index] = "Context menu option to add required quests and their chain to priority list"; - index++; - span3[index] = "AetheryteShortcut to multiple quests"; - index++; - span3[index] = "Artisan as a recommended plugin/dependency"; - reference49 = new ChangeEntry(EChangeCategory.Added, "Quest improvements", list50); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check and priority list issues"); - reference48 = new ChangelogEntry("6.13", releaseDate32, list49); + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon quest (Faerie Tale)"); + reference49 = new ChangelogEntry("6.16", releaseDate30, list50); num2++; ref ChangelogEntry reference50 = ref span[num2]; - DateOnly releaseDate33 = new DateOnly(2025, 10, 7); - num3 = 4; + DateOnly releaseDate31 = new DateOnly(2025, 10, 8); + num3 = 2; List list51 = new List(num3); CollectionsMarshal.SetCount(list51, num3); span2 = CollectionsMarshal.AsSpan(list51); num4 = 0; - ref ChangeEntry reference51 = ref span2[num4]; - index = 4; - List list52 = new List(index); - CollectionsMarshal.SetCount(list52, index); - span3 = CollectionsMarshal.AsSpan(list52); - num5 = 0; - span3[num5] = "FATE combat handling with auto level syncing"; - num5++; - span3[num5] = "Start accepted quests from journal with 'Start as next quest'"; - num5++; - span3[num5] = "Update quest tracking when quests are hidden or prioritised in game"; - num5++; - span3[num5] = "QuestMap as a recommended plugin/dependency"; - reference51 = new ChangeEntry(EChangeCategory.Added, "FATE and quest tracking", list52); + span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Dalamud cleanup"); num4++; - ref ChangeEntry reference52 = ref span2[num4]; - num5 = 3; - List list53 = new List(num5); - CollectionsMarshal.SetCount(list53, num5); - span3 = CollectionsMarshal.AsSpan(list53); - index = 0; - span3[index] = "Always prioritise next quest during teleportation/zone transitions"; - index++; - span3[index] = "Improved accepted quest logic with abandoned quest detection"; - index++; - span3[index] = "Show quests without quest paths as Locked"; - reference52 = new ChangeEntry(EChangeCategory.Changed, "Quest prioritisation improvements", list53); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon, Hildibrand, Yok Huy, Monster Hunter Wilds Collab, and Doman Enclave quests"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed accepted/active quest display and Hildibrand quest issues"); - reference50 = new ChangelogEntry("6.12", releaseDate33, list51); + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed quest level requirement check log spam"); + reference50 = new ChangelogEntry("6.15", releaseDate31, list51); num2++; - ref ChangelogEntry reference53 = ref span[num2]; - DateOnly releaseDate34 = new DateOnly(2025, 10, 3); + ref ChangelogEntry reference51 = ref span[num2]; + DateOnly releaseDate32 = new DateOnly(2025, 10, 8); num4 = 1; - List list54 = new List(num4); - CollectionsMarshal.SetCount(list54, num4); - span2 = CollectionsMarshal.AsSpan(list54); + List list52 = new List(num4); + CollectionsMarshal.SetCount(list52, num4); + span2 = CollectionsMarshal.AsSpan(list52); num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Added remaining checks for quest priority to prevent infinite teleport looping"); - reference53 = new ChangelogEntry("6.11", releaseDate34, list54); + span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check logic if quest were MSQ"); + reference51 = new ChangelogEntry("6.14", releaseDate32, list52); + num2++; + ref ChangelogEntry reference52 = ref span[num2]; + DateOnly releaseDate33 = new DateOnly(2025, 10, 8); + num3 = 2; + List list53 = new List(num3); + CollectionsMarshal.SetCount(list53, num3); + span2 = CollectionsMarshal.AsSpan(list53); + num4 = 0; + ref ChangeEntry reference53 = ref span2[num4]; + num6 = 3; + List list54 = new List(num6); + CollectionsMarshal.SetCount(list54, num6); + span3 = CollectionsMarshal.AsSpan(list54); + num5 = 0; + span3[num5] = "Context menu option to add required quests and their chain to priority list"; + num5++; + span3[num5] = "AetheryteShortcut to multiple quests"; + num5++; + span3[num5] = "Artisan as a recommended plugin/dependency"; + reference53 = new ChangeEntry(EChangeCategory.Added, "Quest improvements", list54); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed abandoned quest check and priority list issues"); + reference52 = new ChangelogEntry("6.13", releaseDate33, list53); num2++; ref ChangelogEntry reference54 = ref span[num2]; - DateOnly releaseDate35 = new DateOnly(2025, 10, 2); - num3 = 1; - List list55 = new List(num3); - CollectionsMarshal.SetCount(list55, num3); + DateOnly releaseDate34 = new DateOnly(2025, 10, 7); + num4 = 4; + List list55 = new List(num4); + CollectionsMarshal.SetCount(list55, num4); span2 = CollectionsMarshal.AsSpan(list55); - num4 = 0; - ref ChangeEntry reference55 = ref span2[num4]; - index = 2; - List list56 = new List(index); - CollectionsMarshal.SetCount(list56, index); - span3 = CollectionsMarshal.AsSpan(list56); - num5 = 0; - span3[num5] = "Don't show quests as available if player doesn't meet level requirements"; - num5++; - span3[num5] = "Updated 'required for MSQ' text in Crystal Tower quest preset window"; - reference55 = new ChangeEntry(EChangeCategory.Changed, "Quest window improvements", list56); - reference54 = new ChangelogEntry("6.10", releaseDate35, list55); - num2++; - ref ChangelogEntry reference56 = ref span[num2]; - DateOnly releaseDate36 = new DateOnly(2025, 9, 21); - num4 = 5; - List list57 = new List(num4); - CollectionsMarshal.SetCount(list57, num4); - span2 = CollectionsMarshal.AsSpan(list57); num3 = 0; - ref ChangeEntry reference57 = ref span2[num3]; + ref ChangeEntry reference55 = ref span2[num3]; num5 = 4; - List list58 = new List(num5); - CollectionsMarshal.SetCount(list58, num5); - span3 = CollectionsMarshal.AsSpan(list58); - index = 0; - span3[index] = "Reworked event quest handling - automatically displays when events are active"; - index++; - span3[index] = "Reworked journal system with improved filtering and display"; - index++; - span3[index] = "Reworked Priority Quests tab (Manual Priority and Quest Presets)"; - index++; - span3[index] = "Quest path viewer site (https://wigglymuffin.github.io/FFXIV-Tools/)"; - reference57 = new ChangeEntry(EChangeCategory.Added, "Major system reworks", list58); + List list56 = new List(num5); + CollectionsMarshal.SetCount(list56, num5); + span3 = CollectionsMarshal.AsSpan(list56); + num6 = 0; + span3[num6] = "FATE combat handling with auto level syncing"; + num6++; + span3[num6] = "Start accepted quests from journal with 'Start as next quest'"; + num6++; + span3[num6] = "Update quest tracking when quests are hidden or prioritised in game"; + num6++; + span3[num6] = "QuestMap as a recommended plugin/dependency"; + reference55 = new ChangeEntry(EChangeCategory.Added, "FATE and quest tracking", list56); num3++; - ref ChangeEntry reference58 = ref span2[num3]; - index = 4; - List list59 = new List(index); - CollectionsMarshal.SetCount(list59, index); - span3 = CollectionsMarshal.AsSpan(list59); + ref ChangeEntry reference56 = ref span2[num3]; + num6 = 3; + List list57 = new List(num6); + CollectionsMarshal.SetCount(list57, num6); + span3 = CollectionsMarshal.AsSpan(list57); num5 = 0; - span3[num5] = "Questionable.IsQuestCompleted"; + span3[num5] = "Always prioritise next quest during teleportation/zone transitions"; num5++; - span3[num5] = "Questionable.IsQuestAvailable"; + span3[num5] = "Improved accepted quest logic with abandoned quest detection"; num5++; - span3[num5] = "Questionable.IsQuestAccepted"; - num5++; - span3[num5] = "Questionable.IsQuestUnobtainable"; - reference58 = new ChangeEntry(EChangeCategory.Added, "New IPC commands", list59); + span3[num5] = "Show quests without quest paths as Locked"; + reference56 = new ChangeEntry(EChangeCategory.Changed, "Quest prioritisation improvements", list57); num3++; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.35 Deep Dungeon, Hildibrand, Yok Huy, Monster Hunter Wilds Collab, and Doman Enclave quests"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed accepted/active quest display and Hildibrand quest issues"); + reference54 = new ChangelogEntry("6.12", releaseDate34, list55); + num2++; + ref ChangelogEntry reference57 = ref span[num2]; + DateOnly releaseDate35 = new DateOnly(2025, 10, 3); + num3 = 1; + List list58 = new List(num3); + CollectionsMarshal.SetCount(list58, num3); + span2 = CollectionsMarshal.AsSpan(list58); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Added remaining checks for quest priority to prevent infinite teleport looping"); + reference57 = new ChangelogEntry("6.11", releaseDate35, list58); + num2++; + ref ChangelogEntry reference58 = ref span[num2]; + DateOnly releaseDate36 = new DateOnly(2025, 10, 2); + num4 = 1; + List list59 = new List(num4); + CollectionsMarshal.SetCount(list59, num4); + span2 = CollectionsMarshal.AsSpan(list59); + num3 = 0; ref ChangeEntry reference59 = ref span2[num3]; - num5 = 5; + num5 = 2; List list60 = new List(num5); CollectionsMarshal.SetCount(list60, num5); span3 = CollectionsMarshal.AsSpan(list60); - index = 0; - span3[index] = "Improved JSON quest validation with specific error reasons"; - index++; - span3[index] = "Added stop at sequence stop condition"; - index++; - span3[index] = "Improved Pandora plugin conflict detection"; - index++; - span3[index] = "Improved DialogueChoices regex matching"; - index++; - span3[index] = "Improved refresh checker for all quest states"; - reference59 = new ChangeEntry(EChangeCategory.Changed, "Various improvements", list60); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.31 Occult Crescent quests"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed cutscene crashes, Single Player Duty triggers, and various quest issues"); - reference56 = new ChangelogEntry("6.9", releaseDate36, list57); + num6 = 0; + span3[num6] = "Don't show quests as available if player doesn't meet level requirements"; + num6++; + span3[num6] = "Updated 'required for MSQ' text in Crystal Tower quest preset window"; + reference59 = new ChangeEntry(EChangeCategory.Changed, "Quest window improvements", list60); + reference58 = new ChangelogEntry("6.10", releaseDate36, list59); num2++; ref ChangelogEntry reference60 = ref span[num2]; - DateOnly releaseDate37 = new DateOnly(2025, 9, 2); - num3 = 4; + DateOnly releaseDate37 = new DateOnly(2025, 9, 21); + num3 = 5; List list61 = new List(num3); CollectionsMarshal.SetCount(list61, num3); span2 = CollectionsMarshal.AsSpan(list61); num4 = 0; ref ChangeEntry reference61 = ref span2[num4]; - index = 4; - List list62 = new List(index); - CollectionsMarshal.SetCount(list62, index); + num6 = 4; + List list62 = new List(num6); + CollectionsMarshal.SetCount(list62, num6); span3 = CollectionsMarshal.AsSpan(list62); num5 = 0; - span3[num5] = "Help commands and priority quest command"; + span3[num5] = "Reworked event quest handling - automatically displays when events are active"; num5++; - span3[num5] = "Prevent 'CompleteQuest' step setting"; + span3[num5] = "Reworked journal system with improved filtering and display"; num5++; - span3[num5] = "Duty counts and controls in 'Quest Battles' tab"; + span3[num5] = "Reworked Priority Quests tab (Manual Priority and Quest Presets)"; num5++; - span3[num5] = "'Refresh quest timer' setting (WIP)"; - reference61 = new ChangeEntry(EChangeCategory.Added, "Command and UI improvements", list62); + span3[num5] = "Quest path viewer site (https://wigglymuffin.github.io/FFXIV-Tools/)"; + reference61 = new ChangeEntry(EChangeCategory.Added, "Major system reworks", list62); num4++; - span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Improved 'Clear All' buttons to require CTRL being held"); + ref ChangeEntry reference62 = ref span2[num4]; + num5 = 4; + List list63 = new List(num5); + CollectionsMarshal.SetCount(list63, num5); + span3 = CollectionsMarshal.AsSpan(list63); + num6 = 0; + span3[num6] = "Questionable.IsQuestCompleted"; + num6++; + span3[num6] = "Questionable.IsQuestAvailable"; + num6++; + span3[num6] = "Questionable.IsQuestAccepted"; + num6++; + span3[num6] = "Questionable.IsQuestUnobtainable"; + reference62 = new ChangeEntry(EChangeCategory.Added, "New IPC commands", list63); num4++; - span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Zodiac quests and 7.31 Cosmic/Occult Crescent quests"); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Fishing for Friendship and Cosmic Exploration quests"); - reference60 = new ChangelogEntry("6.8", releaseDate37, list61); - num2++; - ref ChangelogEntry reference62 = ref span[num2]; - DateOnly releaseDate38 = new DateOnly(2025, 8, 27); - num4 = 4; - List list63 = new List(num4); - CollectionsMarshal.SetCount(list63, num4); - span2 = CollectionsMarshal.AsSpan(list63); - num3 = 0; - ref ChangeEntry reference63 = ref span2[num3]; - num5 = 2; - List list64 = new List(num5); - CollectionsMarshal.SetCount(list64, num5); + ref ChangeEntry reference63 = ref span2[num4]; + num6 = 5; + List list64 = new List(num6); + CollectionsMarshal.SetCount(list64, num6); span3 = CollectionsMarshal.AsSpan(list64); - index = 0; - span3[index] = "Icon to 'Clear All' button in stop conditions"; - index++; - span3[index] = "Duty counts and 'Enable All' button in 'Duties' tab"; - reference63 = new ChangeEntry(EChangeCategory.Added, "UI improvements", list64); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Renamed 'Clear' button to 'Clear All' in priority window"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Rising 2025 Event Quests"); - num3++; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed clipboard assigning blacklist to whitelist in 'Duties' tab"); - reference62 = new ChangelogEntry("6.7", releaseDate38, list63); + num5 = 0; + span3[num5] = "Improved JSON quest validation with specific error reasons"; + num5++; + span3[num5] = "Added stop at sequence stop condition"; + num5++; + span3[num5] = "Improved Pandora plugin conflict detection"; + num5++; + span3[num5] = "Improved DialogueChoices regex matching"; + num5++; + span3[num5] = "Improved refresh checker for all quest states"; + reference63 = new ChangeEntry(EChangeCategory.Changed, "Various improvements", list64); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added 7.31 Occult Crescent quests"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed cutscene crashes, Single Player Duty triggers, and various quest issues"); + reference60 = new ChangelogEntry("6.9", releaseDate37, list61); num2++; ref ChangelogEntry reference64 = ref span[num2]; - DateOnly releaseDate39 = new DateOnly(2025, 8, 25); - num3 = 2; - List list65 = new List(num3); - CollectionsMarshal.SetCount(list65, num3); + DateOnly releaseDate38 = new DateOnly(2025, 9, 2); + num4 = 4; + List list65 = new List(num4); + CollectionsMarshal.SetCount(list65, num4); span2 = CollectionsMarshal.AsSpan(list65); - num4 = 0; - ref ChangeEntry reference65 = ref span2[num4]; - index = 2; - List list66 = new List(index); - CollectionsMarshal.SetCount(list66, index); + num3 = 0; + ref ChangeEntry reference65 = ref span2[num3]; + num5 = 4; + List list66 = new List(num5); + CollectionsMarshal.SetCount(list66, num5); span3 = CollectionsMarshal.AsSpan(list66); - num5 = 0; - span3[num5] = "Missing emotes to schema and emote handler"; - num5++; - span3[num5] = "Improved stop conditions with 'Clear All' button"; - reference65 = new ChangeEntry(EChangeCategory.Added, "Emote support and stop conditions", list66); - num4++; - span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Stop at level functionality"); - reference64 = new ChangelogEntry("6.6", releaseDate39, list65); + num6 = 0; + span3[num6] = "Help commands and priority quest command"; + num6++; + span3[num6] = "Prevent 'CompleteQuest' step setting"; + num6++; + span3[num6] = "Duty counts and controls in 'Quest Battles' tab"; + num6++; + span3[num6] = "'Refresh quest timer' setting (WIP)"; + reference65 = new ChangeEntry(EChangeCategory.Added, "Command and UI improvements", list66); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Improved 'Clear All' buttons to require CTRL being held"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Zodiac quests and 7.31 Cosmic/Occult Crescent quests"); + num3++; + span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Fixed Fishing for Friendship and Cosmic Exploration quests"); + reference64 = new ChangelogEntry("6.8", releaseDate38, list65); num2++; ref ChangelogEntry reference66 = ref span[num2]; + DateOnly releaseDate39 = new DateOnly(2025, 8, 27); + num3 = 4; + List list67 = new List(num3); + CollectionsMarshal.SetCount(list67, num3); + span2 = CollectionsMarshal.AsSpan(list67); + num4 = 0; + ref ChangeEntry reference67 = ref span2[num4]; + num6 = 2; + List list68 = new List(num6); + CollectionsMarshal.SetCount(list68, num6); + span3 = CollectionsMarshal.AsSpan(list68); + num5 = 0; + span3[num5] = "Icon to 'Clear All' button in stop conditions"; + num5++; + span3[num5] = "Duty counts and 'Enable All' button in 'Duties' tab"; + reference67 = new ChangeEntry(EChangeCategory.Added, "UI improvements", list68); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Changed, "Renamed 'Clear' button to 'Clear All' in priority window"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added Rising 2025 Event Quests"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Fixed clipboard assigning blacklist to whitelist in 'Duties' tab"); + reference66 = new ChangelogEntry("6.7", releaseDate39, list67); + num2++; + ref ChangelogEntry reference68 = ref span[num2]; DateOnly releaseDate40 = new DateOnly(2025, 8, 25); num4 = 2; - List list67 = new List(num4); - CollectionsMarshal.SetCount(list67, num4); - span2 = CollectionsMarshal.AsSpan(list67); + List list69 = new List(num4); + CollectionsMarshal.SetCount(list69, num4); + span2 = CollectionsMarshal.AsSpan(list69); num3 = 0; - span2[num3] = new ChangeEntry(EChangeCategory.Fixed, "Potential fix to single/solo duties softlocking"); + ref ChangeEntry reference69 = ref span2[num3]; + num5 = 2; + List list70 = new List(num5); + CollectionsMarshal.SetCount(list70, num5); + span3 = CollectionsMarshal.AsSpan(list70); + num6 = 0; + span3[num6] = "Missing emotes to schema and emote handler"; + num6++; + span3[num6] = "Improved stop conditions with 'Clear All' button"; + reference69 = new ChangeEntry(EChangeCategory.Added, "Emote support and stop conditions", list70); num3++; - span2[num3] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added San d'Oria: The Second Walk and various side quests"); - reference66 = new ChangelogEntry("6.5", releaseDate40, list67); + span2[num3] = new ChangeEntry(EChangeCategory.Changed, "Stop at level functionality"); + reference68 = new ChangelogEntry("6.6", releaseDate40, list69); + num2++; + ref ChangelogEntry reference70 = ref span[num2]; + DateOnly releaseDate41 = new DateOnly(2025, 8, 25); + num3 = 2; + List list71 = new List(num3); + CollectionsMarshal.SetCount(list71, num3); + span2 = CollectionsMarshal.AsSpan(list71); + num4 = 0; + span2[num4] = new ChangeEntry(EChangeCategory.Fixed, "Potential fix to single/solo duties softlocking"); + num4++; + span2[num4] = new ChangeEntry(EChangeCategory.QuestUpdates, "Added San d'Oria: The Second Walk and various side quests"); + reference70 = new ChangelogEntry("6.5", releaseDate41, list71); Changelogs = list; } } diff --git a/Questionable/Questionable.External/QuestionableIpc.cs b/Questionable/Questionable.External/QuestionableIpc.cs index 5ae91f0..6333ea6 100644 --- a/Questionable/Questionable.External/QuestionableIpc.cs +++ b/Questionable/Questionable.External/QuestionableIpc.cs @@ -151,6 +151,10 @@ internal sealed class QuestionableIpc : IDisposable private const string IpcGetAlliedSocietiesWithAvailableQuests = "Questionable.AlliedSociety.GetSocietiesWithAvailableQuests"; + private const string IpcAddAlliedSocietyOptimalQuests = "Questionable.AlliedSociety.AddOptimalQuests"; + + private const string IpcGetAlliedSocietyOptimalQuests = "Questionable.AlliedSociety.GetOptimalQuests"; + private readonly QuestController _questController; private readonly QuestRegistry _questRegistry; @@ -269,6 +273,10 @@ internal sealed class QuestionableIpc : IDisposable private readonly ICallGateProvider> _getAlliedSocietiesWithAvailableQuests; + private readonly ICallGateProvider _addAlliedSocietyOptimalQuests; + + private readonly ICallGateProvider> _getAlliedSocietyOptimalQuests; + public QuestionableIpc(QuestController questController, EventInfoComponent eventInfoComponent, QuestRegistry questRegistry, QuestFunctions questFunctions, QuestData questData, ManualPriorityComponent manualPriorityComponent, PresetBuilderComponent presetBuilderComponent, Configuration configuration, IDalamudPluginInterface pluginInterface, IServiceProvider serviceProvider) { QuestionableIpc questionableIpc = this; @@ -382,6 +390,10 @@ internal sealed class QuestionableIpc : IDisposable _getAlliedSocietyCurrentRank.RegisterFunc(GetAlliedSocietyCurrentRank); _getAlliedSocietiesWithAvailableQuests = pluginInterface.GetIpcProvider>("Questionable.AlliedSociety.GetSocietiesWithAvailableQuests"); _getAlliedSocietiesWithAvailableQuests.RegisterFunc(GetAlliedSocietiesWithAvailableQuests); + _addAlliedSocietyOptimalQuests = pluginInterface.GetIpcProvider("Questionable.AlliedSociety.AddOptimalQuests"); + _addAlliedSocietyOptimalQuests.RegisterFunc(AddAlliedSocietyOptimalQuests); + _getAlliedSocietyOptimalQuests = pluginInterface.GetIpcProvider>("Questionable.AlliedSociety.GetOptimalQuests"); + _getAlliedSocietyOptimalQuests.RegisterFunc(GetAlliedSocietyOptimalQuests); } private bool StartQuest(string questId, bool single) @@ -1026,9 +1038,16 @@ internal sealed class QuestionableIpc : IDisposable { return false; } - byte num = (byte)(ptr->BeastReputation[alliedSocietyId - 1].Rank & 0x7F); - byte b = (byte)((alliedSocietyId <= 5) ? 8 : 3); - return num >= b; + byte b = (byte)(ptr->BeastReputation[alliedSocietyId - 1].Rank & 0x7F); + return b >= (EAlliedSociety)alliedSocietyId switch + { + EAlliedSociety.Amaljaa => 3, + EAlliedSociety.Sylphs => 3, + EAlliedSociety.Kobolds => 3, + EAlliedSociety.Sahagin => 3, + EAlliedSociety.Ixal => 7, + _ => 8, + }; } private unsafe int GetAlliedSocietyCurrentRank(byte alliedSocietyId) @@ -1060,6 +1079,71 @@ internal sealed class QuestionableIpc : IDisposable return list; } + private int AddAlliedSocietyOptimalQuests(byte alliedSocietyId) + { + if (!Enum.IsDefined(typeof(EAlliedSociety), alliedSocietyId) || alliedSocietyId == 0) + { + return 0; + } + EAlliedSociety eAlliedSociety = (EAlliedSociety)alliedSocietyId; + List availableAlliedSocietyQuests = _serviceProvider.GetRequiredService().GetAvailableAlliedSocietyQuests(eAlliedSociety); + if (availableAlliedSocietyQuests.Count == 0) + { + return 0; + } + Quest quest; + List list = (from QuestInfo questInfo in availableAlliedSocietyQuests.Select((QuestId questId) => _questData.GetQuestInfo(questId)) + where _questRegistry.TryGetQuest(questInfo.QuestId, out quest) && !quest.Root.Disabled + where !_questController.ManualPriorityQuests.Any((Quest pq) => pq.Id.Equals(questInfo.QuestId)) + orderby questInfo.AlliedSocietyRank descending + select questInfo).ToList(); + if (list.Count == 0) + { + return 0; + } + int val = (((int)eAlliedSociety <= 5) ? 12 : 3); + int alliedSocietyRemainingAllowances = GetAlliedSocietyRemainingAllowances(); + int count = Math.Min(Math.Min(val, alliedSocietyRemainingAllowances), list.Count); + int num = 0; + foreach (QuestInfo item in list.Take(count)) + { + if (_questController.AddQuestPriority(item.QuestId)) + { + num++; + } + } + return num; + } + + private List GetAlliedSocietyOptimalQuests(byte alliedSocietyId) + { + if (!Enum.IsDefined(typeof(EAlliedSociety), alliedSocietyId) || alliedSocietyId == 0) + { + return new List(); + } + EAlliedSociety eAlliedSociety = (EAlliedSociety)alliedSocietyId; + List availableAlliedSocietyQuests = _serviceProvider.GetRequiredService().GetAvailableAlliedSocietyQuests(eAlliedSociety); + if (availableAlliedSocietyQuests.Count == 0) + { + return new List(); + } + Quest quest; + List list = (from QuestInfo questInfo in availableAlliedSocietyQuests.Select((QuestId questId) => _questData.GetQuestInfo(questId)) + where _questRegistry.TryGetQuest(questInfo.QuestId, out quest) && !quest.Root.Disabled + where !_questController.ManualPriorityQuests.Any((Quest pq) => pq.Id.Equals(questInfo.QuestId)) + orderby questInfo.AlliedSocietyRank descending + select questInfo).ToList(); + if (list.Count == 0) + { + return new List(); + } + int val = (((int)eAlliedSociety <= 5) ? 12 : 3); + int alliedSocietyRemainingAllowances = GetAlliedSocietyRemainingAllowances(); + int count = Math.Min(Math.Min(val, alliedSocietyRemainingAllowances), list.Count); + return (from q in list.Take(count) + select q.QuestId.ToString()).ToList(); + } + public void Dispose() { _exportQuestPriority.UnregisterFunc(); @@ -1112,5 +1196,7 @@ internal sealed class QuestionableIpc : IDisposable _getAlliedSocietyAvailableQuestIds.UnregisterFunc(); _getAlliedSocietyTimeUntilReset.UnregisterFunc(); _getAlliedSocietyRemainingAllowances.UnregisterFunc(); + _addAlliedSocietyOptimalQuests.UnregisterFunc(); + _getAlliedSocietyOptimalQuests.UnregisterFunc(); } } diff --git a/Questionable/Questionable.Windows.JournalComponents/AlliedSocietyJournalComponent.cs b/Questionable/Questionable.Windows.JournalComponents/AlliedSocietyJournalComponent.cs index 21367d2..be735bc 100644 --- a/Questionable/Questionable.Windows.JournalComponents/AlliedSocietyJournalComponent.cs +++ b/Questionable/Questionable.Windows.JournalComponents/AlliedSocietyJournalComponent.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Numerics; using Dalamud.Bindings.ImGui; +using Dalamud.Game.Text; using Dalamud.Interface; using Dalamud.Interface.Colors; using Dalamud.Interface.Components; @@ -21,7 +22,7 @@ namespace Questionable.Windows.JournalComponents; internal sealed class AlliedSocietyJournalComponent { - private static readonly string[] RankNames = new string[8] { "Neutral", "Recognized", "Friendly", "Trusted", "Respected", "Honored", "Sworn", "Allied" }; + private static readonly string[] RankNames = new string[9] { "Neutral", "Recognized", "Friendly", "Trusted", "Respected", "Honored", "Sworn", "Bloodsworn", "Allied" }; private const int DefaultDailyQuestLimit = 3; @@ -114,12 +115,11 @@ internal sealed class AlliedSocietyJournalComponent if (ImGui.IsItemHovered()) { ImGui.BeginTooltip(); - ImGui.TextUnformatted("Shared across ALL allied societies (all expansions)"); + ImGui.TextUnformatted("Shared across all allied societies"); text = new ImU8String(12, 1); text.AppendLiteral("Used today: "); text.AppendFormatted(value); ImGui.TextUnformatted(text); - ImGui.TextUnformatted("Each allied society has a limit of 3 quests per day"); ImGui.Spacing(); ImGui.Separator(); ImGui.Spacing(); @@ -174,15 +174,15 @@ internal sealed class AlliedSocietyJournalComponent private void DrawQuestList(EAlliedSociety alliedSociety, List quests) { - if ((int)alliedSociety <= 5) + if ((int)alliedSociety <= 4) { byte rank = 1; - while (rank <= 8) + while (rank <= 4) { List list = quests.Where((QuestInfo x) => x.AlliedSocietyRank == rank).ToList(); if (list.Count != 0) { - ImGui.Text(RankNames[rank - 1]); + ImGui.Text(RankNames[rank]); foreach (QuestInfo item in list) { DrawQuest(item); @@ -191,11 +191,46 @@ internal sealed class AlliedSocietyJournalComponent byte b = (byte)(rank + 1); rank = b; } - return; } - foreach (QuestInfo quest in quests) + else if (alliedSociety == EAlliedSociety.Ixal) { - DrawQuest(quest); + byte rank2 = 1; + while (rank2 <= 8) + { + List list2 = quests.Where((QuestInfo x) => x.AlliedSocietyRank == rank2).ToList(); + if (list2.Count != 0) + { + ImGui.Text(RankNames[rank2]); + foreach (QuestInfo item2 in list2) + { + DrawQuest(item2); + } + } + byte b = (byte)(rank2 + 1); + rank2 = b; + } + } + else + { + if ((int)alliedSociety < 6) + { + return; + } + byte rank3 = 1; + while (rank3 <= 9) + { + List list3 = quests.Where((QuestInfo x) => x.AlliedSocietyRank == rank3).ToList(); + if (list3.Count != 0) + { + ImGui.Text(RankNames[rank3]); + foreach (QuestInfo item3 in list3) + { + DrawQuest(item3); + } + } + byte b = (byte)(rank3 + 1); + rank3 = b; + } } } @@ -214,7 +249,7 @@ internal sealed class AlliedSocietyJournalComponent { DrawDisabledAddButton(); } - else if (flag && list.Count > 3) + else if (flag) { DrawArrSocietyButtons(alliedSociety, list, dailyLimit, remainingAllowances); } @@ -251,8 +286,13 @@ internal sealed class AlliedSocietyJournalComponent int num = Math.Min(Math.Min(dailyLimit, remainingAllowances), availableQuests.Count); using (ImRaii.Disabled(remainingAllowances == 0)) { - string text = ((num == remainingAllowances) ? $"Add {num} (Today's Remaining)" : $"Add {num} (Recommended)"); - if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Plus, text)) + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Plus, num switch + { + 1 => "Add 1 Quest (Optimal)", + 2 => "Add 2 Quests (Optimal)", + 3 => "Add 3 Quests (Optimal)", + _ => (num != remainingAllowances) ? $"Add {num} (Optimal)" : $"Add {num} (Today's Remaining)", + })) { AddQuestsToPriority(alliedSociety, availableQuests.Take(num).ToList()); } @@ -262,7 +302,7 @@ internal sealed class AlliedSocietyJournalComponent DrawRecommendedButtonTooltip(num, remainingAllowances, dailyLimit, alliedSociety, availableQuests.Count); } ImGui.SameLine(); - if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.ListOl, $"Add All {availableQuests.Count} (Ignore Limit)")) + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.ListOl, $"Add All {availableQuests.Count} Available")) { AddQuestsToPriority(alliedSociety, availableQuests); } @@ -277,50 +317,122 @@ internal sealed class AlliedSocietyJournalComponent ImGui.BeginTooltip(); if (remainingAllowances == 0) { - ImGui.TextUnformatted("No daily allowances remaining"); + ImU8String text; + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed)) + { + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.Cross.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + ImGui.TextUnformatted("No daily allowances remaining"); + } Vector4 col = ImGuiColors.DalamudGrey3; - ImU8String text = new ImU8String(44, 1); + text = new ImU8String(44, 1); text.AppendLiteral("You've used all "); text.AppendFormatted(12); text.AppendLiteral(" shared allowances for today"); ImGui.TextColored(in col, text); } - else if (questsToAddCount == remainingAllowances) + else if (questsToAddCount == remainingAllowances && questsToAddCount < availableCount) { - ImU8String text = new ImU8String(47, 1); - text.AppendLiteral("Add "); - text.AppendFormatted(questsToAddCount); - text.AppendLiteral(" quests - matches your remaining allowances"); - ImGui.TextUnformatted(text); - Vector4 col = ImGuiColors.ParsedGreen; - text = new ImU8String(50, 1); + ImU8String text; + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) + { + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.QuestSync.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(5, 2); + text.AppendLiteral("Add "); + text.AppendFormatted(questsToAddCount); + text.AppendLiteral(" "); + text.AppendFormatted((questsToAddCount == 1) ? "quest" : "quests"); + ImGui.TextUnformatted(text); + } + Vector4 col = ImGuiColors.DalamudGrey3; + text = new ImU8String(44, 2); text.AppendLiteral("You can complete "); text.AppendFormatted(remainingAllowances); - text.AppendLiteral(" more allied society quests today"); + text.AppendLiteral(" more allied society "); + text.AppendFormatted((remainingAllowances == 1) ? "quest" : "quests"); + text.AppendLiteral(" today"); ImGui.TextColored(in col, text); ImGui.Spacing(); ImGui.TextColored(ImGuiColors.DalamudGrey3, "Prioritises highest rank quests first"); } else if (questsToAddCount == dailyLimit) { - ImU8String text = new ImU8String(41, 1); - text.AppendLiteral("Add "); + ImU8String text; + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) + { + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.QuestSync.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(11, 1); + text.AppendLiteral("Add "); + text.AppendFormatted(dailyLimit); + text.AppendLiteral(" quests"); + ImGui.TextUnformatted(text); + } + Vector4 col = ImGuiColors.DalamudGrey3; + text = new ImU8String(51, 2); + text.AppendLiteral("This will use "); text.AppendFormatted(dailyLimit); - text.AppendLiteral(" quests - using all shared allowances"); - ImGui.TextUnformatted(text); - ImGui.TextColored(ImGuiColors.DalamudGrey3, "This will use all 12 shared allowances"); + text.AppendLiteral(" of your "); + text.AppendFormatted(remainingAllowances); + text.AppendLiteral(" remaining shared allowances"); + ImGui.TextColored(in col, text); + ImGui.Spacing(); + ImGui.TextColored(ImGuiColors.DalamudGrey3, "Prioritises highest rank quests first"); + } + else if (questsToAddCount == availableCount) + { + ImU8String text; + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) + { + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.QuestSync.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(20, 3); + text.AppendLiteral("Add all "); + text.AppendFormatted(questsToAddCount); + text.AppendLiteral(" available "); + text.AppendFormatted(alliedSociety); + text.AppendLiteral(" "); + text.AppendFormatted((questsToAddCount == 1) ? "quest" : "quests"); + ImGui.TextUnformatted(text); + } + Vector4 col = ImGuiColors.DalamudGrey3; + text = new ImU8String(37, 2); + text.AppendLiteral("Uses "); + text.AppendFormatted(questsToAddCount); + text.AppendLiteral(" of "); + text.AppendFormatted(remainingAllowances); + text.AppendLiteral(" shared allowances remaining"); + ImGui.TextColored(in col, text); ImGui.Spacing(); ImGui.TextColored(ImGuiColors.DalamudGrey3, "Prioritises highest rank quests first"); } else { - ImU8String text = new ImU8String(12, 2); - text.AppendLiteral("Add "); - text.AppendFormatted(questsToAddCount); - text.AppendLiteral(" "); - text.AppendFormatted(alliedSociety); - text.AppendLiteral(" quests"); - ImGui.TextUnformatted(text); + ImU8String text; + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow)) + { + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.BoxedLetterQ.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(6, 3); + text.AppendLiteral("Add "); + text.AppendFormatted(questsToAddCount); + text.AppendLiteral(" "); + text.AppendFormatted(alliedSociety); + text.AppendLiteral(" "); + text.AppendFormatted((questsToAddCount == 1) ? "quest" : "quests"); + ImGui.TextUnformatted(text); + } Vector4 col = ImGuiColors.DalamudGrey3; text = new ImU8String(55, 2); text.AppendLiteral("Limited by available quests ("); @@ -340,57 +452,90 @@ internal sealed class AlliedSocietyJournalComponent ImGui.BeginTooltip(); if (availableCount > remainingAllowances) { + ImU8String text; using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange)) { - ImGuiComponents.IconButtonWithText(FontAwesomeIcon.ExclamationTriangle, "Warning: Exceeds shared allowances"); + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.Cross.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + ImGui.TextUnformatted("Warning: Exceeds remaining allowances"); } ImGui.Spacing(); - ImU8String text = new ImU8String(54, 1); + text = new ImU8String(54, 1); text.AppendLiteral("This adds all "); text.AppendFormatted(availableCount); text.AppendLiteral(" available quests to your priority list,"); ImGui.TextUnformatted(text); - text = new ImU8String(47, 1); + text = new ImU8String(37, 2); text.AppendLiteral("but you only have "); text.AppendFormatted(remainingAllowances); - text.AppendLiteral(" shared allowances remaining."); + text.AppendLiteral(" shared "); + text.AppendFormatted((remainingAllowances == 1) ? "allowance" : "allowances"); + text.AppendLiteral(" remaining."); ImGui.TextUnformatted(text); ImGui.Spacing(); ImGui.TextColored(ImGuiColors.DalamudGrey3, "The excess quests won't be completable until tomorrow."); } else if (availableCount > dailyLimit) { + ImU8String text; using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange)) { - ImGuiComponents.IconButtonWithText(FontAwesomeIcon.ExclamationTriangle, "Warning: Exceeds shared allowances"); + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.Cross.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + ImGui.TextUnformatted("Warning: Exceeds daily optimal amount"); } ImGui.Spacing(); - ImU8String text = new ImU8String(32, 1); + text = new ImU8String(32, 1); text.AppendLiteral("This adds all "); text.AppendFormatted(availableCount); text.AppendLiteral(" available quests,"); ImGui.TextUnformatted(text); - text = new ImU8String(57, 1); - text.AppendLiteral("but you can only complete "); - text.AppendFormatted(12); - text.AppendLiteral(" allied society quests per day."); + text = new ImU8String(48, 1); + text.AppendLiteral("using more than the typical "); + text.AppendFormatted(3); + text.AppendLiteral(" quests per society."); ImGui.TextUnformatted(text); ImGui.Spacing(); - ImGui.TextColored(ImGuiColors.DalamudGrey3, "You'll need multiple days to complete them all."); + Vector4 col = ImGuiColors.ParsedGreen; + text = new ImU8String(37, 1); + text.AppendLiteral("You have "); + text.AppendFormatted(remainingAllowances); + text.AppendLiteral(" shared allowances remaining"); + ImGui.TextColored(in col, text); + ImGui.TextColored(ImGuiColors.DalamudGrey3, "You may want to save allowances for other societies."); } else { - ImU8String text = new ImU8String(26, 2); - text.AppendLiteral("Add all "); - text.AppendFormatted(availableCount); - text.AppendLiteral(" available "); - text.AppendFormatted(alliedSociety); - text.AppendLiteral(" quests"); - ImGui.TextUnformatted(text); + ImU8String text; using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) { - ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Check, $"All can be completed today ({remainingAllowances} shared allowances remaining)"); + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.QuestSync.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(20, 3); + text.AppendLiteral("Add all "); + text.AppendFormatted(availableCount); + text.AppendLiteral(" available "); + text.AppendFormatted(alliedSociety); + text.AppendLiteral(" "); + text.AppendFormatted((availableCount == 1) ? "quest" : "quests"); + ImGui.TextUnformatted(text); } + ImGui.Spacing(); + Vector4 col = ImGuiColors.DalamudGrey3; + text = new ImU8String(27, 2); + text.AppendLiteral("Uses "); + text.AppendFormatted(availableCount); + text.AppendLiteral(" of "); + text.AppendFormatted(remainingAllowances); + text.AppendLiteral(" shared allowances"); + ImGui.TextColored(in col, text); + ImGui.TextColored(ImGuiColors.DalamudGrey3, "All can be completed today"); } ImGui.EndTooltip(); } @@ -399,10 +544,10 @@ internal sealed class AlliedSocietyJournalComponent { if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Plus, availableQuests.Count switch { - 1 => "Add Quest to Priority", - 2 => "Add Both Quests to Priority", - 3 => "Add All 3 Quests to Priority", - _ => $"Add All {availableQuests.Count} Quests to Priority", + 1 => "Add 1 Quest", + 2 => "Add 2 Quests", + 3 => "Add 3 Quests", + _ => $"Add All {availableQuests.Count} Quests", })) { AddQuestsToPriority(alliedSociety, availableQuests); @@ -421,19 +566,41 @@ internal sealed class AlliedSocietyJournalComponent text.AppendFormatted((availableQuests.Count == 1) ? "quest" : "quests"); text.AppendLiteral(" to priority"); ImGui.TextUnformatted(text); + ImGui.Spacing(); if (availableQuests.Count <= remainingAllowances) { using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) { - ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Check, $"Uses {availableQuests.Count} of {remainingAllowances} shared allowances"); + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.QuestSync.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(17, 3); + text.AppendLiteral("Uses "); + text.AppendFormatted(availableQuests.Count); + text.AppendLiteral(" of "); + text.AppendFormatted(remainingAllowances); + text.AppendLiteral(" shared "); + text.AppendFormatted((remainingAllowances == 1) ? "allowance" : "allowances"); + ImGui.TextUnformatted(text); } + ImGui.TextColored(ImGuiColors.DalamudGrey3, "All can be completed today"); } else { using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange)) { - ImGuiComponents.IconButtonWithText(FontAwesomeIcon.ExclamationTriangle, $"Exceeds remaining allowances ({remainingAllowances})"); + text = new ImU8String(0, 1); + text.AppendFormatted(SeIconChar.Cross.ToIconString()); + ImGui.Text(text); + ImGui.SameLine(); + text = new ImU8String(31, 1); + text.AppendLiteral("Exceeds remaining allowances ("); + text.AppendFormatted(remainingAllowances); + text.AppendLiteral(")"); + ImGui.TextUnformatted(text); } + ImGui.TextColored(ImGuiColors.DalamudGrey3, "Some quests won't be completable until tomorrow"); } ImGui.EndTooltip(); }