1
0
Fork 0
forked from aly/qstbak
qstbak/Questionable/Questionable.Validation.Validators/GameSequenceCoverageValidator.cs
2026-08-17 20:29:32 +10:00

43 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Dalamud.Plugin.Services;
using Questionable.Data;
using Questionable.Model;
using Questionable.Model.Questing;
namespace Questionable.Validation.Validators;
internal sealed class GameSequenceCoverageValidator : IQuestValidator
{
private readonly IDataManager _dataManager;
public GameSequenceCoverageValidator(IDataManager dataManager)
{
_dataManager = dataManager;
}
public IEnumerable<ValidationIssue> Validate(Quest quest)
{
if (!(quest.Id is QuestId questId))
{
yield break;
}
HashSet<int> authored = ((IEnumerable<QuestSequence>)quest.Root.QuestSequence).Select((Func<QuestSequence, int>)((QuestSequence x) => x.Sequence)).ToHashSet();
IEnumerable<int> enumerable = from seq in GameQuestSequences.GetCompletionSequences(_dataManager, questId)
where !authored.Contains(seq)
select seq;
foreach (int item in enumerable)
{
yield return new ValidationIssue
{
PathType = EPathType.Quest,
Id = quest.Id.ToString(),
Location = SchemaValidationHelper.FormatQuestLocation((byte)item, null),
Type = EIssueType.MissingPostInstanceSequence,
Severity = EIssueSeverity.Warning,
Description = $"The game uses sequence {item}, but the quest path doesn't define it. Add an empty " + "placeholder sequence (or steps, if the sequence requires player action)."
};
}
}
}