52 lines
1.7 KiB
C#
52 lines
1.7 KiB
C#
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<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?.Type;
|
|
if (num.HasValue && num == 20086)
|
|
{
|
|
return new FashionAccessoryReward(new ItemRewardDetails(item, elementId), item.ItemAction.Value.Data[0]);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public abstract bool IsUnlocked();
|
|
}
|