From b48d00c0f315691414c7aa3f0d8260c89fd80580 Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Wed, 6 May 2020 01:38:43 +0200 Subject: [PATCH] feat: yet another network api rework --- Dalamud/Game/Internal/Network/GameNetwork.cs | 26 ++++++++++---------- Dalamud/Game/Network/NetworkHandlers.cs | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Dalamud/Game/Internal/Network/GameNetwork.cs b/Dalamud/Game/Internal/Network/GameNetwork.cs index 953a775c7..d3e25675c 100644 --- a/Dalamud/Game/Internal/Network/GameNetwork.cs +++ b/Dalamud/Game/Internal/Network/GameNetwork.cs @@ -23,7 +23,7 @@ namespace Dalamud.Game.Internal.Network { private GameNetworkAddressResolver Address { get; } private IntPtr baseAddress; - public delegate void OnNetworkMessageDelegate(IntPtr dataPtr, ushort opCode, uint targetId, NetworkMessageDirection direction); + public delegate void OnNetworkMessageDelegate(IntPtr dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction); /// /// Event that is called when a network message is sent/received. @@ -66,11 +66,16 @@ namespace Dalamud.Game.Internal.Network { private void ProcessZonePacketDownDetour(IntPtr a, uint targetId, IntPtr dataPtr) { this.baseAddress = a; - try { - // Call events - this.OnNetworkMessage?.Invoke(dataPtr + 0x10, (ushort) Marshal.ReadInt16(dataPtr, 2), targetId, NetworkMessageDirection.ZoneDown); + // Go back 0x10 to get back to the start of the packet header + dataPtr -= 0x10; - this.processZonePacketDownHook.Original(a, targetId, dataPtr); + try { + + + // Call events + this.OnNetworkMessage?.Invoke(dataPtr + 0x20, (ushort) Marshal.ReadInt16(dataPtr, 0x12), 0, targetId, NetworkMessageDirection.ZoneDown); + + this.processZonePacketDownHook.Original(a, targetId, dataPtr + 0x10); } catch (Exception ex) { string header; try { @@ -83,7 +88,7 @@ namespace Dalamud.Game.Internal.Network { Log.Error(ex, "Exception on ProcessZonePacketDown hook. Header: " + header); - this.processZonePacketDownHook.Original(a, targetId, dataPtr); + this.processZonePacketDownHook.Original(a, targetId, dataPtr + 0x10); } } @@ -92,13 +97,8 @@ namespace Dalamud.Game.Internal.Network { try { // Call events - this.OnNetworkMessage?.Invoke(dataPtr + 0x20, (ushort) Marshal.ReadInt16(dataPtr), 0x0, NetworkMessageDirection.ZoneUp); - - var op = Marshal.ReadInt16(dataPtr); - var length = Marshal.ReadInt16(dataPtr, 8); - - Log.Verbose("[ZONEUP] op: {0} len: {1}", op.ToString("X"), length); - Util.DumpMemory(dataPtr + 0x20, length); + // TODO: Implement actor IDs + this.OnNetworkMessage?.Invoke(dataPtr + 0x20, (ushort) Marshal.ReadInt16(dataPtr), 0x0, 0x0, NetworkMessageDirection.ZoneUp); } catch (Exception ex) { diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs index f0cc9c237..14e126028 100644 --- a/Dalamud/Game/Network/NetworkHandlers.cs +++ b/Dalamud/Game/Network/NetworkHandlers.cs @@ -37,7 +37,7 @@ namespace Dalamud.Game.Network { } - private void OnNetworkMessage(IntPtr dataPtr, ushort opCode, uint targetId, NetworkMessageDirection direction) { + private void OnNetworkMessage(IntPtr dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction) { if (direction != NetworkMessageDirection.ZoneDown) return;