QuestSequence? sequence = quest.FindSequence(parsedSequence);
if (sequence != null)
{
- sequenceId = (byte)sequence.Sequence;
+ sequenceId = sequence.Sequence;
if (arguments.Length >= 3 && int.TryParse(arguments[2], out int parsedStep))
{
QuestStep? step = sequence.FindStep(parsedStep);
private unsafe List<SlotInfo> ReadSlots(AddonGathering* addonGathering)
{
- var atkValues = addonGathering->AtkValues;
List<SlotInfo> slots = new List<SlotInfo>();
for (int i = 0; i < 8; ++i)
{
foreach (var itemToGather in step.ItemsToGather)
{
- yield return new DelayedGatheringTask(itemToGather, quest, (byte)sequence.Sequence);
+ yield return new DelayedGatheringTask(itemToGather, quest, sequence.Sequence);
}
}
}
using Dalamud.Plugin.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-using Questionable.Controller.Steps.Common;
using Questionable.Controller.Steps.Interactions;
using Questionable.Controller.Steps.Shared;
using Questionable.Data;
public bool TeleportAetheryte(EAetheryteLocation aetheryteLocation)
=> TeleportAetheryte((uint)aetheryteLocation);
+ public bool IsFreeAetheryte(EAetheryteLocation aetheryteLocation)
+ {
+ var playerState = PlayerState.Instance();
+ return playerState != null &&
+ (playerState->FreeAetheryteId == (uint)aetheryteLocation ||
+ playerState->FreeAetherytePlayStationPlus == (uint)aetheryteLocation);
+ }
+
public AetheryteRegistrationResult CanRegisterFreeOrFavoriteAetheryte(EAetheryteLocation aetheryteLocation)
{
if (_clientState.LocalPlayer == null)
// if we have a free or favored aetheryte assigned to this location, we don't override it (and don't upgrade
// favored to free, either).
- if (playerState->FreeAetheryteId == (uint)aetheryteLocation ||
- playerState->FreeAetherytePlayStationPlus == (uint)aetheryteLocation)
+ if (IsFreeAetheryte(aetheryteLocation))
return AetheryteRegistrationResult.NotPossible;
bool freeFavoredSlotsAvailable = false;
private int EstimateTeleportCosts(Quest quest)
{
- Dictionary<EAetheryteLocation, float> cheapTeleports = _aetheryteList.Where(x => x.IsFavourite || x.GilCost == 0)
+ // TODO (probably in 7.4): clientstructs' aetheryte list has an 'IsFreeAetheryte' field, dalamud doesn't
+ Dictionary<EAetheryteLocation, float> cheapTeleports = _aetheryteList.Where(x => x.IsFavourite || _aetheryteFunctions.IsFreeAetheryte((EAetheryteLocation)x.AetheryteId))
.ToDictionary(x => (EAetheryteLocation)x.AetheryteId, x =>
{
- if (x.GilCost == 0)
+ if (_aetheryteFunctions.IsFreeAetheryte((EAetheryteLocation)x.AetheryteId))
return 0;
else
return 0.5f;
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)sequence.Sequence,
+ Sequence = sequence.Sequence,
Step = null,
Type = EIssueType.InstantQuestWithMultipleSteps,
Severity = EIssueSeverity.Error,
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)sequence.Sequence,
+ Sequence = sequence.Sequence,
Step = i,
Type = EIssueType.DuplicateCompletionFlags,
Severity = EIssueSeverity.Error,
return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)sequence.Sequence,
+ Sequence = sequence.Sequence,
Step = stepId,
Type = EIssueType.InvalidExcelRef,
Severity = EIssueSeverity.Error,
return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)sequence.Sequence,
+ Sequence = sequence.Sequence,
Step = stepId,
Type = EIssueType.InvalidExcelRef,
Severity = EIssueSeverity.Error,
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)invalidNextQuest.Sequence.Sequence,
+ Sequence = invalidNextQuest.Sequence.Sequence,
Step = invalidNextQuest.StepId,
Type = EIssueType.InvalidNextQuestId,
Severity = EIssueSeverity.Error,
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)data.Sequence.Sequence,
+ Sequence = data.Sequence.Sequence,
Step = data.StepId,
Type = EIssueType.InvalidChatMessage,
Severity = EIssueSeverity.Error,
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)singlePlayerInstance.Sequence.Sequence,
+ Sequence = singlePlayerInstance.Sequence.Sequence,
Step = singlePlayerInstance.StepId,
Type = EIssueType.DuplicateSinglePlayerInstance,
Severity = EIssueSeverity.Error,
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)accept.Sequence.Sequence,
+ Sequence = accept.Sequence.Sequence,
Step = accept.StepId,
Type = EIssueType.UnexpectedAcceptQuestStep,
Severity = EIssueSeverity.Error,
yield return new ValidationIssue
{
ElementId = quest.Id,
- Sequence = (byte)complete.Sequence.Sequence,
+ Sequence = complete.Sequence.Sequence,
Step = complete.StepId,
Type = EIssueType.UnexpectedCompleteQuestStep,
Severity = EIssueSeverity.Error,
byte oldSequence = simulatedQuest.Sequence;
byte newSequence = simulatedQuest.Quest.Root.QuestSequence
- .Select(x => (byte)x.Sequence)
+ .Select(x => x.Sequence)
.LastOrDefault(x => x < oldSequence, byte.MinValue);
_questController.SimulatedQuest.SetSequence(newSequence);
byte oldSequence = simulatedQuest.Sequence;
byte newSequence = simulatedQuest.Quest.Root.QuestSequence
- .Select(x => (byte)x.Sequence)
+ .Select(x => x.Sequence)
.FirstOrDefault(x => x > oldSequence, byte.MaxValue);
simulatedQuest.SetSequence(newSequence);