f72031ae60
Co-authored-by: Cursor <cursoragent@cursor.com>
29 lines
1.5 KiB
C#
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");
|
|
}
|
|
}
|