@@ -0,0 +1,28 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user