diff --git a/Dalamud/Game/Internal/Network/GameNetwork.cs b/Dalamud/Game/Internal/Network/GameNetwork.cs index 505d7ab73..953a775c7 100644 --- a/Dalamud/Game/Internal/Network/GameNetwork.cs +++ b/Dalamud/Game/Internal/Network/GameNetwork.cs @@ -11,7 +11,7 @@ namespace Dalamud.Game.Internal.Network { #region Hooks [UnmanagedFunctionPointer(CallingConvention.ThisCall)] - private delegate void ProcessZonePacketDownDelegate(IntPtr a, IntPtr b, IntPtr dataPtr); + private delegate void ProcessZonePacketDownDelegate(IntPtr a, uint targetId, IntPtr dataPtr); private readonly Hook processZonePacketDownHook; [UnmanagedFunctionPointer(CallingConvention.ThisCall)] @@ -23,7 +23,7 @@ namespace Dalamud.Game.Internal.Network { private GameNetworkAddressResolver Address { get; } private IntPtr baseAddress; - public delegate void OnNetworkMessageDelegate(IntPtr dataPtr, NetworkMessageDirection direction); + public delegate void OnNetworkMessageDelegate(IntPtr dataPtr, ushort opCode, uint targetId, NetworkMessageDirection direction); /// /// Event that is called when a network message is sent/received. @@ -63,14 +63,14 @@ namespace Dalamud.Game.Internal.Network { this.processZonePacketUpHook.Dispose(); } - private void ProcessZonePacketDownDetour(IntPtr a, IntPtr b, IntPtr dataPtr) { + private void ProcessZonePacketDownDetour(IntPtr a, uint targetId, IntPtr dataPtr) { this.baseAddress = a; try { // Call events - this.OnNetworkMessage?.Invoke(dataPtr, NetworkMessageDirection.ZoneDown); + this.OnNetworkMessage?.Invoke(dataPtr + 0x10, (ushort) Marshal.ReadInt16(dataPtr, 2), targetId, NetworkMessageDirection.ZoneDown); - this.processZonePacketDownHook.Original(a, b, dataPtr); + this.processZonePacketDownHook.Original(a, targetId, dataPtr); } catch (Exception ex) { string header; try { @@ -83,7 +83,7 @@ namespace Dalamud.Game.Internal.Network { Log.Error(ex, "Exception on ProcessZonePacketDown hook. Header: " + header); - this.processZonePacketDownHook.Original(a, b, dataPtr); + this.processZonePacketDownHook.Original(a, targetId, dataPtr); } } @@ -92,7 +92,7 @@ namespace Dalamud.Game.Internal.Network { try { // Call events - this.OnNetworkMessage?.Invoke(dataPtr, NetworkMessageDirection.ZoneUp); + this.OnNetworkMessage?.Invoke(dataPtr + 0x20, (ushort) Marshal.ReadInt16(dataPtr), 0x0, NetworkMessageDirection.ZoneUp); var op = Marshal.ReadInt16(dataPtr); var length = Marshal.ReadInt16(dataPtr, 8); @@ -153,7 +153,7 @@ namespace Dalamud.Game.Internal.Network { Marshal.Copy(packetData, 0, unmanagedPacketData, packetData.Length); if (this.baseAddress != IntPtr.Zero) { - this.processZonePacketDownHook.Original(this.baseAddress, IntPtr.Zero, unmanagedPacketData); + this.processZonePacketDownHook.Original(this.baseAddress, 0, unmanagedPacketData); } Marshal.FreeHGlobal(unmanagedPacketData); diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs index ad723e3c4..f0cc9c237 100644 --- a/Dalamud/Game/Network/NetworkHandlers.cs +++ b/Dalamud/Game/Network/NetworkHandlers.cs @@ -37,21 +37,19 @@ namespace Dalamud.Game.Network { } - private void OnNetworkMessage(IntPtr dataPtr, NetworkMessageDirection direction) { + private void OnNetworkMessage(IntPtr dataPtr, ushort opCode, uint targetId, NetworkMessageDirection direction) { if (direction != NetworkMessageDirection.ZoneDown) return; if (!this.dalamud.Data.IsDataReady) return; - var opCode = (ushort) Marshal.ReadInt16(dataPtr, 2); - if (opCode == this.dalamud.Data.ServerOpCodes["CfNotifyPop"]) { var data = new byte[64]; Marshal.Copy(dataPtr, data, 0, 64); - var notifyType = data[16]; - var contentFinderConditionId = BitConverter.ToUInt16(data, 36); + var notifyType = data[0]; + var contentFinderConditionId = BitConverter.ToUInt16(data, 0x14); if (notifyType != 3) return; @@ -103,8 +101,8 @@ namespace Dalamud.Game.Network { Task.Run(async () => { for (var rouletteIndex = 1; rouletteIndex < 11; rouletteIndex++) { - var currentRoleKey = data[16 + rouletteIndex]; - var prevRoleKey = this.lastPreferredRole[16 + rouletteIndex]; + var currentRoleKey = data[rouletteIndex]; + var prevRoleKey = this.lastPreferredRole[rouletteIndex]; Log.Verbose("CfPreferredRole: {0} - {1} => {2}", rouletteIndex, prevRoleKey, currentRoleKey); @@ -145,8 +143,8 @@ namespace Dalamud.Game.Network { if (!this.optOutMbUploads) { if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardItemRequestStart"]) { - var catalogId = (uint) Marshal.ReadInt32(dataPtr + 0x10); - var amount = Marshal.ReadByte(dataPtr + 0x1B); + var catalogId = (uint) Marshal.ReadInt32(dataPtr); + var amount = Marshal.ReadByte(dataPtr + 0xB); this.marketBoardRequests.Add(new MarketBoardItemRequest { CatalogId = catalogId, @@ -160,7 +158,7 @@ namespace Dalamud.Game.Network { } if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardOfferings"]) { - var listing = MarketBoardCurrentOfferings.Read(dataPtr + 0x10); + var listing = MarketBoardCurrentOfferings.Read(dataPtr); var request = this.marketBoardRequests.LastOrDefault( @@ -215,7 +213,7 @@ namespace Dalamud.Game.Network { } if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardHistory"]) { - var listing = MarketBoardHistory.Read(dataPtr + 0x10); + var listing = MarketBoardHistory.Read(dataPtr); var request = this.marketBoardRequests.LastOrDefault(r => r.CatalogId == listing.CatalogId); @@ -238,7 +236,7 @@ namespace Dalamud.Game.Network { if (opCode == this.dalamud.Data.ServerOpCodes["MarketTaxRates"]) { - var taxes = MarketTaxRates.Read(dataPtr + 0x10); + var taxes = MarketTaxRates.Read(dataPtr); Log.Verbose("MarketTaxRates: limsa#{0} grid#{1} uldah#{2} ish#{3} kugane#{4} cr#{5}", taxes.LimsaLominsaTax, taxes.GridaniaTax, taxes.UldahTax, taxes.IshgardTax, taxes.KuganeTax, taxes.CrystariumTax); diff --git a/Dalamud/Interface/AssetManager.cs b/Dalamud/Interface/AssetManager.cs index 2b1d61adf..a9aa492e7 100644 --- a/Dalamud/Interface/AssetManager.cs +++ b/Dalamud/Interface/AssetManager.cs @@ -43,7 +43,6 @@ namespace Dalamud.Interface // If another game is running, we don't want to just fail in here Log.Error(ex, "Could not download asset."); } - } } }