Files
ConfigurableCombo/PluginAddressResolver.cs
2026-02-04 22:12:08 -05:00

29 lines
1.5 KiB
C#

using System;
using Dalamud.Game;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game;
namespace ConfigurableCombo;
internal class PluginAddressResolver : BaseAddressResolver
{
public IntPtr ComboTimer { get; private set; }
public IntPtr LastComboMove => ComboTimer + 0x4;
public IntPtr IsActionIdReplaceable { get; private set; }
/// <summary>RaptureHotbarModule.ExecuteSlotById — used to run custom combos (replace slot action before execution).</summary>
public IntPtr ExecuteSlotById { get; private set; }
/// <summary>ActionManager.UseAction — final execution point; hook here so custom combos work regardless of hotbar path.</summary>
public IntPtr UseAction { get; private set; }
/// <summary>RaptureHotbarModule.GetSlotAppearance — game calls this every frame for visible hotbar slots to get display action/icon; we override so default hotbar shows combo icon.</summary>
public IntPtr GetSlotAppearance { get; private set; }
protected unsafe override void Setup64Bit(ISigScanner scanner)
{
ComboTimer = new IntPtr(&ActionManager.Instance()->Combo.Timer);
IsActionIdReplaceable = scanner.ScanText("40 53 48 83 EC 20 8B D9 48 8B 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 74 1F");
ExecuteSlotById = scanner.ScanText("4C 8B C9 41 83 F8 10 73 45");
UseAction = scanner.ScanText("E8 ?? ?? ?? ?? B0 01 EB B6");
GetSlotAppearance = scanner.ScanText("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 30 48 8B DA 49 8B F0");
}
}