This commit is contained in:
pot0to 2024-12-16 14:39:20 -08:00
commit aad5019356
8 changed files with 480 additions and 35 deletions

View File

@ -1,5 +1,5 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<Version>4.6</Version> <Version>4.8</Version>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -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"
}
]
}
]
}

View File

@ -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
}
]
}
]
}

View File

@ -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"
}
]
}
]
}

View File

@ -15,11 +15,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Questionable.Model", "Quest
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuestPathGenerator.Tests", "QuestPathGenerator.Tests\QuestPathGenerator.Tests.csproj", "{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuestPathGenerator.Tests", "QuestPathGenerator.Tests\QuestPathGenerator.Tests.csproj", "{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}"
EndProject 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 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 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 EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BBFFC6EA-15B1-48FC-B4D3-D9491278C27F}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BBFFC6EA-15B1-48FC-B4D3-D9491278C27F}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
@ -28,7 +28,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vendor", "vendor", "{8F5EC9D5-4CE7-433B-BB3A-782500E84DDB}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vendor", "vendor", "{8F5EC9D5-4CE7-433B-BB3A-782500E84DDB}"
EndProject 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -36,6 +36,14 @@ Global
Release|x64 = Release|x64 Release|x64 = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution 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.ActiveCfg = Debug|x64
{7A136F28-8D5C-478D-B993-0F39F1451A47}.Debug|x64.Build.0 = Debug|x64 {7A136F28-8D5C-478D-B993-0F39F1451A47}.Debug|x64.Build.0 = Debug|x64
{7A136F28-8D5C-478D-B993-0F39F1451A47}.Release|x64.ActiveCfg = Release|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}.Debug|x64.Build.0 = Debug|x64
{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Release|x64.ActiveCfg = Release|x64 {4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Release|x64.ActiveCfg = Release|x64
{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Release|x64.Build.0 = Release|x64 {4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}.Release|x64.Build.0 = Release|x64
{EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Debug|x64.ActiveCfg = Debug|x64 {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.ActiveCfg = Debug|x64
{EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Debug|x64.Build.0 = Debug|x64 {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.Build.0 = Debug|x64
{EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Release|x64.ActiveCfg = Release|x64 {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.ActiveCfg = Release|x64
{EEDE3BBE-E260-445E-8FB3-1264E0CBBE91}.Release|x64.Build.0 = Release|x64 {8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.Build.0 = Release|x64
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.ActiveCfg = Debug|x64 {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.ActiveCfg = Debug|x64
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.Build.0 = Debug|x64 {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.Build.0 = Debug|x64
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.ActiveCfg = Release|x64 {F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.ActiveCfg = Release|x64
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.Build.0 = Release|x64 {F514DA95-9867-4F3F-8062-ACE0C62E8740}.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
{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Debug|x64.ActiveCfg = Debug|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}.Debug|x64.Build.0 = Debug|x64
{A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Release|x64.ActiveCfg = Release|x64 {A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Release|x64.ActiveCfg = Release|x64

View File

@ -57,16 +57,28 @@ internal sealed class AlliedSocietyJournalComponent
if (quests.Count == 0) if (quests.Count == 0)
continue; continue;
bool containsNewQuests = quests.Any(x => !_questFunctions.IsQuestComplete(x.QuestId)); string label = $"{alliedSociety}###AlliedSociety{(int)alliedSociety}";
if (containsNewQuests) #if DEBUG
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow); 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; continue;
if (containsNewQuests)
ImGui.PopStyleColor();
if (alliedSociety <= EAlliedSociety.Ixal) if (alliedSociety <= EAlliedSociety.Ixal)
{ {
for (byte i = 1; i <= 8; ++i) for (byte i = 1; i <= 8; ++i)

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using Dalamud.Interface; using Dalamud.Interface;
using Dalamud.Interface.Colors; using Dalamud.Interface.Colors;
using Dalamud.Interface.Components; using Dalamud.Interface.Components;
@ -19,6 +20,7 @@ internal sealed class OneTimeSetupWindow : LWindow
private static readonly IReadOnlyList<PluginInfo> RequiredPlugins = private static readonly IReadOnlyList<PluginInfo> RequiredPlugins =
[ [
new("vnavmesh", new("vnavmesh",
"vnavmesh",
""" """
vnavmesh handles the navigation within a zone, moving vnavmesh handles the navigation within a zone, moving
your character to the next quest-related objective. 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://github.com/awgil/ffxiv_navmesh/"),
new Uri("https://puni.sh/api/repository/veyn")), new Uri("https://puni.sh/api/repository/veyn")),
new("Lifestream", new("Lifestream",
"Lifestream",
""" """
Used to travel to aethernet shards in cities. Used to travel to aethernet shards in cities.
""", """,
new Uri("https://github.com/NightmareXIV/Lifestream"), new Uri("https://github.com/NightmareXIV/Lifestream"),
new Uri("https://github.com/NightmareXIV/MyDalamudPlugins/raw/main/pluginmaster.json")), new Uri("https://github.com/NightmareXIV/MyDalamudPlugins/raw/main/pluginmaster.json")),
new("TextAdvance", new("TextAdvance",
"TextAdvance",
""" """
Automatically accepts and turns in quests, skips cutscenes Automatically accepts and turns in quests, skips cutscenes
and dialogue. and dialogue.
@ -45,23 +49,22 @@ internal sealed class OneTimeSetupWindow : LWindow
private readonly Configuration _configuration; private readonly Configuration _configuration;
private readonly IDalamudPluginInterface _pluginInterface; private readonly IDalamudPluginInterface _pluginInterface;
private readonly UiUtils _uiUtils; private readonly UiUtils _uiUtils;
private readonly DalamudReflector _dalamudReflector;
private readonly ILogger<OneTimeSetupWindow> _logger; private readonly ILogger<OneTimeSetupWindow> _logger;
public OneTimeSetupWindow(Configuration configuration, IDalamudPluginInterface pluginInterface, UiUtils uiUtils, public OneTimeSetupWindow(Configuration configuration, IDalamudPluginInterface pluginInterface, UiUtils uiUtils,
DalamudReflector dalamudReflector, ILogger<OneTimeSetupWindow> logger, AutomatonIpc automatonIpc) ILogger<OneTimeSetupWindow> logger, AutomatonIpc automatonIpc)
: base("Questionable Setup###QuestionableOneTimeSetup", : base("Questionable Setup###QuestionableOneTimeSetup",
ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings, true) ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings, true)
{ {
_configuration = configuration; _configuration = configuration;
_pluginInterface = pluginInterface; _pluginInterface = pluginInterface;
_uiUtils = uiUtils; _uiUtils = uiUtils;
_dalamudReflector = dalamudReflector;
_logger = logger; _logger = logger;
_recommendedPlugins = _recommendedPlugins =
[ [
new("Rotation Solver Reborn", new("Rotation Solver Reborn",
"RotationSolver",
""" """
Automatically handles most combat interactions you encounter Automatically handles most combat interactions you encounter
during quests, including being interrupted by mobs. 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://github.com/FFXIV-CombatReborn/RotationSolverReborn"),
new Uri( new Uri(
"https://raw.githubusercontent.com/FFXIV-CombatReborn/CombatRebornRepo/main/pluginmaster.json")), "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. Automaton is a collection of automation-related tweaks.
The 'Sniper no sniping' tweak can complete snipe tasks automatically. 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 Uri("https://puni.sh/api/repository/croizat"),
[new PluginDetailInfo("'Sniper no sniping' enabled", () => automatonIpc.IsAutoSnipeEnabled)]), [new PluginDetailInfo("'Sniper no sniping' enabled", () => automatonIpc.IsAutoSnipeEnabled)]),
new("NotificationMaster", new("NotificationMaster",
"NotificationMaster",
""" """
Sends a configurable out-of-game notification if a quest Sends a configurable out-of-game notification if a quest
requires manual actions. requires manual actions.
@ -159,7 +164,7 @@ internal sealed class OneTimeSetupWindow : LWindow
private bool DrawPlugin(PluginInfo plugin, float checklistPadding) private bool DrawPlugin(PluginInfo plugin, float checklistPadding)
{ {
bool isInstalled = IsPluginInstalled(plugin.DisplayName); bool isInstalled = IsPluginInstalled(plugin);
using (ImRaii.PushId("plugin_" + plugin.DisplayName)) using (ImRaii.PushId("plugin_" + plugin.DisplayName))
{ {
_uiUtils.ChecklistItem(plugin.DisplayName, isInstalled); _uiUtils.ChecklistItem(plugin.DisplayName, isInstalled);
@ -194,13 +199,14 @@ internal sealed class OneTimeSetupWindow : LWindow
return isInstalled; 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( private sealed record PluginInfo(
string DisplayName, string DisplayName,
string InternalName,
string Details, string Details,
Uri WebsiteUri, Uri WebsiteUri,
Uri? DalamudRepositoryUri, Uri? DalamudRepositoryUri,

View File

@ -22,6 +22,7 @@ internal sealed class EventInfoComponent
[SuppressMessage("ReSharper", "CollectionNeverUpdated.Local")] [SuppressMessage("ReSharper", "CollectionNeverUpdated.Local")]
private readonly List<EventQuest> _eventQuests = private readonly List<EventQuest> _eventQuests =
[ [
new("Starlight Celebration", [new(5227), new(5228)], AtDailyReset(new(2024, 12, 31))),
]; ];
private readonly QuestData _questData; private readonly QuestData _questData;