using System; 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 abstract EItemRewardType Type { get; } internal static ItemReward? CreateFromItem(Item item, ElementId elementId) { ushort? num = item.ItemAction.ValueNullable?.Type; if (num.HasValue && num == 1322) { return new MountReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]); } num = item.ItemAction.ValueNullable?.Type; if (num.HasValue && num == 853) { return new MinionReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]); } Orchestrion? valueOrDefault = item.AdditionalData.GetValueOrDefault(); if (valueOrDefault.HasValue) { Orchestrion valueOrDefault2 = valueOrDefault.GetValueOrDefault(); return new OrchestrionRollReward(new ItemRewardDetails(item, elementId), valueOrDefault2.RowId); } TripleTriadCard? valueOrDefault3 = item.AdditionalData.GetValueOrDefault(); if (valueOrDefault3.HasValue) { TripleTriadCard valueOrDefault4 = valueOrDefault3.GetValueOrDefault(); return new TripleTriadCardReward(new ItemRewardDetails(item, elementId), (ushort)valueOrDefault4.RowId); } num = item.ItemAction.ValueNullable?.Type; if (num.HasValue && num == 20086) { return new FashionAccessoryReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]); } return null; } public abstract bool IsUnlocked(); }