qstbak/Questionable/Questionable.Model/ItemReward.cs
2026-08-17 20:29:32 +10:00

64 lines
2.1 KiB
C#

using System;
using LLib.Inventory;
using Lumina.Excel.Sheets;
using Questionable.Model.Questing;
namespace Questionable.Model;
public abstract record ItemReward(ItemRewardDetails Item)
{
public uint ItemId => Item.ItemId;
public string Name => Item.Name;
public ElementId ElementId => Item.ElementId;
public TimeSpan CastTime => Item.CastTime;
public bool IsUntradable => Item.IsUntradable;
public abstract EItemRewardType Type { get; }
internal static ItemReward? CreateFromItem(Item item, ElementId elementId)
{
uint? num = item.ItemAction.ValueNullable?.Action.RowId;
if (num.HasValue && num == 1322)
{
return new MountReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]);
}
num = item.ItemAction.ValueNullable?.Action.RowId;
if (num.HasValue && num == 853)
{
return new MinionReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]);
}
Orchestrion? valueOrDefault = item.AdditionalData.GetValueOrDefault<Orchestrion>();
if (valueOrDefault.HasValue)
{
Orchestrion valueOrDefault2 = valueOrDefault.GetValueOrDefault();
return new OrchestrionRollReward(new ItemRewardDetails(item, elementId), valueOrDefault2.RowId);
}
TripleTriadCard? valueOrDefault3 = item.AdditionalData.GetValueOrDefault<TripleTriadCard>();
if (valueOrDefault3.HasValue)
{
TripleTriadCard valueOrDefault4 = valueOrDefault3.GetValueOrDefault();
return new TripleTriadCardReward(new ItemRewardDetails(item, elementId), (ushort)valueOrDefault4.RowId);
}
num = item.ItemAction.ValueNullable?.Action.RowId;
if (num.HasValue && num == 20086)
{
return new FashionAccessoryReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]);
}
num = item.ItemAction.ValueNullable?.Action.RowId;
if (num.HasValue && num == 2633)
{
return new UnlockLinkReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]);
}
if (CofferHelper.IsGearCoffer(item))
{
return new CofferReward(new ItemRewardDetails(item, elementId));
}
return null;
}
public abstract bool IsUnlocked();
}