qstbak/Questionable/Questionable.Validation.Validators/UniqueSinglePlayerInstanceValidator.cs
2025-10-09 07:47:19 +10:00

32 lines
1.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Questionable.Model;
using Questionable.Model.Questing;
namespace Questionable.Validation.Validators;
internal sealed class UniqueSinglePlayerInstanceValidator : IQuestValidator
{
public IEnumerable<ValidationIssue> Validate(Quest quest)
{
List<(QuestSequence, int, byte)> list = (from x in quest.AllSteps()
where x.Step.InteractionType == EInteractionType.SinglePlayerDuty
select (Sequence: x.Sequence, StepId: x.StepId, SinglePlayerDutyIndex: x.Step.SinglePlayerDutyIndex)).ToList();
if (list.DistinctBy<(QuestSequence, int, byte), byte>(((QuestSequence Sequence, int StepId, byte SinglePlayerDutyIndex) x) => x.SinglePlayerDutyIndex).Count() >= list.Count)
{
yield break;
}
foreach (var item in list)
{
yield return new ValidationIssue
{
ElementId = quest.Id,
Sequence = item.Item1.Sequence,
Step = item.Item2,
Type = EIssueType.DuplicateSinglePlayerInstance,
Severity = EIssueSeverity.Error,
Description = $"Duplicate singleplayer duty index: {item.Item3}"
};
}
}
}