punish v6.8.18.0
This commit is contained in:
commit
cfb4dea47e
316 changed files with 554088 additions and 0 deletions
|
@ -0,0 +1,99 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using Questionable.Model;
|
||||
using Questionable.Model.Questing;
|
||||
|
||||
namespace Questionable.Validation.Validators;
|
||||
|
||||
internal sealed class UniqueStartStopValidator : IQuestValidator
|
||||
{
|
||||
public IEnumerable<ValidationIssue> Validate(Quest quest)
|
||||
{
|
||||
ElementId id = quest.Id;
|
||||
if ((id is SatisfactionSupplyNpcId || id is AlliedSocietyDailyId) ? true : false)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
int num = 1;
|
||||
List<EInteractionType> list = new List<EInteractionType>(num);
|
||||
CollectionsMarshal.SetCount(list, num);
|
||||
Span<EInteractionType> span = CollectionsMarshal.AsSpan(list);
|
||||
int index = 0;
|
||||
span[index] = EInteractionType.AcceptQuest;
|
||||
List<(QuestSequence Sequence, int StepId, QuestStep Step)> questAccepts = (from x in FindQuestStepsWithInteractionType(quest, list)
|
||||
where x.Step.PickUpQuestId == null
|
||||
select x).ToList();
|
||||
foreach (var item in questAccepts)
|
||||
{
|
||||
if (item.Sequence.Sequence != 0 || item.StepId != quest.FindSequence(0).Steps.Count - 1)
|
||||
{
|
||||
yield return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = item.Sequence.Sequence,
|
||||
Step = item.StepId,
|
||||
Type = EIssueType.UnexpectedAcceptQuestStep,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "Unexpected AcceptQuest step"
|
||||
};
|
||||
}
|
||||
}
|
||||
if (quest.FindSequence(0) != null && questAccepts.Count == 0)
|
||||
{
|
||||
yield return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = 0,
|
||||
Step = null,
|
||||
Type = EIssueType.MissingQuestAccept,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "No AcceptQuest step"
|
||||
};
|
||||
}
|
||||
index = 1;
|
||||
List<EInteractionType> list2 = new List<EInteractionType>(index);
|
||||
CollectionsMarshal.SetCount(list2, index);
|
||||
span = CollectionsMarshal.AsSpan(list2);
|
||||
num = 0;
|
||||
span[num] = EInteractionType.CompleteQuest;
|
||||
List<(QuestSequence Sequence, int StepId, QuestStep Step)> questCompletes = (from x in FindQuestStepsWithInteractionType(quest, list2)
|
||||
where x.Step.TurnInQuestId == null
|
||||
select x).ToList();
|
||||
foreach (var item2 in questCompletes)
|
||||
{
|
||||
if (item2.Sequence.Sequence != byte.MaxValue || item2.StepId != quest.FindSequence(byte.MaxValue).Steps.Count - 1)
|
||||
{
|
||||
yield return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = item2.Sequence.Sequence,
|
||||
Step = item2.StepId,
|
||||
Type = EIssueType.UnexpectedCompleteQuestStep,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "Unexpected CompleteQuest step"
|
||||
};
|
||||
}
|
||||
}
|
||||
if (quest.FindSequence(byte.MaxValue) != null && questCompletes.Count == 0)
|
||||
{
|
||||
yield return new ValidationIssue
|
||||
{
|
||||
ElementId = quest.Id,
|
||||
Sequence = (byte)byte.MaxValue,
|
||||
Step = null,
|
||||
Type = EIssueType.MissingQuestComplete,
|
||||
Severity = EIssueSeverity.Error,
|
||||
Description = "No CompleteQuest step"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<(QuestSequence Sequence, int StepId, QuestStep Step)> FindQuestStepsWithInteractionType(Quest quest, List<EInteractionType> interactionType)
|
||||
{
|
||||
return from x in quest.AllSteps()
|
||||
where interactionType.Contains(x.Step.InteractionType)
|
||||
select x;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue