punish v6.8.18.0
This commit is contained in:
commit
e786325cda
322 changed files with 554232 additions and 0 deletions
|
@ -0,0 +1,101 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Questionable.Model;
|
||||
using Questionable.Model.Questing;
|
||||
|
||||
namespace Questionable.Validation.Validators;
|
||||
|
||||
internal sealed class BasicSequenceValidator : IQuestValidator
|
||||
{
|
||||
public IEnumerable<ValidationIssue> Validate(Quest quest)
|
||||
{
|
||||
List<QuestSequence> sequences = quest.Root.QuestSequence;
|
||||
QuestSequence foundStart = sequences.FirstOrDefault((QuestSequence x) => x.Sequence == 0);
|
||||
if (foundStart == null)
|
||||
{
|
||||
yield return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = 0,
|
||||
Step = null,
|
||||
Type = EIssueType.MissingSequence0,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "Missing quest start"
|
||||
};
|
||||
}
|
||||
else if (quest.Info is QuestInfo { CompletesInstantly: not false })
|
||||
{
|
||||
foreach (QuestSequence item in sequences)
|
||||
{
|
||||
if (item != foundStart)
|
||||
{
|
||||
yield return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = item.Sequence,
|
||||
Step = null,
|
||||
Type = EIssueType.InstantQuestWithMultipleSteps,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "Instant quest should not have any sequences after the start"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(quest.Info is QuestInfo))
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
int maxSequence = (from x in sequences
|
||||
select x.Sequence into x
|
||||
where x != byte.MaxValue
|
||||
select x).Max();
|
||||
int i;
|
||||
for (i = 0; i < maxSequence; i++)
|
||||
{
|
||||
List<QuestSequence> foundSequences = sequences.Where((QuestSequence x) => x.Sequence == i).ToList();
|
||||
ValidationIssue validationIssue = ValidateSequences(quest, i, foundSequences);
|
||||
if (validationIssue != null)
|
||||
{
|
||||
yield return validationIssue;
|
||||
}
|
||||
}
|
||||
List<QuestSequence> foundSequences2 = sequences.Where((QuestSequence x) => x.Sequence == byte.MaxValue).ToList();
|
||||
ValidationIssue validationIssue2 = ValidateSequences(quest, 255, foundSequences2);
|
||||
if (validationIssue2 != null)
|
||||
{
|
||||
yield return validationIssue2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static ValidationIssue? ValidateSequences(Quest quest, int sequenceNo, List<QuestSequence> foundSequences)
|
||||
{
|
||||
if (foundSequences.Count == 0)
|
||||
{
|
||||
return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = (byte)sequenceNo,
|
||||
Step = null,
|
||||
Type = EIssueType.MissingSequence,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "Missing sequence"
|
||||
};
|
||||
}
|
||||
if (foundSequences.Count == 2)
|
||||
{
|
||||
return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = (byte)sequenceNo,
|
||||
Step = null,
|
||||
Type = EIssueType.DuplicateSequence,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "Duplicate sequence"
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue