diff --git a/Dalamud/Game/UnlockState/UnlockState.cs b/Dalamud/Game/UnlockState/UnlockState.cs
index 939548803..a5f53ed5e 100644
--- a/Dalamud/Game/UnlockState/UnlockState.cs
+++ b/Dalamud/Game/UnlockState/UnlockState.cs
@@ -376,6 +376,15 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
return UIState.IsPublicContentUnlocked(row.RowId);
}
+ ///
+ public bool IsQuestCompleted(Quest row)
+ {
+ if (!this.IsLoaded)
+ return false;
+
+ return QuestManager.IsQuestComplete(row.RowId);
+ }
+
///
public bool IsRecipeUnlocked(Recipe row)
{
@@ -536,6 +545,9 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
if (rowRef.TryGetValue(out var publicContentRow))
return this.IsPublicContentUnlocked(publicContentRow);
+ if (rowRef.TryGetValue(out var questRow))
+ return this.IsQuestCompleted(questRow);
+
if (rowRef.TryGetValue(out var recipeRow))
return this.IsRecipeUnlocked(recipeRow);
@@ -629,6 +641,7 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
this.UpdateUnlocksForSheet();
this.UpdateUnlocksForSheet();
this.UpdateUnlocksForSheet();
+ this.UpdateUnlocksForSheet();
this.UpdateUnlocksForSheet();
this.UpdateUnlocksForSheet();
this.UpdateUnlocksForSheet();
@@ -822,6 +835,9 @@ internal class UnlockStatePluginScoped : IInternalDisposableService, IUnlockStat
///
public bool IsPublicContentUnlocked(PublicContentSheet row) => this.unlockStateService.IsPublicContentUnlocked(row);
+ ///
+ public bool IsQuestCompleted(Quest row) => this.unlockStateService.IsQuestCompleted(row);
+
///
public bool IsRecipeUnlocked(Recipe row) => this.unlockStateService.IsRecipeUnlocked(row);
diff --git a/Dalamud/Plugin/Services/IUnlockState.cs b/Dalamud/Plugin/Services/IUnlockState.cs
index 6703ece2e..6fcae5d35 100644
--- a/Dalamud/Plugin/Services/IUnlockState.cs
+++ b/Dalamud/Plugin/Services/IUnlockState.cs
@@ -268,6 +268,13 @@ public interface IUnlockState : IDalamudService
/// if unlocked; otherwise, .
bool IsPublicContentUnlocked(PublicContent row);
+ ///
+ /// Determines whether the specified Quest is completed.
+ ///
+ /// The Quest row to check.
+ /// if completed; otherwise, .
+ bool IsQuestCompleted(Quest row);
+
///
/// Determines whether the specified Recipe is unlocked.
///