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

44 lines
1.2 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
{
ElementId = quest.Id,
Sequence = item.Item1.Sequence,
Step = item.Item2,
Type = EIssueType.InvalidChatMessage,
Severity = EIssueSeverity.Error,
Description = $"Invalid chat message: {rawDialogueText.Value}"
};
}
}
}
}
}