Add support for Occult Record items

This commit is contained in:
Haselnussbomber 2025-10-18 02:32:43 +02:00
parent 68c02caf37
commit 6e8efabc3b
No known key found for this signature in database
GPG key ID: BB905BB49E7295D1
3 changed files with 111 additions and 88 deletions

View file

@ -1,76 +0,0 @@
using Lumina.Excel.Sheets;
namespace Dalamud.Game;
/// <summary>
/// Enum for <see cref="ItemAction.Type"/>.
/// </summary>
public enum ItemActionType : ushort
{
/// <summary>
/// Used to unlock a companion (minion).
/// </summary>
Companion = 853,
/// <summary>
/// Used to unlock a chocobo companion barding.
/// </summary>
BuddyEquip = 1013,
/// <summary>
/// Used to unlock a mount.
/// </summary>
Mount = 1322,
/// <summary>
/// Used to unlock recipes from a crafting recipe book.
/// </summary>
SecretRecipeBook = 2136,
/// <summary>
/// Used to unlock various types of content (e.g. Riding Maps, Blue Mage Totems, Emotes, Hairstyles).
/// </summary>
UnlockLink = 2633,
/// <summary>
/// Used to unlock a Triple Triad Card.
/// </summary>
TripleTriadCard = 3357,
/// <summary>
/// Used to unlock gathering nodes of a Folklore Tome.
/// </summary>
FolkloreTome = 4107,
/// <summary>
/// Used to unlock an Orchestrion Roll.
/// </summary>
OrchestrionRoll = 25183,
/// <summary>
/// Used to unlock portrait designs.
/// </summary>
FramersKit = 29459,
/// <summary>
/// Used to unlock Bozjan Field Notes. These are server-side but are cached client-side.
/// </summary>
FieldNotes = 19743,
/// <summary>
/// Used to unlock an Ornament (fashion accessory).
/// </summary>
Ornament = 20086,
/// <summary>
/// Used to unlock glasses.
/// </summary>
Glasses = 37312,
/// <summary>
/// Used for Company Seal Vouchers, which convert the item into Company Seals when used.<br/>
/// Can be used only if in a Grand Company.<br/>
/// IsUnlocked always returns false.
/// </summary>
CompanySealVouchers = 41120,
}

View file

@ -0,0 +1,97 @@
using Lumina.Excel.Sheets;
namespace Dalamud.Game.UnlockState;
// TODO: Switch to FFXIVClientStructs.FFXIV.Client.Enums.ItemActionType.
/// <summary>
/// Enum for <see cref="ItemAction.Type"/>.
/// </summary>
internal enum ItemActionType : ushort
{
/// <summary>
/// No item action.
/// </summary>
None = 0,
/// <summary>
/// Unlocks a companion (minion).
/// </summary>
Companion = 853,
/// <summary>
/// Unlocks a chocobo companion barding.
/// </summary>
BuddyEquip = 1013,
/// <summary>
/// Unlocks a mount.
/// </summary>
Mount = 1322,
/// <summary>
/// Unlocks recipes from a crafting recipe book.
/// </summary>
SecretRecipeBook = 2136,
/// <summary>
/// Unlocks various types of content (e.g. Riding Maps, Blue Mage Totems, Emotes, Hairstyles).
/// </summary>
UnlockLink = 2633,
/// <summary>
/// Unlocks a Triple Triad Card.
/// </summary>
TripleTriadCard = 3357,
/// <summary>
/// Unlocks gathering nodes of a Folklore Tome.
/// </summary>
FolkloreTome = 4107,
/// <summary>
/// Unlocks an Orchestrion Roll.
/// </summary>
OrchestrionRoll = 25183,
/// <summary>
/// Unlocks portrait designs.
/// </summary>
FramersKit = 29459,
/// <summary>
/// Unlocks Bozjan Field Notes.
/// </summary>
/// <remarks> These are server-side but are cached client-side. </remarks>
FieldNotes = 19743,
/// <summary>
/// Unlocks an Ornament (fashion accessory).
/// </summary>
Ornament = 20086,
/// <summary>
/// Unlocks Glasses.
/// </summary>
Glasses = 37312,
/// <summary>
/// Company Seal Vouchers, which convert the item into Company Seals when used.
/// </summary>
CompanySealVouchers = 41120,
/// <summary>
/// Unlocks Occult Records in Occult Crescent.
/// </summary>
OccultRecords = 43141,
/// <summary>
/// Unlocks Phantom Jobs in Occult Crescent.
/// </summary>
SoulShards = 43142,
/// <summary>
/// Star Contributor Certificate, which grants the Star Contributor status in Cosmic Exploration.
/// </summary>
StarContributorCertificate = 45189,
}

View file

@ -263,6 +263,7 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
return PlayerState.Instance()->IsSecretRecipeBookUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.UnlockLink:
case ItemActionType.OccultRecords:
return UIState.Instance()->IsUnlockLinkUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.TripleTriadCard when row.AdditionalData.Is<TripleTriadCard>():
@ -387,18 +388,19 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
if (row.ItemAction.RowId == 0)
return false;
return (ItemActionType)row.ItemAction.Value.Type is
ItemActionType.Companion or
ItemActionType.BuddyEquip or
ItemActionType.Mount or
ItemActionType.SecretRecipeBook or
ItemActionType.UnlockLink or
ItemActionType.TripleTriadCard or
ItemActionType.FolkloreTome or
ItemActionType.OrchestrionRoll or
ItemActionType.FramersKit or
ItemActionType.Ornament or
ItemActionType.Glasses;
return (ItemActionType)row.ItemAction.Value.Type
is ItemActionType.Companion
or ItemActionType.BuddyEquip
or ItemActionType.Mount
or ItemActionType.SecretRecipeBook
or ItemActionType.UnlockLink
or ItemActionType.TripleTriadCard
or ItemActionType.FolkloreTome
or ItemActionType.OrchestrionRoll
or ItemActionType.FramersKit
or ItemActionType.Ornament
or ItemActionType.Glasses
or ItemActionType.OccultRecords;
}
/// <inheritdoc/>