Skip to content

Commit a034c93

Browse files
committed
Significantly improve 3.4.1 and 3.4.2 parsing
1 parent 78b129a commit a034c93

10 files changed

Lines changed: 137 additions & 1394 deletions

File tree

WowPacketParser/Enums/Version/V3_4_1_47014/Opcodes.cs

Lines changed: 6 additions & 673 deletions
Large diffs are not rendered by default.

WowPacketParser/Enums/Version/V3_4_2_50129/Opcodes.cs

Lines changed: 7 additions & 673 deletions
Large diffs are not rendered by default.

WowPacketParserModule.V2_5_1_38707/Parsers/UpdateHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ private static MovementInfo ReadMovementUpdateBlock(Packet packet, WowGuid guid,
888888

889889
if (hasActionButtons)
890890
{
891-
var actionButtonCount = (ClientVersion.AddedInVersion(ClientBranch.WotLK, ClientVersionBuild.V3_4_2_50063) ? 180 : 132);
891+
var actionButtonCount = (ClientVersion.AddedInVersion(ClientBranch.WotLK, ClientVersionBuild.V3_4_1_47014) ? 180 : 132);
892892
for (int i = 0; i < actionButtonCount; i++)
893893
packet.ReadInt32("Action", index, i);
894894
}

WowPacketParserModule.V3_4_0_45166/Parsers/SpellHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public static PacketSpellData ReadSpellCastData(Packet packet, params object[] i
121121
var hasAmmoDisplayId = packet.ReadBit("HasAmmoDisplayId", idx);
122122
var hasAmmoInventoryType = packet.ReadBit("HasAmmoInventoryType", idx);
123123

124-
if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_4_1_47014))
124+
if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_4_3_51505))
125125
for (var i = 0; i < missStatusCount; ++i)
126126
V6_0_2_19033.Parsers.SpellHandler.ReadSpellMissStatus(packet, idx, "MissStatus", i);
127127

@@ -133,7 +133,7 @@ public static PacketSpellData ReadSpellCastData(Packet packet, params object[] i
133133
for (var i = 0; i < missTargetsCount; ++i)
134134
packetSpellData.MissedTargets.Add(packet.ReadPackedGuid128("MissTarget", idx, i));
135135

136-
if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_4_1_47014))
136+
if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_4_3_51505))
137137
for (var i = 0; i < missStatusCount; ++i)
138138
ReadSpellMissStatus(packet, idx, "MissStatus", i);
139139

