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

44 lines
1.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Lumina.Text.ReadOnly;
using Questionable.Functions;
using Questionable.Model;
using Questionable.Model.Questing;
namespace Questionable.Validation.Validators;
internal sealed class SayValidator : IQuestValidator
{
private readonly ExcelFunctions _excelFunctions;
public SayValidator(ExcelFunctions excelFunctions)
{
_excelFunctions = excelFunctions;
}
public IEnumerable<ValidationIssue> Validate(Quest quest)
{
foreach (var item in from x in quest.AllSteps()
where x.Step.InteractionType == EInteractionType.Say
select x)
{
ChatMessage chatMessage = item.Item3.ChatMessage;
if (chatMessage != null)
{
ReadOnlySeString? rawDialogueText = _excelFunctions.GetRawDialogueText(quest, chatMessage.ExcelSheet, chatMessage.Key);
if (rawDialogueText.HasValue && rawDialogueText.Value.PayloadCount != 1)
{
yield return new ValidationIssue
{
PathType = EPathType.Quest,
Id = quest.Id.ToString(),
Location = SchemaValidationHelper.FormatQuestLocation(item.Item1.Sequence, item.Item2),
Type = EIssueType.InvalidChatMessage,
Severity = EIssueSeverity.Error,
Description = $"Invalid chat message: {rawDialogueText.Value}"
};
}
}
}
}
}