diff --git a/Directory.Build.targets b/Directory.Build.targets
index e37cfa8e..6759af62 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -1,5 +1,5 @@
- 4.6
+ 4.8
diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5198_Partners in Pel.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5198_Partners in Pel.json
new file mode 100644
index 00000000..7ae61b74
--- /dev/null
+++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5198_Partners in Pel.json
@@ -0,0 +1,67 @@
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "Position": {
+ "X": 809.655,
+ "Y": 17.004526,
+ "Z": -257.89868
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "AetheryteShortcut": "Kozama'uka - Dock Poga",
+ "Fly": true,
+ "SkipConditions": {
+ "AetheryteShortcutIf": {
+ "InSameTerritory": true
+ }
+ }
+ },
+ {
+ "DataId": 1051710,
+ "Position": {
+ "X": 822.629,
+ "Y": 17.102613,
+ "Z": -263.20288
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051746,
+ "Position": {
+ "X": 824.6128,
+ "Y": 13.979889,
+ "Z": -227.16113
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051710,
+ "Position": {
+ "X": 822.629,
+ "Y": 17.102613,
+ "Z": -263.20288
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/QuestPaths/7.x - Dawntrail/Seasonal Events/Starlight Celebration (2024)/5227_Reach for the Stalls.json b/QuestPaths/7.x - Dawntrail/Seasonal Events/Starlight Celebration (2024)/5227_Reach for the Stalls.json
new file mode 100644
index 00000000..2243eb08
--- /dev/null
+++ b/QuestPaths/7.x - Dawntrail/Seasonal Events/Starlight Celebration (2024)/5227_Reach for the Stalls.json
@@ -0,0 +1,153 @@
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+ "Author": "Starr",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051801,
+ "Position": {
+ "X": -49.485046,
+ "Y": 6.499997,
+ "Z": -90.348694
+ },
+ "TerritoryId": 133,
+ "InteractionType": "AcceptQuest",
+ "AetheryteShortcut": "Gridania",
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Mih Khetto's Amphitheatre"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051808,
+ "Position": {
+ "X": -53.60504,
+ "Y": 5.772882,
+ "Z": -99.931335
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_FESXMX001_05227_SYSTEM_000_025",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1051803,
+ "Position": {
+ "X": 33.951294,
+ "Y": -0.36796698,
+ "Z": 24.185547
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1051816,
+ "Position": {
+ "X": 18.142944,
+ "Y": 0.0028544795,
+ "Z": -0.289917
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 1052469,
+ "Position": {
+ "X": -15.640564,
+ "Y": 0.0026466753,
+ "Z": 18.142944
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1051813,
+ "Position": {
+ "X": -5.1118164,
+ "Y": 1.21852545E-05,
+ "Z": -31.99823
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051804,
+ "Position": {
+ "X": -3.4943848,
+ "Y": 0.0028544795,
+ "Z": -18.417664
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051819,
+ "Position": {
+ "X": -1.6937866,
+ "Y": 0.0028544795,
+ "Z": -21.042236
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "CompleteQuest",
+ "NextQuestId": 5228
+ }
+ ]
+ }
+ ]
+}
diff --git a/QuestPaths/7.x - Dawntrail/Seasonal Events/Starlight Celebration (2024)/5228_Spreading the Warmth and Cheer.json b/QuestPaths/7.x - Dawntrail/Seasonal Events/Starlight Celebration (2024)/5228_Spreading the Warmth and Cheer.json
new file mode 100644
index 00000000..0b3bed7f
--- /dev/null
+++ b/QuestPaths/7.x - Dawntrail/Seasonal Events/Starlight Celebration (2024)/5228_Spreading the Warmth and Cheer.json
@@ -0,0 +1,206 @@
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+ "Author": "Starr",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051819,
+ "Position": {
+ "X": -1.6937866,
+ "Y": 0.0028544795,
+ "Z": -21.042236
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051822,
+ "Position": {
+ "X": 61.478516,
+ "Y": -7.7123985,
+ "Z": 98.98523
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1051807,
+ "Position": {
+ "X": -53.635498,
+ "Y": 5.793307,
+ "Z": -99.931335
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 1247,
+ "AetheryteShortcut": "Gridania",
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Mih Khetto's Amphitheatre"
+ ],
+ "SkipConditions": {
+ "AetheryteShortcutIf": {
+ "InSameTerritory": true,
+ "InTerritory": [
+ 132
+ ]
+ }
+ }
+ },
+ {
+ "DataId": 1051823,
+ "Position": {
+ "X": 34.164917,
+ "Y": -0.37309912,
+ "Z": 23.605652
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1051833,
+ "Position": {
+ "X": 35.568726,
+ "Y": -0.24490167,
+ "Z": 21.560913
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051816,
+ "Position": {
+ "X": 18.142944,
+ "Y": 0.0028544795,
+ "Z": -0.289917
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1051809,
+ "Position": {
+ "X": -15.823608,
+ "Y": 0.0028544795,
+ "Z": 9.84198
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 1051813,
+ "Position": {
+ "X": -5.1118164,
+ "Y": 1.21852545E-05,
+ "Z": -31.99823
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "DataId": 1051825,
+ "Position": {
+ "X": -1.7853394,
+ "Y": 2.0028546,
+ "Z": -86.38135
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 6,
+ "Steps": [
+ {
+ "DataId": 2014535,
+ "Position": {
+ "X": 67.88733,
+ "Y": -0.77819824,
+ "Z": 51.224487
+ },
+ "TerritoryId": 1247,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 133
+ },
+ {
+ "DataId": 1051802,
+ "Position": {
+ "X": -50.06488,
+ "Y": 6.499999,
+ "Z": -89.58569
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051805,
+ "Position": {
+ "X": 33.401978,
+ "Y": -0.31104973,
+ "Z": 22.079773
+ },
+ "TerritoryId": 1253,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/Questionable.sln b/Questionable.sln
index df898789..5046322f 100644
--- a/Questionable.sln
+++ b/Questionable.sln
@@ -15,11 +15,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Questionable.Model", "Quest
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuestPathGenerator.Tests", "QuestPathGenerator.Tests\QuestPathGenerator.Tests.csproj", "{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GatheringPaths", "GatheringPaths\GatheringPaths.csproj", "{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GatheringPaths", "GatheringPaths\GatheringPaths.csproj", "{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GatheringPathRenderer", "GatheringPathRenderer\GatheringPathRenderer.csproj", "{F514DA95-9867-4F3F-8062-ACE0C62E8740}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GatheringPathRenderer", "GatheringPathRenderer\GatheringPathRenderer.csproj", "{F514DA95-9867-4F3F-8062-ACE0C62E8740}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ECommons", "vendor\ECommons\ECommons\ECommons.csproj", "{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ECommons", "vendor\ECommons\ECommons\ECommons.csproj", "{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BBFFC6EA-15B1-48FC-B4D3-D9491278C27F}"
ProjectSection(SolutionItems) = preProject
@@ -28,7 +28,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vendor", "vendor", "{8F5EC9D5-4CE7-433B-BB3A-782500E84DDB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationMasterAPI", "vendor\NotificationMasterAPI\NotificationMasterAPI\NotificationMasterAPI.csproj", "{9BD494ED-22F2-487B-BCE1-435399A8720E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationMasterAPI", "vendor\NotificationMasterAPI\NotificationMasterAPI\NotificationMasterAPI.csproj", "{9BD494ED-22F2-487B-BCE1-435399A8720E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -36,6 +36,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.ActiveCfg = Debug|x64
+ {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.Build.0 = Debug|x64
+ {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.ActiveCfg = Release|x64
+ {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.Build.0 = Release|x64
+ {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Debug|x64.ActiveCfg = Debug|x64
+ {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Debug|x64.Build.0 = Debug|x64
+ {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Release|x64.ActiveCfg = Release|x64
+ {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Release|x64.Build.0 = Release|x64
{7A136F28-8D5C-478D-B993-0F39F1451A47}.Debug|x64.ActiveCfg = Debug|x64
{7A136F28-8D5C-478D-B993-0F39F1451A47}.Debug|x64.Build.0 = Debug|x64
{7A136F28-8D5C-478D-B993-0F39F1451A47}.Release|x64.ActiveCfg = Release|x64
@@ -52,22 +60,14 @@ Global
{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Debug|x64.Build.0 = Debug|x64
{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Release|x64.ActiveCfg = Release|x64
{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Release|x64.Build.0 = Release|x64
- {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Debug|x64.ActiveCfg = Debug|x64
- {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Debug|x64.Build.0 = Debug|x64
- {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Release|x64.ActiveCfg = Release|x64
- {EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Release|x64.Build.0 = Release|x64
- {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.ActiveCfg = Debug|x64
- {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.Build.0 = Debug|x64
- {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.ActiveCfg = Release|x64
- {C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.Build.0 = Release|x64
- {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.ActiveCfg = Debug|Any CPU
- {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.Build.0 = Debug|Any CPU
- {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.ActiveCfg = Release|Any CPU
- {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.Build.0 = Release|Any CPU
- {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.ActiveCfg = Debug|Any CPU
- {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.Build.0 = Debug|Any CPU
- {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.ActiveCfg = Release|Any CPU
- {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.Build.0 = Release|Any CPU
+ {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.ActiveCfg = Debug|x64
+ {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.Build.0 = Debug|x64
+ {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.ActiveCfg = Release|x64
+ {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.Build.0 = Release|x64
+ {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.ActiveCfg = Debug|x64
+ {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.Build.0 = Debug|x64
+ {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.ActiveCfg = Release|x64
+ {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.Build.0 = Release|x64
{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Debug|x64.ActiveCfg = Debug|x64
{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Debug|x64.Build.0 = Debug|x64
{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Release|x64.ActiveCfg = Release|x64
diff --git a/Questionable/Windows/JournalComponents/AlliedSocietyJournalComponent.cs b/Questionable/Windows/JournalComponents/AlliedSocietyJournalComponent.cs
index 92cc96b7..c7e50602 100644
--- a/Questionable/Windows/JournalComponents/AlliedSocietyJournalComponent.cs
+++ b/Questionable/Windows/JournalComponents/AlliedSocietyJournalComponent.cs
@@ -57,16 +57,28 @@ internal sealed class AlliedSocietyJournalComponent
if (quests.Count == 0)
continue;
- bool containsNewQuests = quests.Any(x => !_questFunctions.IsQuestComplete(x.QuestId));
- if (containsNewQuests)
- ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow);
+ string label = $"{alliedSociety}###AlliedSociety{(int)alliedSociety}";
+#if DEBUG
+ bool isOpen;
+ if (quests.Any(x => !_questRegistry.IsKnownQuest(x.QuestId)))
+ {
+ using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange))
+ isOpen = ImGui.CollapsingHeader(label);
+ }
+ else if (quests.Any(x => !_questFunctions.IsQuestComplete(x.QuestId)))
+ {
+ using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow))
+ isOpen = ImGui.CollapsingHeader(label);
+ }
+ else
+ isOpen = ImGui.CollapsingHeader(label);
+#else
+ bool isOpen = ImGui.CollapsingHeader(label);
+#endif
- if (!ImGui.CollapsingHeader($"{alliedSociety}###AlliedSociety{(int)alliedSociety}"))
+ if (!isOpen)
continue;
- if (containsNewQuests)
- ImGui.PopStyleColor();
-
if (alliedSociety <= EAlliedSociety.Ixal)
{
for (byte i = 1; i <= 8; ++i)
diff --git a/Questionable/Windows/OneTimeSetupWindow.cs b/Questionable/Windows/OneTimeSetupWindow.cs
index f1c71552..b94b3fc8 100644
--- a/Questionable/Windows/OneTimeSetupWindow.cs
+++ b/Questionable/Windows/OneTimeSetupWindow.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
@@ -19,6 +20,7 @@ internal sealed class OneTimeSetupWindow : LWindow
private static readonly IReadOnlyList RequiredPlugins =
[
new("vnavmesh",
+ "vnavmesh",
"""
vnavmesh handles the navigation within a zone, moving
your character to the next quest-related objective.
@@ -26,12 +28,14 @@ internal sealed class OneTimeSetupWindow : LWindow
new Uri("https://github.com/awgil/ffxiv_navmesh/"),
new Uri("https://puni.sh/api/repository/veyn")),
new("Lifestream",
+ "Lifestream",
"""
Used to travel to aethernet shards in cities.
""",
new Uri("https://github.com/NightmareXIV/Lifestream"),
new Uri("https://github.com/NightmareXIV/MyDalamudPlugins/raw/main/pluginmaster.json")),
new("TextAdvance",
+ "TextAdvance",
"""
Automatically accepts and turns in quests, skips cutscenes
and dialogue.
@@ -45,23 +49,22 @@ internal sealed class OneTimeSetupWindow : LWindow
private readonly Configuration _configuration;
private readonly IDalamudPluginInterface _pluginInterface;
private readonly UiUtils _uiUtils;
- private readonly DalamudReflector _dalamudReflector;
private readonly ILogger _logger;
public OneTimeSetupWindow(Configuration configuration, IDalamudPluginInterface pluginInterface, UiUtils uiUtils,
- DalamudReflector dalamudReflector, ILogger logger, AutomatonIpc automatonIpc)
+ ILogger logger, AutomatonIpc automatonIpc)
: base("Questionable Setup###QuestionableOneTimeSetup",
ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings, true)
{
_configuration = configuration;
_pluginInterface = pluginInterface;
_uiUtils = uiUtils;
- _dalamudReflector = dalamudReflector;
_logger = logger;
_recommendedPlugins =
[
new("Rotation Solver Reborn",
+ "RotationSolver",
"""
Automatically handles most combat interactions you encounter
during quests, including being interrupted by mobs.
@@ -69,7 +72,8 @@ internal sealed class OneTimeSetupWindow : LWindow
new Uri("https://github.com/FFXIV-CombatReborn/RotationSolverReborn"),
new Uri(
"https://raw.githubusercontent.com/FFXIV-CombatReborn/CombatRebornRepo/main/pluginmaster.json")),
- new PluginInfo("Automaton",
+ new PluginInfo("CBT (formerly known as Automaton)",
+ "Automaton",
"""
Automaton is a collection of automation-related tweaks.
The 'Sniper no sniping' tweak can complete snipe tasks automatically.
@@ -78,6 +82,7 @@ internal sealed class OneTimeSetupWindow : LWindow
new Uri("https://puni.sh/api/repository/croizat"),
[new PluginDetailInfo("'Sniper no sniping' enabled", () => automatonIpc.IsAutoSnipeEnabled)]),
new("NotificationMaster",
+ "NotificationMaster",
"""
Sends a configurable out-of-game notification if a quest
requires manual actions.
@@ -159,7 +164,7 @@ internal sealed class OneTimeSetupWindow : LWindow
private bool DrawPlugin(PluginInfo plugin, float checklistPadding)
{
- bool isInstalled = IsPluginInstalled(plugin.DisplayName);
+ bool isInstalled = IsPluginInstalled(plugin);
using (ImRaii.PushId("plugin_" + plugin.DisplayName))
{
_uiUtils.ChecklistItem(plugin.DisplayName, isInstalled);
@@ -194,13 +199,14 @@ internal sealed class OneTimeSetupWindow : LWindow
return isInstalled;
}
- private bool IsPluginInstalled(string internalName)
+ private bool IsPluginInstalled(PluginInfo pluginInfo)
{
- return _dalamudReflector.TryGetDalamudPlugin(internalName, out _, suppressErrors: true, ignoreCache: true);
+ return _pluginInterface.InstalledPlugins.Any(x => x.InternalName == pluginInfo.InternalName && x.IsLoaded);
}
private sealed record PluginInfo(
string DisplayName,
+ string InternalName,
string Details,
Uri WebsiteUri,
Uri? DalamudRepositoryUri,
diff --git a/Questionable/Windows/QuestComponents/EventInfoComponent.cs b/Questionable/Windows/QuestComponents/EventInfoComponent.cs
index d85e1f70..9325efa2 100644
--- a/Questionable/Windows/QuestComponents/EventInfoComponent.cs
+++ b/Questionable/Windows/QuestComponents/EventInfoComponent.cs
@@ -22,6 +22,7 @@ internal sealed class EventInfoComponent
[SuppressMessage("ReSharper", "CollectionNeverUpdated.Local")]
private readonly List _eventQuests =
[
+ new("Starlight Celebration", [new(5227), new(5228)], AtDailyReset(new(2024, 12, 31))),
];
private readonly QuestData _questData;