try
{
- LoadFromDirectory(new DirectoryInfo(Path.Combine(_pluginInterface.ConfigDirectory.FullName, "Quests")));
+ LoadFromDirectory(new DirectoryInfo(Path.Combine(_pluginInterface.ConfigDirectory.FullName, "Quests")),
+ Quest.ESource.UserDirectory);
}
catch (Exception e)
{
Id = questId,
Root = questRoot,
Info = questInfo,
- ReadOnly = true,
+ Source = Quest.ESource.Assembly,
};
_quests[quest.Id] = quest;
}
foreach (var expansionFolder in ExpansionData.ExpansionFolders.Values)
LoadFromDirectory(
new DirectoryInfo(Path.Combine(pathProjectDirectory.FullName, expansionFolder)),
+ Quest.ESource.ProjectDirectory,
LogLevel.Trace);
}
catch (Exception e)
private void ValidateQuests()
{
- _questValidator.Validate(_quests.Values.Where(x => !x.ReadOnly));
+ _questValidator.Validate(_quests.Values.Where(x => x.Source != Quest.ESource.Assembly));
}
- private void LoadQuestFromStream(string fileName, Stream stream)
+ private void LoadQuestFromStream(string fileName, Stream stream, Quest.ESource source)
{
_logger.LogTrace("Loading quest from '{FileName}'", fileName);
ElementId? questId = ExtractQuestIdFromName(fileName);
Id = questId,
Root = questRoot,
Info = questInfo,
- ReadOnly = false,
+ Source = source,
};
_quests[quest.Id] = quest;
}
- private void LoadFromDirectory(DirectoryInfo directory, LogLevel logLevel = LogLevel.Information)
+ private void LoadFromDirectory(DirectoryInfo directory, Quest.ESource source,
+ LogLevel logLevel = LogLevel.Information)
{
if (!directory.Exists)
{
try
{
using FileStream stream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read);
- LoadQuestFromStream(fileInfo.Name, stream);
+ LoadQuestFromStream(fileInfo.Name, stream, source);
}
catch (Exception e)
{
}
foreach (DirectoryInfo childDirectory in directory.GetDirectories())
- LoadFromDirectory(childDirectory, logLevel);
+ LoadFromDirectory(childDirectory, source, logLevel);
}
private static ElementId? ExtractQuestIdFromName(string resourceName)
public required ElementId Id { get; init; }
public required QuestRoot Root { get; init; }
public required IQuestInfo Info { get; init; }
- public required bool ReadOnly { get; init; }
+ public required ESource Source { get; init; }
public QuestSequence? FindSequence(byte currentSequence)
=> Root.QuestSequence.SingleOrDefault(seq => seq.Sequence == currentSequence);
}
}
}
+
+ public enum ESource
+ {
+ Assembly,
+ ProjectDirectory,
+ UserDirectory,
+ }
}
var startedQuest = _questController.StartedQuest;
if (startedQuest != null)
{
+ if (startedQuest.Quest.Source == Quest.ESource.UserDirectory)
+ {
+ ImGui.PushFont(UiBuilder.IconFont);
+ ImGui.TextColored(ImGuiColors.DalamudOrange, FontAwesomeIcon.FilePen.ToIconString());
+ ImGui.PopFont();
+ ImGui.SameLine(0);
+
+ if (ImGui.IsItemHovered())
+ ImGui.SetTooltip("This quest is loaded from your 'pluginConfigs\\Questionable\\Quests' directory.\nThis gets loaded even if Questionable ships with a newer/different version of the quest.");
+ }
+
ImGui.TextUnformatted(
$"Quest: {Shorten(startedQuest.Quest.Info.Name)} / {startedQuest.Sequence} / {startedQuest.Step}");