punish v6.8.18.0
This commit is contained in:
commit
e786325cda
322 changed files with 554232 additions and 0 deletions
|
@ -0,0 +1,80 @@
|
|||
using System.Collections.Generic;
|
||||
using Questionable.Functions;
|
||||
using Questionable.Model;
|
||||
using Questionable.Model.Questing;
|
||||
|
||||
namespace Questionable.Validation.Validators;
|
||||
|
||||
internal sealed class DialogueChoiceValidator : IQuestValidator
|
||||
{
|
||||
private readonly ExcelFunctions _excelFunctions;
|
||||
|
||||
public DialogueChoiceValidator(ExcelFunctions excelFunctions)
|
||||
{
|
||||
_excelFunctions = excelFunctions;
|
||||
}
|
||||
|
||||
public IEnumerable<ValidationIssue> Validate(Quest quest)
|
||||
{
|
||||
foreach (var x in quest.AllSteps())
|
||||
{
|
||||
if (x.Step.DialogueChoices.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
foreach (DialogueChoice dialogueChoice in x.Step.DialogueChoices)
|
||||
{
|
||||
ExcelRef prompt = dialogueChoice.Prompt;
|
||||
if (prompt != null)
|
||||
{
|
||||
ValidationIssue validationIssue = Validate(quest, x.Sequence, x.StepId, dialogueChoice.ExcelSheet, prompt, "Prompt");
|
||||
if (validationIssue != null)
|
||||
{
|
||||
yield return validationIssue;
|
||||
}
|
||||
}
|
||||
ExcelRef answer = dialogueChoice.Answer;
|
||||
if (answer != null)
|
||||
{
|
||||
ValidationIssue validationIssue2 = Validate(quest, x.Sequence, x.StepId, dialogueChoice.ExcelSheet, answer, "Answer");
|
||||
if (validationIssue2 != null)
|
||||
{
|
||||
yield return validationIssue2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ValidationIssue? Validate(Quest quest, QuestSequence sequence, int stepId, string? excelSheet, ExcelRef excelRef, string label)
|
||||
{
|
||||
if (excelRef.Type == ExcelRef.EType.Key)
|
||||
{
|
||||
if (!_excelFunctions.GetRawDialogueText(quest, excelSheet, excelRef.AsKey()).HasValue)
|
||||
{
|
||||
return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = sequence.Sequence,
|
||||
Step = stepId,
|
||||
Type = EIssueType.InvalidExcelRef,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = $"{label} invalid: {excelSheet} → {excelRef.AsKey()}"
|
||||
};
|
||||
}
|
||||
}
|
||||
else if (excelRef.Type == ExcelRef.EType.RowId && !_excelFunctions.GetRawDialogueTextByRowId(excelSheet, excelRef.AsRowId()).HasValue)
|
||||
{
|
||||
return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = sequence.Sequence,
|
||||
Step = stepId,
|
||||
Type = EIssueType.InvalidExcelRef,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = $"{label} invalid: {excelSheet} → {excelRef.AsRowId()}"
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue