Skip to content

Commit

Permalink
Fix a bunch of packet structures
Browse files Browse the repository at this point in the history
  • Loading branch information
Shauren committed Mar 7, 2025
1 parent edf1125 commit 338f6c9
Show file tree
Hide file tree
Showing 41 changed files with 703 additions and 205 deletions.
3 changes: 3 additions & 0 deletions WowPacketParser/Enums/Race.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,8 @@ public enum Race

DracthyrAlliance = 52,
DractyhrHorde = 70,

EarthenDwarfHorde = 84,
EarthenDwarfAlliance= 85,
}
}
14 changes: 7 additions & 7 deletions WowPacketParser/Parsing/Parsers/MiscellaneousHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -514,25 +514,25 @@ public static void HandleExplorationExperience(Packet packet)
[Parser(Opcode.SMSG_START_MIRROR_TIMER)]
public static void HandleStartMirrorTimer(Packet packet)
{
packet.ReadUInt32E<MirrorTimerType>("Timer Type");
packet.ReadUInt32("Current Value");
packet.ReadUInt32("Max Value");
packet.ReadInt32("Regen");
packet.ReadInt32E<MirrorTimerType>("Timer");
packet.ReadInt32("Value");
packet.ReadInt32("MaxValue");
packet.ReadInt32("Scale");
packet.ReadBool("Paused");
packet.ReadUInt32("Spell Id");
packet.ReadInt32<SpellId>("SpellID");
}

[Parser(Opcode.SMSG_PAUSE_MIRROR_TIMER)]
public static void HandlePauseMirrorTimer(Packet packet)
{
packet.ReadUInt32E<MirrorTimerType>("Timer Type");
packet.ReadInt32E<MirrorTimerType>("Timer");
packet.ReadBool("Paused");
}

[Parser(Opcode.SMSG_STOP_MIRROR_TIMER)]
public static void HandleStopMirrorTimer(Packet packet)
{
packet.ReadUInt32E<MirrorTimerType>("Timer Type");
packet.ReadInt32E<MirrorTimerType>("Timer");
}

[Parser(Opcode.SMSG_DEATH_RELEASE_LOC)]
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParser/Parsing/Parsers/NpcHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@ public static void HandleNpcGossip(Packet packet)
OptionIndex = gossipOption.OptionID.Value,
OptionNpc = (int)gossipOption.OptionNpc,
BoxCoded = gossipOption.BoxCoded.Value,
BoxCost = gossipOption.BoxMoney.Value,
BoxCost = (uint)gossipOption.BoxMoney.Value,
Text = gossipOption.OptionText,
BoxText = gossipOption.BoxText
});
Expand Down
2 changes: 1 addition & 1 deletion WowPacketParser/Store/Objects/GossipMenuOption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public sealed record GossipMenuOption : IDataModel
public bool? BoxCoded;

[DBFieldName("BoxMoney")]
public uint? BoxMoney;
public ulong? BoxMoney;

[DBFieldName("BoxText", false, false, true)]
public string BoxText;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,11 @@ public static void HandleInspectResult(Packet packet)
var hasAzeriteLevel = packet.ReadBit("HasAzeriteLevel");
packet.ResetBitReader();

for (int i = 0; i < 7; i++)
var bracketCount = 7;
if (ClientVersion.AddedInVersion(ClientVersionBuild.V10_2_7_54577))
bracketCount = 9;

for (int i = 0; i < bracketCount; i++)
ReadPVPBracketData(packet, i, "PVPBracketData");

if (hasGuildData)
Expand Down
54 changes: 46 additions & 8 deletions WowPacketParserModule.V10_0_0_46181/Parsers/CombatLogHandler.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
using WowPacketParser.Enums;
using WowPacketParser.Misc;
using WowPacketParser.Parsing;
using WowPacketParser.Proto;
using WowPacketParser.Store;
using WowPacketParser.Store.Objects;

namespace WowPacketParserModule.V10_0_0_46181.Parsers
{
Expand Down Expand Up @@ -58,7 +55,32 @@ public static void ReadPeriodicAuraLogEffectData(Packet packet, params object[]
}
}

