From 60ee3ae1d119279328bc4af961ee23940490d9fc Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Wed, 18 Mar 2026 18:43:40 -0700 Subject: [PATCH] dpslog: fix handler table swaps not surviving relog InitializeGameEngine re-registers all packet handlers on every login, overwriting our swaps. The NetClient pointer may be reused so comparing it doesn't detect re-registration. Fix: unconditionally reset swap_count and re-install all swaps whenever InitializeGameEngine fires. --- src/dpslog/dpslog.zig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/dpslog/dpslog.zig b/src/dpslog/dpslog.zig index 8037715..bd30fd7 100644 --- a/src/dpslog/dpslog.zig +++ b/src/dpslog/dpslog.zig @@ -869,7 +869,9 @@ fn createEventsDetour(param1: u32, max_event_id: u32) callconv(hook.cc.fastcall) } fn installHandlerSwaps() void { - if (swap_count > 0) return; // already installed + // Always re-install — InitializeGameEngine re-registers all handlers, + // overwriting any previous swaps (even if NetClient pointer is the same). + swap_count = 0; // Packet handler table swaps (no code patching, heap pointer writes only) if (!swapHandler(0x250, @intFromPtr(&spellNonMeleeDmgLogDetour))) log.print("FAILED to swap SPELLNONMELEEDAMAGELOG (0x250)\n")