using System.Collections.Generic; using Microsoft.Extensions.Logging; using Questionable.Controller.CustomDelivery; using Questionable.Controller.Steps.Common; using Questionable.Model; using Questionable.Model.Questing; using Questionable.Navigation; namespace Questionable.Controller.Steps.Interactions; internal static class AutoVendorPurchase { internal sealed class Factory(VendorResolverService vendorResolver, SmartNavRouteEnqueuer routeEnqueuer, ILogger logger) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { if (step.InteractionType != EInteractionType.PurchaseItem || step.DataId.HasValue || !step.ItemId.HasValue) { yield break; } VendorResolverService.VendorInfo? vendor = vendorResolver.ResolveVendor(step.ItemId.Value); if (!vendor.HasValue) { logger.LogWarning("No vendor with a known location sells item {ItemId}; cannot auto-purchase", step.ItemId); yield break; } int quantity = step.ItemCount ?? 1; foreach (ITask item in routeEnqueuer.BuildRoutedTasks(vendor.Value.TerritoryId, vendor.Value.Position)) { yield return item; } yield return new Mount.UnmountTask(); yield return new VendorPurchaseTask(vendor.Value.VendorNpcId, new global::_003C_003Ez__ReadOnlySingleElementList(new VendorPurchaseTask.PurchaseItem(step.ItemId.Value, quantity)), vendor.Value.DialogOptionIndex); } } }