WowPacketParserModule.V3_4_0_45166/Parsers/UpdateFieldsHandler341.cs

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,10 @@ public override IItemData ReadCreateItemData(Packet packet, UpdateFieldFlag flag
258258
if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
259259
{
260260
data.DynamicFlags2 = packet.ReadUInt32("ZoneFlags", indexes);
261+
}
262+
Substructures.ItemHandler.ReadItemBonusKey(packet, indexes, "ItemBonusKey");
263+
if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
264+
{
261265
data.DEBUGItemLevel = packet.ReadUInt16("DEBUGItemLevel", indexes);
262266
}
263267
for (var i = 0; i < data.ArtifactPowers.Count; ++i)
@@ -399,6 +403,10 @@ public override IItemData ReadUpdateItemData(Packet packet, params object[] inde
399403
data.DynamicFlags2 = packet.ReadUInt32("ZoneFlags", indexes);
400404
}
401405
if (changesMask[22])
406+
{
407+
Substructures.ItemHandler.ReadItemBonusKey(packet, indexes, "ItemBonusKey");
408+
}
409+
if (changesMask[23])
402410
{
403411
data.DEBUGItemLevel = packet.ReadUInt16("DEBUGItemLevel", indexes);
404412
}
@@ -407,21 +415,21 @@ public override IItemData ReadUpdateItemData(Packet packet, params object[] inde
407415
data.Modifiers = ReadUpdateItemModList(packet, data.Modifiers as ItemModList, indexes, "Modifiers");
408416
}
409417
}
410-
if (changesMask[23])
418+
if (changesMask[24])
411419
{
412420
for (var i = 0; i < 5; ++i)
413421
{
414-
if (changesMask[24 + i])
422+
if (changesMask[25 + i])
415423
{
416424
data.SpellCharges[i] = packet.ReadInt32("SpellCharges", indexes, i);
417425
}
418426
}
419427
}
420-
if (changesMask[29])
428+
if (changesMask[30])
421429
{
422430
for (var i = 0; i < 13; ++i)
423431
{
424-
if (changesMask[30 + i])
432+
if (changesMask[31 + i])
425433
{
426434
data.Enchantment[i] = ReadUpdateItemEnchantment(packet, data.Enchantment[i] as ItemEnchantment, indexes, "Enchantment", i);
427435
}
@@ -744,6 +752,7 @@ public override IUnitData ReadCreateUnitData(Packet packet, UpdateFieldFlag flag
744752
public override IUnitData ReadUpdateUnitData(Packet packet, params object[] indexes)
745753
{
746754
var data = new UnitData();
755+
/*
747756
var rawChangesMask = new int[7];
748757
var rawMaskMask = new int[1];
749758
rawMaskMask[0] = (int)packet.ReadBits(7);
@@ -1333,6 +1342,7 @@ public override IUnitData ReadUpdateUnitData(Packet packet, params object[] inde
13331342
}
13341343
}
13351344
}
1345+
*/
13361346
return data;
13371347
}
13381348

@@ -1515,7 +1525,9 @@ public override IPlayerData ReadCreatePlayerData(Packet packet, UpdateFieldFlag
15151525
}
15161526
data.CurrentBattlePetBreedQuality = packet.ReadByte("CurrentBattlePetBreedQuality", indexes);
15171527
data.HonorLevel = packet.ReadInt32("HonorLevel", indexes);
1528+
data.LogoutTime = packet.ReadInt64("LogoutTime", indexes);
15181529
data.ArenaCooldowns.Resize(packet.ReadUInt32());
1530+
data.VisualItemReplacements.Resize(packet.ReadUInt32());
15191531
for (var i = 0; i < data.Customizations.Count; ++i)
15201532
{
15211533
data.Customizations[i] = ReadCreateChrCustomizationChoice(packet, indexes, "Customizations", i);
@@ -1524,12 +1536,17 @@ public override IPlayerData ReadCreatePlayerData(Packet packet, UpdateFieldFlag
15241536
{
15251537
data.ArenaCooldowns[i] = ReadCreateArenaCooldown(packet, indexes, "ArenaCooldowns", i);
15261538
}
1539+
for (var i = 0; i < data.VisualItemReplacements.Count; ++i)
1540+
{
1541+
data.VisualItemReplacements[i] = packet.ReadInt32("VisualItemReplacements", indexes, i);
1542+
}
15271543
return data;
15281544
}
15291545

15301546
public override IPlayerData ReadUpdatePlayerData(Packet packet, params object[] indexes)
15311547
{
15321548
var data = new PlayerData();
1549+
/*
15331550
var rawChangesMask = new int[3];
15341551
var rawMaskMask = new int[1];
15351552
rawMaskMask[0] = (int)packet.ReadBits(3);
@@ -1699,7 +1716,7 @@ public override IPlayerData ReadUpdatePlayerData(Packet packet, params object[]
16991716
data.AvgItemLevel[i] = packet.ReadSingle("AvgItemLevel", indexes, i);
17001717
}
17011718
}
1702-
}
1719+
}*/
17031720
return data;
17041721
}
17051722

@@ -1992,7 +2009,7 @@ public override IActivePlayerData ReadCreateActivePlayerData(Packet packet, Upda
19922009
{
19932010
var data = new ActivePlayerData();
19942011
packet.ResetBitReader();
1995-
for (var i = 0; i < 129; ++i)
2012+
for (var i = 0; i < 141; ++i)
19962013
{
19972014
data.InvSlots[i] = packet.ReadPackedGuid128("InvSlots", indexes, i);
19982015
}
@@ -2236,6 +2253,7 @@ public override IActivePlayerData ReadUpdateActivePlayerData(Packet packet, para
22362253
{
22372254
var data = new ActivePlayerData();
22382255
packet.ResetBitReader();
2256+
/*
22392257
var rawChangesMask = new int[47];
22402258
var rawMaskMask = new int[2];
22412259
for (var i = 0; i < 1; ++i)
@@ -3013,12 +3031,14 @@ public override IActivePlayerData ReadUpdateActivePlayerData(Packet packet, para
30133031
}
30143032
}
30153033
}
3034+
*/
30163035
return data;
30173036
}
30183037

30193038
public override IGameObjectData ReadCreateGameObjectData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
30203039
{
30213040
var data = new GameObjectData();
3041+
packet.ResetBitReader();
30223042
data.DisplayID = packet.ReadInt32("DisplayID", indexes);
30233043
data.SpellVisualID = packet.ReadUInt32("SpellVisualID", indexes);
30243044
data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
@@ -3041,18 +3061,24 @@ public override IGameObjectData ReadCreateGameObjectData(Packet packet, UpdateFi
30413061
data.ArtKit = packet.ReadUInt32("ArtKit", indexes);
30423062
data.EnableDoodadSets.Resize(packet.ReadUInt32());
30433063
data.CustomParam = packet.ReadUInt32("CustomParam", indexes);
3064+
data.WorldEffects.Resize(packet.ReadUInt32());
30443065
for (var i = 0; i < data.EnableDoodadSets.Count; ++i)
30453066
{
30463067
data.EnableDoodadSets[i] = packet.ReadInt32("EnableDoodadSets", indexes, i);
30473068
}
3069+
for (var i = 0; i < data.WorldEffects.Count; ++i)
3070+
{
3071+
data.WorldEffects[i] = packet.ReadInt32("WorldEffects", indexes, i);
3072+
}
30483073
return data;
30493074
}
30503075

30513076
public override IGameObjectData ReadUpdateGameObjectData(Packet packet, params object[] indexes)
30523077
{
30533078
var data = new GameObjectData();
3079+
packet.ResetBitReader();
30543080
var rawChangesMask = new int[1];
3055-
rawChangesMask[0] = (int)packet.ReadBits(19);
3081+
rawChangesMask[0] = (int)packet.ReadBits(20);
30563082
var changesMask = new BitArray(rawChangesMask);
30573083

30583084
if (changesMask[0])
@@ -3073,6 +3099,10 @@ public override IGameObjectData ReadUpdateGameObjectData(Packet packet, params o
30733099
{
30743100
data.EnableDoodadSets.ReadUpdateMask(packet);
30753101
}
3102+
if (changesMask[3])
3103+
{
3104+
data.WorldEffects.ReadUpdateMask(packet);
3105+
}
30763106
}
30773107
packet.ResetBitReader();
30783108
if (changesMask[0])
@@ -3089,65 +3119,75 @@ public override IGameObjectData ReadUpdateGameObjectData(Packet packet, params o
30893119
}
30903120
if (changesMask[3])
30913121
{
3092-
data.DisplayID = packet.ReadInt32("DisplayID", indexes);
3122+
for (var i = 0; i < data.WorldEffects.Count; ++i)
3123+
{
3124+
if (data.WorldEffects.UpdateMask[i])
3125+
{
3126+
data.WorldEffects[i] = packet.ReadInt32("WorldEffects", indexes, i);
3127+
}
3128+
}
30933129
}
30943130
if (changesMask[4])
30953131
{
3096-
data.SpellVisualID = packet.ReadUInt32("SpellVisualID", indexes);
3132+
data.DisplayID = packet.ReadInt32("DisplayID", indexes);
30973133
}
30983134
if (changesMask[5])
30993135
{
3100-
data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
3136+
data.SpellVisualID = packet.ReadUInt32("SpellVisualID", indexes);
31013137
}
31023138
if (changesMask[6])
31033139
{
3104-
data.SpawnTrackingStateAnimID = packet.ReadUInt32("SpawnTrackingStateAnimID", indexes);
3140+
data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
31053141
}
31063142
if (changesMask[7])
31073143
{
3108-
data.SpawnTrackingStateAnimKitID = packet.ReadUInt32("SpawnTrackingStateAnimKitID", indexes);
3144+
data.SpawnTrackingStateAnimID = packet.ReadUInt32("SpawnTrackingStateAnimID", indexes);
31093145
}
31103146
if (changesMask[8])
31113147
{
3112-
data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
3148+
data.SpawnTrackingStateAnimKitID = packet.ReadUInt32("SpawnTrackingStateAnimKitID", indexes);
31133149
}
31143150
if (changesMask[9])
31153151
{
3116-
data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
3152+
data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
31173153
}
31183154
if (changesMask[10])
31193155
{
3120-
data.Flags = packet.ReadUInt32("Flags", indexes);
3156+
data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
31213157
}
31223158
if (changesMask[11])
31233159
{
3124-
data.ParentRotation = packet.ReadQuaternion("ParentRotation", indexes);
3160+
data.Flags = packet.ReadUInt32("Flags", indexes);
31253161
}
31263162
if (changesMask[12])
31273163
{
3128-
data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
3164+
data.ParentRotation = packet.ReadQuaternion("ParentRotation", indexes);
31293165
}
31303166
if (changesMask[13])
31313167
{
3132-
data.Level = packet.ReadInt32("Level", indexes);
3168+
data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
31333169
}
31343170
if (changesMask[14])
31353171
{
3136-
data.State = packet.ReadSByte("State", indexes);
3172+
data.Level = packet.ReadInt32("Level", indexes);
31373173
}
31383174
if (changesMask[15])
31393175
{
3140-
data.TypeID = packet.ReadSByte("TypeID", indexes);
3176+
data.State = packet.ReadSByte("State", indexes);
31413177
}
31423178
if (changesMask[16])
31433179
{
3144-
data.PercentHealth = packet.ReadByte("PercentHealth", indexes);
3180+
data.TypeID = packet.ReadSByte("TypeID", indexes);
31453181
}
31463182
if (changesMask[17])
31473183
{
3148-
data.ArtKit = packet.ReadUInt32("ArtKit", indexes);
3184+
data.PercentHealth = packet.ReadByte("PercentHealth", indexes);
31493185
}
31503186
if (changesMask[18])
3187+
{
3188+
data.ArtKit = packet.ReadUInt32("ArtKit", indexes);
3189+
}
3190+
if (changesMask[19])
31513191
{
31523192
data.CustomParam = packet.ReadUInt32("CustomParam", indexes);
31533193
}

0 commit comments

Comments
 (0)