[Parser(Opcode.SMSG_SPELL_HEAL_ABSORB_LOG)]
[Parser(Opcode.SMSG_SPELL_ABSORB_LOG, ClientVersionBuild.V10_1_5_50232)]
public static void HandleSpellAbsorbLog(Packet packet)
{
packet.ReadPackedGuid128("Attacker");
packet.ReadPackedGuid128("Victim");

packet.ReadInt32<SpellId>("AbsorbedSpellID");
packet.ReadInt32<SpellId>("AbsorbSpellID");
packet.ReadPackedGuid128("Caster");
packet.ReadInt32("Absorbed");
packet.ReadInt32("OriginalDamage"); // OriginalDamage (before HitResult -> BeforeCrit and Armor etc)

var supportInfosCount = packet.ReadUInt32();
for (var i = 0; i < supportInfosCount; i++)
ReadSpellSupportInfo(packet, "Supporters", i);

packet.ResetBitReader();
if (ClientVersion.AddedInVersion(ClientVersionBuild.V8_3_0_33062))
packet.ReadBit("Crit");

var bit100 = packet.ReadBit("HasLogData");
if (bit100)
V8_0_1_27101.Parsers.SpellHandler.ReadSpellCastLogData(packet);
}

[Parser(Opcode.SMSG_SPELL_HEAL_ABSORB_LOG, ClientVersionBuild.V10_1_5_50232)]
public static void HandleSpellHealAbsorbLog(Packet packet)
{
packet.ReadPackedGuid128("Attacker");
Expand All @@ -80,8 +102,8 @@ public static void HandleSpellHealAbsorbLog(Packet packet)
V8_0_1_27101.Parsers.SpellHandler.ReadSpellCastLogData(packet, "SpellCastLogData");
}

[Parser(Opcode.SMSG_SPELL_PERIODIC_AURA_LOG)]
public static void HandleSpellPeriodicAuraLog720(Packet packet)
[Parser(Opcode.SMSG_SPELL_PERIODIC_AURA_LOG, ClientVersionBuild.V10_1_5_50232)]
public static void HandleSpellPeriodicAuraLog(Packet packet)
{
packet.ReadPackedGuid128("TargetGUID");
packet.ReadPackedGuid128("CasterGUID");
Expand All @@ -100,7 +122,7 @@ public static void HandleSpellPeriodicAuraLog720(Packet packet)
V8_0_1_27101.Parsers.SpellHandler.ReadSpellCastLogData(packet, "SpellCastLogData");
}

[Parser(Opcode.SMSG_SPELL_HEAL_LOG)]
[Parser(Opcode.SMSG_SPELL_HEAL_LOG, ClientVersionBuild.V10_1_5_50232)]
public static void HandleSpellHealLog(Packet packet)
{
packet.ReadPackedGuid128("TargetGUID");
Expand Down Expand Up @@ -135,7 +157,7 @@ public static void HandleSpellHealLog(Packet packet)
}


[Parser(Opcode.SMSG_SPELL_NON_MELEE_DAMAGE_LOG)]
[Parser(Opcode.SMSG_SPELL_NON_MELEE_DAMAGE_LOG, ClientVersionBuild.V10_1_5_50232)]
public static void HandleSpellNonMeleeDmgLog(Packet packet)
{
packet.ReadPackedGuid128("Me");
Expand Down Expand Up @@ -174,5 +196,21 @@ public static void HandleSpellNonMeleeDmgLog(Packet packet)
if (hasContentTuning)
V9_0_1_36216.Parsers.CombatLogHandler.ReadContentTuningParams(packet, "ContentTuning");
}

[Parser(Opcode.SMSG_ATTACK_SWING_LANDED_LOG, ClientVersionBuild.V10_1_5_50232)]
public static void HandleAttackswingLandedLog(Packet packet)
{
var supportInfosCount = packet.ReadUInt32("SupportInfosCount");
for (var i = 0; i < supportInfosCount; i++)
ReadSpellSupportInfo(packet, "SupportInfo", i);

var hasLogData = packet.ReadBit("HasLogData");
if (hasLogData)
V8_0_1_27101.Parsers.SpellHandler.ReadSpellCastLogData(packet);

packet.ReadInt32("Size");

V9_0_1_36216.Parsers.CombatLogHandler.ReadAttackRoundInfo(packet, "AttackRoundInfo");
}
}
}
14 changes: 10 additions & 4 deletions WowPacketParserModule.V10_0_0_46181/Parsers/ItemHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,17 @@ public static void HandleItemPushResult(Packet packet)
packet.ReadUInt32("QuestLogItemID");
packet.ReadUInt32("Quantity");
packet.ReadUInt32("QuantityInInventory");
if (ClientVersion.AddedInVersion(ClientVersionBuild.V11_0_0_55666))
packet.ReadUInt32("QuantityInQuestLog");

packet.ReadInt32("DungeonEncounterID");

packet.ReadUInt32("BattlePetSpeciesID");
packet.ReadUInt32("BattlePetBreedID");
packet.ReadUInt32("BattlePetBreedQuality");
if (ClientVersion.AddedInVersion(ClientVersionBuild.V11_0_0_55666))
packet.ReadByte("BattlePetBreedQuality");
else
packet.ReadUInt32("BattlePetBreedQuality");
packet.ReadUInt32("BattlePetLevel");

