diff --git a/WowPacketParser/Parsing/Parsers/NpcHandler.cs b/WowPacketParser/Parsing/Parsers/NpcHandler.cs index b31289ee8c..496a570cd2 100644 --- a/WowPacketParser/Parsing/Parsers/NpcHandler.cs +++ b/WowPacketParser/Parsing/Parsers/NpcHandler.cs @@ -95,12 +95,21 @@ public static void UpdateTempGossipOptionActionPOI(TimeSpan timeSpan, object gos } } + public static bool HasLastGossipOption(TimeSpan timeSpan, uint? menuId) + { + if (LastGossipOption.HasSelection) + if ((timeSpan - LastGossipOption.TimeSpan).Duration() <= TimeSpan.FromMilliseconds(2500)) + return true; + + return false; + } + public static void UpdateLastGossipOptionActionMessage(TimeSpan timeSpan, uint? menuId) { if (!LastGossipOption.HasSelection) return; - if ((timeSpan - LastGossipOption.TimeSpan).Duration() <= TimeSpan.FromMilliseconds(2500)) + if (HasLastGossipOption(timeSpan, menuId)) { Storage.GossipMenuOptions[(LastGossipOption.MenuId, LastGossipOption.OptionIndex)].Item1.ActionMenuID = menuId; Storage.GossipMenuOptions[(LastGossipOption.MenuId, LastGossipOption.OptionIndex)].Item1.ActionPoiID = LastGossipOption.ActionPoiId ?? 0; @@ -577,7 +586,7 @@ public static void HandleNpcGossip(Packet packet) for (int i = 0; i < questsCount; i++) ReadGossipQuestTextData(packet, i, "GossipQuests"); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V11_0_0_55666/Parsers/NpcHandler.cs b/WowPacketParserModule.V11_0_0_55666/Parsers/NpcHandler.cs index fd03230b8b..2b1a5999fa 100644 --- a/WowPacketParserModule.V11_0_0_55666/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V11_0_0_55666/Parsers/NpcHandler.cs @@ -32,8 +32,8 @@ public static void HandleNpcGossip(Packet packet) var optionsCount = packet.ReadUInt32("GossipOptionsCount"); var questsCount = packet.ReadUInt32("GossipQuestsCount"); - var hasTextID = packet.ReadBit("HasTextID"); var hasBroadcastTextID = packet.ReadBit("HasBroadcastTextID"); + var hasBroadcastTextID2 = packet.ReadBit("HasBroadcastTextID2"); for (var i = 0u; i < optionsCount; ++i) packetGossip.Options.Add(V6_0_2_19033.Parsers.NpcHandler.ReadGossipOptionsData((uint)menuId, guid, packet, i, "GossipOptions")); @@ -41,13 +41,12 @@ public static void HandleNpcGossip(Packet packet) uint broadcastTextID = 0; uint npcTextID = 0; - if (hasTextID) - npcTextID = (uint)packet.ReadInt32("TextID"); - if (hasBroadcastTextID) broadcastTextID = (uint)packet.ReadInt32("BroadcastTextID"); + else if (hasBroadcastTextID2) + broadcastTextID = (uint)packet.ReadInt32("BroadcastTextID2"); - if (!hasTextID && hasBroadcastTextID) + if (hasBroadcastTextID || hasBroadcastTextID2) npcTextID = SQLDatabase.GetNPCTextIDByMenuIDAndBroadcastText(menuId, broadcastTextID); if (npcTextID != 0) @@ -62,13 +61,13 @@ public static void HandleNpcGossip(Packet packet) Storage.Gossips.Add(gossip, packet.TimeSpan); } - else if (hasBroadcastTextID) + else if (hasBroadcastTextID || hasBroadcastTextID2) V9_0_1_36216.Parsers.NpcHandler.AddBroadcastTextToGossip(packetGossip.MenuId, broadcastTextID, guid); for (var i = 0u; i < questsCount; ++i) packetGossip.Quests.Add(V7_0_3_22248.Parsers.NpcHandler.ReadGossipQuestTextData(packet, i, "GossipQuests")); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs b/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs index cb524a8a29..d345de7521 100644 --- a/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs @@ -184,7 +184,7 @@ public static void HandleNpcGossip(Packet packet) for (int i = 0; i < questsCount; ++i) packetGossip.Quests.Add(ReadGossipQuestTextData(packet, i, "GossipQuests")); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V5_3_0_16981/Parsers/NpcHandler.cs b/WowPacketParserModule.V5_3_0_16981/Parsers/NpcHandler.cs index b8ce7bb20c..f2c0e3bbd9 100644 --- a/WowPacketParserModule.V5_3_0_16981/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V5_3_0_16981/Parsers/NpcHandler.cs @@ -160,7 +160,7 @@ public static void HandleNpcGossip(Packet packet) gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V5_4_0_17359/Parsers/NpcHandler.cs b/WowPacketParserModule.V5_4_0_17359/Parsers/NpcHandler.cs index 76b5efa9dd..cb673462bd 100644 --- a/WowPacketParserModule.V5_4_0_17359/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V5_4_0_17359/Parsers/NpcHandler.cs @@ -171,7 +171,7 @@ public static void HandleNpcGossip(Packet packet) gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V5_4_1_17538/Parsers/NpcHandler.cs b/WowPacketParserModule.V5_4_1_17538/Parsers/NpcHandler.cs index 3bc2fb20e7..434111085c 100644 --- a/WowPacketParserModule.V5_4_1_17538/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V5_4_1_17538/Parsers/NpcHandler.cs @@ -115,7 +115,7 @@ public static void HandleNpcGossip(Packet packet) gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V5_4_2_17658/Parsers/NpcHandler.cs b/WowPacketParserModule.V5_4_2_17658/Parsers/NpcHandler.cs index 5e579f4652..5a9349ab2c 100644 --- a/WowPacketParserModule.V5_4_2_17658/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V5_4_2_17658/Parsers/NpcHandler.cs @@ -144,7 +144,7 @@ public static void HandleNpcGossip(Packet packet) gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V5_4_7_17898/Parsers/NpcHandler.cs b/WowPacketParserModule.V5_4_7_17898/Parsers/NpcHandler.cs index 8cedab9868..44a12b479e 100644 --- a/WowPacketParserModule.V5_4_7_17898/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V5_4_7_17898/Parsers/NpcHandler.cs @@ -177,7 +177,7 @@ public static void HandleNpcGossip(Packet packet) gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V5_4_8_18291/Parsers/NpcHandler.cs b/WowPacketParserModule.V5_4_8_18291/Parsers/NpcHandler.cs index ff6fcb847a..3e52661633 100644 --- a/WowPacketParserModule.V5_4_8_18291/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V5_4_8_18291/Parsers/NpcHandler.cs @@ -170,7 +170,7 @@ public static void HandleNpcGossip(Packet packet) gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V6_0_2_19033/Parsers/NpcHandler.cs b/WowPacketParserModule.V6_0_2_19033/Parsers/NpcHandler.cs index bfd0d519d0..708c19adca 100644 --- a/WowPacketParserModule.V6_0_2_19033/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V6_0_2_19033/Parsers/NpcHandler.cs @@ -316,7 +316,7 @@ public static void HandleNpcGossip(Packet packet) for (int i = 0; i < questsCount; ++i) packetGossip.Quests.Add(ReadGossipQuestTextData(packet, i, "GossipQuests")); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V7_0_3_22248/Parsers/NpcHandler.cs b/WowPacketParserModule.V7_0_3_22248/Parsers/NpcHandler.cs index 549b22f99a..b7037a5952 100644 --- a/WowPacketParserModule.V7_0_3_22248/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V7_0_3_22248/Parsers/NpcHandler.cs @@ -93,7 +93,7 @@ public static void HandleNpcGossip(Packet packet) for (int i = 0; i < questsCount; ++i) packetGossip.Quests.Add(ReadGossipQuestTextData(packet, i, "GossipQuests")); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() { diff --git a/WowPacketParserModule.V9_0_1_36216/Parsers/NpcHandler.cs b/WowPacketParserModule.V9_0_1_36216/Parsers/NpcHandler.cs index 4dce795658..4f6e1d25de 100644 --- a/WowPacketParserModule.V9_0_1_36216/Parsers/NpcHandler.cs +++ b/WowPacketParserModule.V9_0_1_36216/Parsers/NpcHandler.cs @@ -167,7 +167,7 @@ public static void HandleNpcGossip(Packet packet) for (int i = 0; i < questsCount; ++i) packetGossip.Quests.Add(V7_0_3_22248.Parsers.NpcHandler.ReadGossipQuestTextData(packet, i, "GossipQuests")); - if (guid.GetObjectType() == ObjectType.Unit) + if (guid.GetObjectType() == ObjectType.Unit && !CoreParsers.NpcHandler.HasLastGossipOption(packet.TimeSpan, (uint)menuId)) { CreatureTemplateGossip creatureTemplateGossip = new() {