using System.Collections.Generic; using LLib.GameData; using Questionable.Data; using Questionable.Model; using Questionable.Model.Questing; namespace Questionable.Validation.Validators; internal sealed class ClassQuestShouldHaveShortcutValidator : IQuestValidator { private readonly HashSet _classJobQuests = new HashSet(); public ClassQuestShouldHaveShortcutValidator(QuestData questData) { foreach (EClassJob enumValue in typeof(EClassJob).GetEnumValues()) { if (enumValue == EClassJob.Adventurer) { continue; } foreach (QuestInfo classJobQuest in questData.GetClassJobQuests(enumValue)) { if (classJobQuest.Level > 1) { _classJobQuests.Add(classJobQuest.QuestId); } } } } public IEnumerable Validate(Quest quest) { if (_classJobQuests.Contains(quest.Id)) { QuestStep questStep = quest.FindSequence(0)?.FindStep(0); if (questStep != null && !questStep.IsTeleportableForPriorityQuests()) { yield return new ValidationIssue { ElementId = quest.Id, Sequence = 0, Step = 0, Type = EIssueType.ClassQuestWithoutAetheryteShortcut, Severity = EIssueSeverity.Error, Description = "Class quest should have an aetheryte shortcut to be done automatically" }; } } } }