Merge pull request #2508 from Haselnussbomber/excel-bump

Update Lumina and Lumina.Excel
This commit is contained in:
goat 2025-12-18 01:23:18 +01:00 committed by GitHub
commit 355ad64eb9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 43 additions and 87 deletions

View file

@ -3,9 +3,9 @@ using Lumina.Excel.Sheets;
namespace Dalamud.Game.UnlockState; namespace Dalamud.Game.UnlockState;
/// <summary> /// <summary>
/// Enum for <see cref="ItemAction.Type"/>. /// Enum for <see cref="ItemAction.Action"/>.
/// </summary> /// </summary>
internal enum ItemActionType : ushort internal enum ItemActionAction : ushort
{ {
/// <summary> /// <summary>
/// No item action. /// No item action.

View file

@ -158,67 +158,23 @@ internal unsafe class RecipeData : IInternalDisposableService
{ {
noteBookDivisionIndex++; noteBookDivisionIndex++;
// For future Lumina.Excel update, replace with: if (!noteBookDivisionRow.AllowedCraftTypes[craftType])
// if (!notebookDivisionRow.AllowedCraftTypes[craftType]) continue;
// continue;
switch (craftTypeRow.RowId)
{
case 0 when !noteBookDivisionRow.CRPCraft: continue;
case 1 when !noteBookDivisionRow.BSMCraft: continue;
case 2 when !noteBookDivisionRow.ARMCraft: continue;
case 3 when !noteBookDivisionRow.GSMCraft: continue;
case 4 when !noteBookDivisionRow.LTWCraft: continue;
case 5 when !noteBookDivisionRow.WVRCraft: continue;
case 6 when !noteBookDivisionRow.ALCCraft: continue;
case 7 when !noteBookDivisionRow.CULCraft: continue;
}
if (noteBookDivisionRow.GatheringOpeningLevel != byte.MaxValue) if (noteBookDivisionRow.GatheringOpeningLevel != byte.MaxValue)
continue; continue;
// For future Lumina.Excel update, replace with: if (noteBookDivisionRow.RequiresSecretRecipeBookGroupUnlock)
// if (notebookDivisionRow.RequiresSecretRecipeBookGroupUnlock)
if (noteBookDivisionRow.Unknown1)
{ {
var secretRecipeBookUnlocked = false; var secretRecipeBookUnlocked = false;
// For future Lumina.Excel update, iterate over notebookDivisionRow.SecretRecipeBookGroups foreach (var secretRecipeBookGroup in noteBookDivisionRow.SecretRecipeBookGroups)
for (var i = 0; i < 2; i++)
{ {
// For future Lumina.Excel update, replace with: if (secretRecipeBookGroup.RowId == 0 || !secretRecipeBookGroup.IsValid)
// if (secretRecipeBookGroup.RowId == 0 || !secretRecipeBookGroup.IsValid)
// continue;
var secretRecipeBookGroupRowId = i switch
{
0 => noteBookDivisionRow.Unknown2,
1 => noteBookDivisionRow.Unknown2,
_ => default,
};
if (secretRecipeBookGroupRowId == 0)
continue; continue;
if (!this.dataManager.GetExcelSheet<SecretRecipeBookGroup>().TryGetRow(secretRecipeBookGroupRowId, out var secretRecipeBookGroupRow)) var bitIndex = secretRecipeBookGroup.Value.SecretRecipeBook[craftType].RowId;
continue; if (PlayerState.Instance()->UnlockedSecretRecipeBooksBitArray.Get((int)bitIndex))
// For future Lumina.Excel update, replace with:
// var bitIndex = secretRecipeBookGroup.Value.UnlockBitIndex[craftType];
var bitIndex = craftType switch
{
0 => secretRecipeBookGroupRow.Unknown0,
1 => secretRecipeBookGroupRow.Unknown1,
2 => secretRecipeBookGroupRow.Unknown2,
3 => secretRecipeBookGroupRow.Unknown3,
4 => secretRecipeBookGroupRow.Unknown4,
5 => secretRecipeBookGroupRow.Unknown5,
6 => secretRecipeBookGroupRow.Unknown6,
7 => secretRecipeBookGroupRow.Unknown7,
_ => default,
};
if (PlayerState.Instance()->UnlockedSecretRecipeBooksBitArray.Get(bitIndex))
{ {
secretRecipeBookUnlocked = true; secretRecipeBookUnlocked = true;
break; break;

View file

@ -209,7 +209,7 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
/// <inheritdoc/> /// <inheritdoc/>
public bool IsEmjVoiceNpcUnlocked(EmjVoiceNpc row) public bool IsEmjVoiceNpcUnlocked(EmjVoiceNpc row)
{ {
return this.IsUnlockLinkUnlocked(row.Unknown26); return this.IsUnlockLinkUnlocked(row.UnlockLink);
} }
/// <inheritdoc/> /// <inheritdoc/>
@ -217,7 +217,7 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
{ {
return this.dataManager.GetExcelSheet<EmjVoiceNpc>().TryGetRow(row.RowId, out var emjVoiceNpcRow) return this.dataManager.GetExcelSheet<EmjVoiceNpc>().TryGetRow(row.RowId, out var emjVoiceNpcRow)
&& this.IsEmjVoiceNpcUnlocked(emjVoiceNpcRow) && this.IsEmjVoiceNpcUnlocked(emjVoiceNpcRow)
&& QuestManager.IsQuestComplete(row.Unknown1); && QuestManager.IsQuestComplete(row.UnlockQuest.RowId);
} }
/// <inheritdoc/> /// <inheritdoc/>
@ -264,47 +264,47 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
// To avoid the ExdModule.GetItemRowById call, which can return null if the excel page // To avoid the ExdModule.GetItemRowById call, which can return null if the excel page
// is not loaded, we're going to imitate the IsItemActionUnlocked call first: // is not loaded, we're going to imitate the IsItemActionUnlocked call first:
switch ((ItemActionType)row.ItemAction.Value.Type) switch ((ItemActionAction)row.ItemAction.Value.Action.RowId)
{ {
case ItemActionType.Companion: case ItemActionAction.Companion:
return UIState.Instance()->IsCompanionUnlocked(row.ItemAction.Value.Data[0]); return UIState.Instance()->IsCompanionUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.BuddyEquip: case ItemActionAction.BuddyEquip:
return UIState.Instance()->Buddy.CompanionInfo.IsBuddyEquipUnlocked(row.ItemAction.Value.Data[0]); return UIState.Instance()->Buddy.CompanionInfo.IsBuddyEquipUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.Mount: case ItemActionAction.Mount:
return PlayerState.Instance()->IsMountUnlocked(row.ItemAction.Value.Data[0]); return PlayerState.Instance()->IsMountUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.SecretRecipeBook: case ItemActionAction.SecretRecipeBook:
return PlayerState.Instance()->IsSecretRecipeBookUnlocked(row.ItemAction.Value.Data[0]); return PlayerState.Instance()->IsSecretRecipeBookUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.UnlockLink: case ItemActionAction.UnlockLink:
case ItemActionType.OccultRecords: case ItemActionAction.OccultRecords:
return UIState.Instance()->IsUnlockLinkUnlocked(row.ItemAction.Value.Data[0]); return UIState.Instance()->IsUnlockLinkUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.TripleTriadCard when row.AdditionalData.Is<TripleTriadCard>(): case ItemActionAction.TripleTriadCard when row.AdditionalData.Is<TripleTriadCard>():
return UIState.Instance()->IsTripleTriadCardUnlocked((ushort)row.AdditionalData.RowId); return UIState.Instance()->IsTripleTriadCardUnlocked((ushort)row.AdditionalData.RowId);
case ItemActionType.FolkloreTome: case ItemActionAction.FolkloreTome:
return PlayerState.Instance()->IsFolkloreBookUnlocked(row.ItemAction.Value.Data[0]); return PlayerState.Instance()->IsFolkloreBookUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.OrchestrionRoll when row.AdditionalData.Is<Orchestrion>(): case ItemActionAction.OrchestrionRoll when row.AdditionalData.Is<Orchestrion>():
return PlayerState.Instance()->IsOrchestrionRollUnlocked(row.AdditionalData.RowId); return PlayerState.Instance()->IsOrchestrionRollUnlocked(row.AdditionalData.RowId);
case ItemActionType.FramersKit: case ItemActionAction.FramersKit:
return PlayerState.Instance()->IsFramersKitUnlocked(row.AdditionalData.RowId); return PlayerState.Instance()->IsFramersKitUnlocked(row.AdditionalData.RowId);
case ItemActionType.Ornament: case ItemActionAction.Ornament:
return PlayerState.Instance()->IsOrnamentUnlocked(row.ItemAction.Value.Data[0]); return PlayerState.Instance()->IsOrnamentUnlocked(row.ItemAction.Value.Data[0]);
case ItemActionType.Glasses: case ItemActionAction.Glasses:
return PlayerState.Instance()->IsGlassesUnlocked((ushort)row.AdditionalData.RowId); return PlayerState.Instance()->IsGlassesUnlocked((ushort)row.AdditionalData.RowId);
case ItemActionType.SoulShards when PublicContentOccultCrescent.GetState() is var occultCrescentState && occultCrescentState != null: case ItemActionAction.SoulShards when PublicContentOccultCrescent.GetState() is var occultCrescentState && occultCrescentState != null:
var supportJobId = (byte)row.ItemAction.Value.Data[0]; var supportJobId = (byte)row.ItemAction.Value.Data[0];
return supportJobId < occultCrescentState->SupportJobLevels.Length && occultCrescentState->SupportJobLevels[supportJobId] != 0; return supportJobId < occultCrescentState->SupportJobLevels.Length && occultCrescentState->SupportJobLevels[supportJobId] != 0;
case ItemActionType.CompanySealVouchers: case ItemActionAction.CompanySealVouchers:
return false; return false;
} }
@ -327,7 +327,7 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
/// <inheritdoc/> /// <inheritdoc/>
public bool IsMKDLoreUnlocked(MKDLore row) public bool IsMKDLoreUnlocked(MKDLore row)
{ {
return this.IsUnlockLinkUnlocked(row.Unknown2); return this.IsUnlockLinkUnlocked(row.UnlockLink);
} }
/// <inheritdoc/> /// <inheritdoc/>
@ -414,20 +414,20 @@ internal unsafe class UnlockState : IInternalDisposableService, IUnlockState
if (row.ItemAction.RowId == 0) if (row.ItemAction.RowId == 0)
return false; return false;
return (ItemActionType)row.ItemAction.Value.Type return (ItemActionAction)row.ItemAction.Value.Action.RowId
is ItemActionType.Companion is ItemActionAction.Companion
or ItemActionType.BuddyEquip or ItemActionAction.BuddyEquip
or ItemActionType.Mount or ItemActionAction.Mount
or ItemActionType.SecretRecipeBook or ItemActionAction.SecretRecipeBook
or ItemActionType.UnlockLink or ItemActionAction.UnlockLink
or ItemActionType.TripleTriadCard or ItemActionAction.TripleTriadCard
or ItemActionType.FolkloreTome or ItemActionAction.FolkloreTome
or ItemActionType.OrchestrionRoll or ItemActionAction.OrchestrionRoll
or ItemActionType.FramersKit or ItemActionAction.FramersKit
or ItemActionType.Ornament or ItemActionAction.Ornament
or ItemActionType.Glasses or ItemActionAction.Glasses
or ItemActionType.OccultRecords or ItemActionAction.OccultRecords
or ItemActionType.SoulShards; or ItemActionAction.SoulShards;
} }
/// <inheritdoc/> /// <inheritdoc/>

View file

@ -15,7 +15,7 @@
<PackageVersion Include="CheapLoc" Version="1.1.8" /> <PackageVersion Include="CheapLoc" Version="1.1.8" />
<PackageVersion Include="MinSharp" Version="1.0.4" /> <PackageVersion Include="MinSharp" Version="1.0.4" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" /> <PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<PackageVersion Include="Lumina" Version="6.5.1" /> <PackageVersion Include="Lumina" Version="7.1.0" />
<PackageVersion Include="Microsoft.Extensions.ObjectPool" Version="10.0.0" /> <PackageVersion Include="Microsoft.Extensions.ObjectPool" Version="10.0.0" />
<PackageVersion Include="System.Reactive" Version="6.1.0" /> <PackageVersion Include="System.Reactive" Version="6.1.0" />
<PackageVersion Include="System.Reflection.MetadataLoadContext" Version="10.0.0" /> <PackageVersion Include="System.Reflection.MetadataLoadContext" Version="10.0.0" />

@ -1 +1 @@
Subproject commit 5d01489c34f33a3d645f49085d7fc0065a1ac801 Subproject commit 4650ad332dd22aeff0d1f7ac33845b1c2aca4f8d