forked from aly/qstbak
36 lines
1.4 KiB
C#
36 lines
1.4 KiB
C#
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<Factory> logger) : ITaskFactory
|
|
{
|
|
public IEnumerable<ITask> 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<VendorPurchaseTask.PurchaseItem>(new VendorPurchaseTask.PurchaseItem(step.ItemId.Value, quantity)), vendor.Value.DialogOptionIndex);
|
|
}
|
|
}
|
|
}
|