packet.ReadPackedGuid128("ItemGUID");
Expand All @@ -42,11 +48,11 @@ public static void HandleItemPushResult(Packet packet)
packet.ReadBit("Created");

if (ClientVersion.AddedInVersion(ClientVersionBuild.V10_1_7_51187))
packet.ReadBit("ReadBit_1017");
packet.ReadBit("FakeQuestItem");

packet.ReadBits("DisplayText", 3);
packet.ReadBits("ChatNotifyType", 3);
packet.ReadBit("IsBonusRoll");
packet.ReadBit("IsEncounterLoot");
packet.ReadBit("IsPersonalLoot");
var hasCraftingData = packet.ReadBit();
var hasFirstCraftOperationID = packet.ReadBit();
packet.ResetBitReader();
Expand Down
53 changes: 53 additions & 0 deletions WowPacketParserModule.V10_0_0_46181/Parsers/LfgHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using WowPacketParser.Enums;
using WowPacketParser.Misc;
using WowPacketParser.Parsing;

namespace WowPacketParserModule.V10_0_0_46181.Parsers
{
public static class LfgHandler
{
[Parser(Opcode.CMSG_DF_GET_SYSTEM_INFO, ClientVersionBuild.V10_1_7_51187)]
public static void HandleLFGLockInfoRequest(Packet packet)
{
packet.ReadBit("Player");
if (packet.ReadBit())
packet.ReadByte("PartyIndex");
}

[Parser(Opcode.CMSG_DF_JOIN, ClientVersionBuild.V10_1_7_51187)]
public static void HandleDFJoin(Packet packet)
{
packet.ReadBit("QueueAsGroup");
var hasPartyIndex = packet.ReadBit();
packet.ReadBit("Mercenary");

packet.ResetBitReader();

packet.ReadByteE<LfgRoleFlag>("Roles");
var slotsCount = packet.ReadInt32();

if (hasPartyIndex)
packet.ReadByte("PartyIndex");

for (var i = 0; i < slotsCount; ++i)
packet.ReadUInt32("Slot", i);
}

[Parser(Opcode.CMSG_DF_SET_ROLES, ClientVersionBuild.V10_1_7_51187)]
public static void HandleDFSetRoles(Packet packet)
{
var hasPartyIndex = packet.ReadBit();
packet.ReadByteE<LfgRoleFlag>("RolesDesired");
if (hasPartyIndex)
packet.ReadByte("PartyIndex");
}

[Parser(Opcode.SMSG_LFG_ROLE_CHOSEN, ClientVersionBuild.V10_1_7_51187)]
public static void HandleLfgRoleChosen(Packet packet)
{
packet.ReadGuid("Player");
packet.ReadByteE<LfgRoleFlag>("RoleMask");
packet.ReadBit("Accepted");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -134,17 +134,18 @@ public static void HandleDisplayToast(Packet packet)
var type = packet.ReadBits("Type", 2);
packet.ReadBit("IsSecondaryResult");

if (type == 0)
switch (type)
{
packet.ReadBit("BonusRoll");
Substructures.ItemHandler.ReadItemInstance(packet);
packet.ReadInt32("LootSpec");
packet.ReadSByte("Gender");
packet.ReadInt32("ItemQuantity?");
case 0:
packet.ReadBit("BonusRoll");
Substructures.ItemHandler.ReadItemInstance(packet);
packet.ReadInt32("LootSpec");
packet.ReadSByte("Gender");
break;
case 1:
packet.ReadUInt32("CurrencyID");
break;
}

if (type == 1)
packet.ReadUInt32("CurrencyID");
}

[Parser(Opcode.SMSG_START_TIMER)]
Expand Down
19 changes: 4 additions & 15 deletions WowPacketParserModule.V10_0_0_46181/Parsers/QuestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,14 +144,7 @@ public static void HandleQuestGiverQuestDetails(Packet packet)
[Parser(Opcode.SMSG_QUEST_GIVER_REQUEST_ITEMS)]
public static void HandleQuestGiverRequestItems(Packet packet)
{
uint collectCount = 0u;
uint currencyCount = 0u;
var requestItems = packet.Holder.QuestGiverRequestItems = new();
if (ClientVersion.AddedInVersion(ClientVersionBuild.V11_0_2_55959))
{
collectCount = requestItems.CollectCount = packet.ReadUInt32("CollectCount");
currencyCount = requestItems.CurrencyCount = packet.ReadUInt32("CurrencyCount");
}
var questgiverGUID = packet.ReadPackedGuid128("QuestGiverGUID");
requestItems.QuestGiver = questgiverGUID;
requestItems.QuestGiverEntry = (uint)packet.ReadInt32("QuestGiverCreatureID");
Expand All @@ -175,12 +168,11 @@ public static void HandleQuestGiverRequestItems(Packet packet)
requestItems.SuggestedPartyMembers = packet.ReadInt32("SuggestPartyMembers");
requestItems.MoneyToGet = packet.ReadInt32("MoneyToGet");

if (ClientVersion.RemovedInVersion(ClientVersionBuild.V11_0_2_55959))
{
collectCount = requestItems.CollectCount = packet.ReadUInt32("CollectCount");
currencyCount = requestItems.CurrencyCount = packet.ReadUInt32("CurrencyCount");
}
var collectCount = requestItems.CollectCount = packet.ReadUInt32("CollectCount");
var currencyCount = requestItems.CurrencyCount = packet.ReadUInt32("CurrencyCount");
QuestStatusFlags statusFlags = packet.ReadInt32E<QuestStatusFlags>("StatusFlags");
if (ClientVersion.AddedInVersion(ClientVersionBuild.V11_0_0_55666))
packet.ReadInt32("QuestInfoID");
requestItems.StatusFlags = (PacketQuestStatusFlags)statusFlags;
bool isComplete = (statusFlags & (QuestStatusFlags.Complete)) == QuestStatusFlags.Complete;
bool noRequestOnComplete = (statusFlags & QuestStatusFlags.NoRequestOnComplete) != 0;
Expand Down Expand Up @@ -213,9 +205,6 @@ public static void HandleQuestGiverRequestItems(Packet packet)

requestItems.AutoLaunched = packet.ReadBit("AutoLaunched");

if (ClientVersion.AddedInVersion(ClientVersionBuild.V11_0_2_55959))
packet.ReadBit("ResetByScheduler");

packet.ResetBitReader();
packet.ReadInt32("QuestGiverCreatureID"); // questgiver entry?
var conditionalCompletionTextCount = packet.ReadUInt32();
Expand Down
9 changes: 6 additions & 3 deletions WowPacketParserModule.V10_0_0_46181/Parsers/TraitHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ public static void ReadTraitEntry(Packet packet, params object[] indexes)

public static void ReadTraitSubTreeCache(Packet packet, params object[] indexes)
{
packet.ResetBitReader();

packet.ReadInt32("TraitSubTreeID", indexes);
var entries = packet.ReadUInt32();

for (var i = 0u; i < entries; ++i)
ReadTraitEntry(packet, indexes, "TraitEntry", i);

packet.ReadBit("Active");
packet.ReadBit("Active", indexes);
}

public static void ReadTraitConfig(Packet packet, params object[] indexes)
Expand All @@ -32,7 +34,8 @@ public static void ReadTraitConfig(Packet packet, params object[] indexes)
var entries = packet.ReadUInt32();

uint subtrees = 0;
if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_4_1_57294))
if (ClientVersion.AddedInVersion(ClientBranch.Retail, ClientVersionBuild.V11_0_0_55666)
|| ClientVersion.AddedInVersion(ClientVersionBuild.V4_4_1_57294))
subtrees = packet.ReadUInt32();

switch (type)
Expand All @@ -53,8 +56,8 @@ public static void ReadTraitConfig(Packet packet, params object[] indexes)
for (var i = 0u; i < entries; ++i)
ReadTraitEntry(packet, indexes, "TraitEntry", i);

var nameLength = packet.ReadBits(9);
packet.ResetBitReader();
var nameLength = packet.ReadBits(9);

for (var i = 0u; i < subtrees; ++i)
ReadTraitSubTreeCache(packet, indexes, "TraitSubTreeCache", i);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Text;
using WowPacketParser.Enums;
using WowPacketParser.Misc;
using WowPacketParser.Parsing;
Expand Down Expand Up @@ -39,5 +38,13 @@ public static void HandleAuthSession(Packet packet)
var realmJoinTicketSize = packet.ReadInt32();
packet.ReadBytes("RealmJoinTicket", realmJoinTicketSize);
}

[Parser(Opcode.SMSG_ENTER_ENCRYPTED_MODE, ClientVersionBuild.V11_1_0_59347)]
public static void HandleEnterEncryptedMode(Packet packet)
{
packet.ReadBytes("Signature (ED25519)", 64);
packet.ReadInt32("RegionGroup");
packet.ReadBit("Enabled");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public static void HandleSpellEnergizeLog(Packet packet)

var hasLogData = packet.ReadBit("HasLogData");
if (hasLogData)
V6_0_2_19033.Parsers.SpellHandler.ReadSpellCastLogData(packet);
V8_0_1_27101.Parsers.SpellHandler.ReadSpellCastLogData(packet);
}
}
}
Loading

0 comments on commit 338f6c9

Please sign in to comment.