fix: update for 6.0 changes

This commit is contained in:
Anna 2021-12-06 17:30:58 -05:00
parent 61fffed0df
commit 6444e4375a
4 changed files with 34 additions and 18 deletions

View File

@ -24,9 +24,10 @@ namespace GoodMemory {
Miscellaneous = 2_633, // riding maps, blu totems, emotes/dances, hairstyles Miscellaneous = 2_633, // riding maps, blu totems, emotes/dances, hairstyles
Cards = 3_357, // cards Cards = 3_357, // cards
GathererBooks = 4_107, // gatherer books GathererBooks = 4_107, // gatherer books
OrchestrionRolls = 5_845, // orchestrion rolls OrchestrionRolls = 25_183, // orchestrion rolls
// these appear to be server-side // these appear to be server-side
// FieldNotes = 19_743, // bozjan field notes // FieldNotes = 19_743, // bozjan field notes
FashionAccessories = 20_086, // fashion accessories FashionAccessories = 20_086, // fashion accessories
// missing: 2_894 (always false)
} }
} }

View File

@ -6,7 +6,7 @@ namespace GoodMemory {
public class GameFunctions { public class GameFunctions {
private Plugin Plugin { get; } private Plugin Plugin { get; }
private delegate byte HasItemActionUnlockedDelegate(long itemActionId); private delegate byte HasItemActionUnlockedDelegate(IntPtr mem);
private readonly HasItemActionUnlockedDelegate _hasItemActionUnlocked; private readonly HasItemActionUnlockedDelegate _hasItemActionUnlocked;
@ -19,9 +19,9 @@ namespace GoodMemory {
public GameFunctions(Plugin plugin) { public GameFunctions(Plugin plugin) {
this.Plugin = plugin; this.Plugin = plugin;
var hasIaUnlockedPtr = this.Plugin.SigScanner.ScanText("48 83 EC 28 E8 ?? ?? ?? ?? 48 85 C0 0F 84 ?? ?? ?? ??"); var hasIaUnlockedPtr = this.Plugin.SigScanner.ScanText("E8 ?? ?? ?? ?? 84 C0 75 A9");
var hasCardPtr = this.Plugin.SigScanner.ScanText("40 53 48 83 EC 20 48 8B D9 66 85 D2 74 ??"); var hasCardPtr = this.Plugin.SigScanner.ScanText("40 53 48 83 EC 20 48 8B D9 66 85 D2 74");
this._cardStaticAddr = this.Plugin.SigScanner.GetStaticAddressFromSig("41 0F B7 17 48 8D 0D ?? ?? ?? ??"); this._cardStaticAddr = this.Plugin.SigScanner.GetStaticAddressFromSig("41 0F B7 17 48 8D 0D");
if (hasIaUnlockedPtr == IntPtr.Zero || hasCardPtr == IntPtr.Zero || this._cardStaticAddr == IntPtr.Zero) { if (hasIaUnlockedPtr == IntPtr.Zero || hasCardPtr == IntPtr.Zero || this._cardStaticAddr == IntPtr.Zero) {
throw new ApplicationException("Could not get pointers for game functions"); throw new ApplicationException("Could not get pointers for game functions");
@ -41,7 +41,7 @@ namespace GoodMemory {
var type = (ActionType) action.Type; var type = (ActionType) action.Type;
if (type != ActionType.Cards) { if (type != ActionType.Cards) {
return this.HasItemActionUnlocked(action.RowId); return this.HasItemActionUnlocked(item);
} }
var cardId = item.AdditionalData; var cardId = item.AdditionalData;
@ -49,8 +49,26 @@ namespace GoodMemory {
return card != null && this.HasCard((ushort) card.RowId); return card != null && this.HasCard((ushort) card.RowId);
} }
private bool HasItemActionUnlocked(long itemActionId) { private unsafe bool HasItemActionUnlocked(Item item) {
return this._hasItemActionUnlocked(itemActionId) == 1; var itemAction = item.ItemAction.Value;
if (itemAction == null) {
return false;
}
var type = (ActionType) itemAction.Type;
var mem = Marshal.AllocHGlobal(256);
*(uint*) (mem + 142) = itemAction.RowId;
if (type == ActionType.OrchestrionRolls) {
*(uint*) (mem + 112) = item.AdditionalData;
}
var ret = this._hasItemActionUnlocked(mem) == 1;
Marshal.FreeHGlobal(mem);
return ret;
} }
private bool HasCard(ushort cardId) { private bool HasCard(ushort cardId) {

View File

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>1.0.9</Version> <Version>1.0.10</Version>
<TargetFramework>net5-windows</TargetFramework> <TargetFramework>net5-windows</TargetFramework>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
@ -24,8 +24,8 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DalamudPackager" Version="2.1.2"/> <PackageReference Include="DalamudPackager" Version="2.1.5"/>
<PackageReference Include="XivCommon" Version="3.0.1"/> <PackageReference Include="XivCommon" Version="4.0.0-alpha.1"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="..\icon.png" Link="images/icon.png" CopyToOutputDirectory="PreserveNewest" Visible="false"/> <Content Include="..\icon.png" Link="images/icon.png" CopyToOutputDirectory="PreserveNewest" Visible="false"/>

View File

@ -1,6 +1,5 @@
using Dalamud.Plugin; using Dalamud.Plugin;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets;
using System.Diagnostics;
using System.Linq; using System.Linq;
using Dalamud.Data; using Dalamud.Data;
using Dalamud.Game; using Dalamud.Game;
@ -48,7 +47,7 @@ namespace GoodMemory {
if (itemId > 2_000_000) { if (itemId > 2_000_000) {
return; return;
} }
if (itemId > 1_000_000) { if (itemId > 1_000_000) {
itemId -= 1_000_000; itemId -= 1_000_000;
} }
@ -63,20 +62,18 @@ namespace GoodMemory {
// Faded Copies // Faded Copies
if (item.FilterGroup == 12 && item.ItemUICategory.Value?.RowId == 94 && item.LevelItem.Value?.RowId == 1) { if (item.FilterGroup == 12 && item.ItemUICategory.Value?.RowId == 94 && item.LevelItem.Value?.RowId == 1) {
var recipeResults = this.DataManager.GetExcelSheet<Recipe>()! var recipeResults = this.DataManager.GetExcelSheet<Recipe>()!
.Where(recipe => recipe.UnkStruct5.Any(ritem => ritem.ItemIngredient == item.RowId)) .Where(recipe => recipe.UnkData5.Any(ritem => ritem.ItemIngredient == item.RowId))
.Select(recipe => recipe.ItemResult.Value) .Select(recipe => recipe.ItemResult.Value)
.Where(result => result != null) .Where(result => result != null)
.ToArray(); .ToArray();
foreach (var result in recipeResults) { foreach (var result in recipeResults) {
var resultAction = result?.ItemAction?.Value; var resultAction = result?.ItemAction?.Value;
if (!ActionTypeExt.IsValidAction(resultAction)) { if (result == null || (ActionType?) resultAction?.Type != ActionType.OrchestrionRolls) {
continue; continue;
} }
Debug.Assert(resultAction != null, nameof(resultAction) + " != null"); var orchId = result.AdditionalData;
uint orchId = resultAction.Data[0];
var orch = this.DataManager.GetExcelSheet<Orchestrion>()!.GetRow(orchId); var orch = this.DataManager.GetExcelSheet<Orchestrion>()!.GetRow(orchId);
if (orch == null) { if (orch == null) {
continue; continue;