Skip to content

Commit

Permalink
Fix parsing SMSG_GOSSIP_MESSAGE (TWW) (#894)
Browse files Browse the repository at this point in the history
  • Loading branch information
meji46 authored Nov 21, 2024
1 parent 63dcf81 commit b92c97c
Show file tree
Hide file tree
Showing 12 changed files with 27 additions and 19 deletions.
13 changes: 11 additions & 2 deletions WowPacketParser/Parsing/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()
{
Expand Down
13 changes: 6 additions & 7 deletions WowPacketParserModule.V11_0_0_55666/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,21 @@ 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"));

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)
Expand All @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V4_4_0_54481/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V5_3_0_16981/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V5_4_0_17359/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V5_4_1_17538/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V5_4_2_17658/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V5_4_7_17898/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V5_4_8_18291/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V6_0_2_19033/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V7_0_3_22248/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParserModule.V9_0_1_36216/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down

0 comments on commit b92c97c

Please sign in to comment.