Skip to content

Commit dea6c56

Browse files
authored
Implement parsing of 2.5.6 (#1001)
* Implement parsing of 2.5.6 * Fixup parsing of 2.5.6 Player ufs * Add V2_5_6_69546 * Fix bit reader reset in read update player 256 * Add parsing of Active player create 2.5.6
1 parent ea494ff commit dea6c56

70 files changed

Lines changed: 7092 additions & 5 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎WowPacketParser/Enums/ClientVersionBuild.cs‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,14 @@ public enum ClientVersionBuild
967967
V2_5_5_67852 = 67852, // live
968968
V2_5_5_68101 = 68101, // live
969969

970+
V2_5_6_68502 = 68502, // live
971+
V2_5_6_68575 = 68575, // live
972+
V2_5_6_68749 = 68749, // live
973+
V2_5_6_68775 = 68775, // live
974+
V2_5_6_68941 = 68941, // live
975+
V2_5_6_69110 = 69110, // live and ptr
976+
V2_5_6_69546 = 69546, // live
977+
970978
V3_4_0_44832 = 44832, // ptr / beta
971979
V3_4_0_45166 = 45166, // ptr / beta
972980
V3_4_0_45189 = 45189, // ptr / beta

‎WowPacketParser/Enums/Version/Opcodes.cs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
using WowPacketParser.Enums.Version.V12_0_7_67808;
110110
using WowPacketParser.Enums.Version.V12_1_0_69214;
111111
using WowPacketParser.Misc;
112+
using WowPacketParser.Enums.Version.V2_5_6_68502;
112113

113114
namespace WowPacketParser.Enums.Version
114115
{
@@ -1311,6 +1312,14 @@ public static ClientVersionBuild GetOpcodeDefiningBuild(ClientVersionBuild build
13111312
case ClientVersionBuild.V2_5_5_67852:
13121313
case ClientVersionBuild.V2_5_5_68101:
13131314
return ClientVersionBuild.V2_5_5_64796;
1315+
case ClientVersionBuild.V2_5_6_68502:
1316+
case ClientVersionBuild.V2_5_6_68575:
1317+
case ClientVersionBuild.V2_5_6_68749:
1318+
case ClientVersionBuild.V2_5_6_68775:
1319+
case ClientVersionBuild.V2_5_6_68941:
1320+
case ClientVersionBuild.V2_5_6_69110:
1321+
case ClientVersionBuild.V2_5_6_69546:
1322+
return ClientVersionBuild.V2_5_6_68502;
13141323
default:
13151324
return ClientVersionBuild.V3_3_5a_12340;
13161325
}
@@ -1518,6 +1527,8 @@ public static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild b
15181527
return Opcodes_2_5_4.Opcodes(direction);
15191528
case ClientVersionBuild.V2_5_5_64796:
15201529
return Opcodes_2_5_5.Opcodes(direction);
1530+
case ClientVersionBuild.V2_5_6_68502:
1531+
return Opcodes_2_5_6.Opcodes(direction);
15211532
case ClientVersionBuild.V3_4_0_45166:
15221533
return Opcodes_3_4_0.Opcodes(direction);
15231534
case ClientVersionBuild.V3_4_1_47014:

‎WowPacketParser/Enums/Version/UpdateFields.cs‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,16 @@ private static ClientVersionBuild GetUpdateFieldDictionaryBuild(ClientVersionBui
13571357
{
13581358
return ClientVersionBuild.V2_5_5_64796;
13591359
}
1360+
case ClientVersionBuild.V2_5_6_68502:
1361+
case ClientVersionBuild.V2_5_6_68575:
1362+
case ClientVersionBuild.V2_5_6_68749:
1363+
case ClientVersionBuild.V2_5_6_68775:
1364+
case ClientVersionBuild.V2_5_6_68941:
1365+
case ClientVersionBuild.V2_5_6_69110:
1366+
case ClientVersionBuild.V2_5_6_69546:
1367+
{
1368+
return ClientVersionBuild.V2_5_6_68502;
1369+
}
13601370
case ClientVersionBuild.V3_4_0_45166:
13611371
case ClientVersionBuild.V3_4_0_44832:
13621372
case ClientVersionBuild.V3_4_0_45189:
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using WowPacketParser.Misc;
2+
3+
namespace WowPacketParser.Enums.Version.V2_5_6_68502
4+
{
5+
public static class Opcodes_2_5_6
6+
{
7+
public static BiDictionary<Opcode, int> Opcodes(Direction direction)
8+
{
9+
switch (direction)
10+
{
11+
case Direction.ClientToServer:
12+
return ClientOpcodes;
13+
case Direction.ServerToClient:
14+
return ServerOpcodes;
15+
default:
16+
return MiscOpcodes;
17+
}
18+
}
19+
20+
private static readonly BiDictionary<Opcode, int> ClientOpcodes = new()
21+
{
22+
{ Opcode.CMSG_CAST_SPELL, 0x3E0160 },
23+
{ Opcode.CMSG_CHAT_MESSAGE_SAY, 0x2F0023 },
24+
{ Opcode.CMSG_CHAT_MESSAGE_EMOTE, 0x2F0024 },
25+
{ Opcode.CMSG_AREA_TRIGGER, 0x3E0088 },
26+
{ Opcode.CMSG_SEND_TEXT_EMOTE, 0x3F0014 },
27+
{ Opcode.CMSG_USE_ITEM, 0x3E015C },
28+
};
29+
30+
private static readonly BiDictionary<Opcode, int> ServerOpcodes = new()
31+
{
32+
{ Opcode.SMSG_QUERY_QUEST_INFO_RESPONSE, 0x640016 },
33+
{ Opcode.SMSG_QUERY_CREATURE_RESPONSE, 0x4A0006 },
34+
{ Opcode.SMSG_QUERY_GAME_OBJECT_RESPONSE, 0x4A0007 },
35+
36+
{ Opcode.SMSG_GOSSIP_COMPLETE, 0x640017 },
37+
{ Opcode.SMSG_GOSSIP_MESSAGE, 0x640018 },
38+
{ Opcode.SMSG_GOSSIP_QUEST_UPDATE, 0x640019 },
39+
{ Opcode.SMSG_GOSSIP_REFRESH_OPTIONS, 0x640027 },
40+
{ Opcode.SMSG_GOSSIP_OPTION_NPC_INTERACTION, 0x640028 },
41+
42+
{ Opcode.SMSG_SET_TIME_ZONE_INFORMATION, 0x460124 },
43+
{ Opcode.SMSG_HIGHEST_THREAT_UPDATE, 0x460187 },
44+
{ Opcode.SMSG_THREAT_CLEAR, 0x46018A },
45+
{ Opcode.SMSG_THREAT_REMOVE, 0x460189 },
46+
{ Opcode.SMSG_THREAT_UPDATE, 0x460188 },
47+
{ Opcode.SMSG_ATTACKER_STATE_UPDATE, 0x4C0030 },
48+
{ Opcode.SMSG_ATTACK_START, 0x4C001B },
49+
{ Opcode.SMSG_ATTACK_STOP, 0x4C001C },
50+
{ Opcode.SMSG_AI_REACTION, 0x460163 },
51+
{ Opcode.SMSG_TEXT_EMOTE, 0x460127 },
52+
{ Opcode.SMSG_EMOTE, 0x46027D },
53+
{ Opcode.SMSG_CHAT, 0x4B0001 },
54+
{ Opcode.SMSG_ON_MONSTER_MOVE, 0x5E0002 },
55+
{ Opcode.SMSG_UPDATE_OBJECT, 0x5C0000 },
56+
{ Opcode.SMSG_AURA_UPDATE, 0x660011 },
57+
{ Opcode.SMSG_CAST_FAILED, 0x660048 },
58+
{ Opcode.SMSG_SPELL_GO, 0x66002A },
59+
{ Opcode.SMSG_SPELL_START, 0x66002B },
60+
{ Opcode.SMSG_SPELL_COOLDOWN, 0x660005 },
61+
{ Opcode.SMSG_SPELL_CATEGORY_COOLDOWN, 0x660006 },
62+
{ Opcode.SMSG_PET_SPELLS_MESSAGE, 0x660014 },
63+
{ Opcode.SMSG_SPELL_NON_MELEE_DAMAGE_LOG, 0x660021 },
64+
{ Opcode.SMSG_SPELL_INSTAKILL_LOG, 0x660022 },
65+
};
66+
67+
private static readonly BiDictionary<Opcode, int> MiscOpcodes = new();
68+
}
69+
}

‎WowPacketParser/Misc/ClientVersion.cs‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1799,6 +1799,13 @@ public static ClientVersionBuild GetVersionDefiningBuild(ClientVersionBuild buil
17991799
case ClientVersionBuild.V2_5_5_67511:
18001800
case ClientVersionBuild.V2_5_5_67852:
18011801
case ClientVersionBuild.V2_5_5_68101:
1802+
case ClientVersionBuild.V2_5_6_68502:
1803+
case ClientVersionBuild.V2_5_6_68575:
1804+
case ClientVersionBuild.V2_5_6_68749:
1805+
case ClientVersionBuild.V2_5_6_68775:
1806+
case ClientVersionBuild.V2_5_6_68941:
1807+
case ClientVersionBuild.V2_5_6_69110:
1808+
case ClientVersionBuild.V2_5_6_69546:
18021809
return ClientVersionBuild.V5_5_0_61735;
18031810
case ClientVersionBuild.BattleNetV37165:
18041811
return ClientVersionBuild.BattleNetV37165;
@@ -2312,6 +2319,13 @@ public static bool IsBurningCrusadeClassicClientVersionBuild(ClientVersionBuild
23122319
case ClientVersionBuild.V2_5_5_67511:
23132320
case ClientVersionBuild.V2_5_5_67852:
23142321
case ClientVersionBuild.V2_5_5_68101:
2322+
case ClientVersionBuild.V2_5_6_68502:
2323+
case ClientVersionBuild.V2_5_6_68575:
2324+
case ClientVersionBuild.V2_5_6_68749:
2325+
case ClientVersionBuild.V2_5_6_68775:
2326+
case ClientVersionBuild.V2_5_6_68941:
2327+
case ClientVersionBuild.V2_5_6_69110:
2328+
case ClientVersionBuild.V2_5_6_69546:
23152329
return true;
23162330
default:
23172331
return false;

‎WowPacketParserModule.V5_5_0_61735/Parsers/CombatLogHandler.cs‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using WowPacketParser.Enums;
1+
using System;
2+
using WowPacketParser.Enums;
23
using WowPacketParser.Misc;
34
using WowPacketParser.Parsing;
45

@@ -394,6 +395,9 @@ public static void HandleSpellNonMeleeDmgLog255(Packet packet)
394395

395396
packet.ReadInt32<SpellId>("SpellID");
396397
packet.ReadInt32("SpellXSpellVisual");
398+
if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502))
399+
packet.ReadInt32("ScriptVisualID");
400+
397401
packet.ReadInt32("Damage");
398402
packet.ReadInt32("OriginalDamage");
399403
packet.ReadInt32("OverKill");

‎WowPacketParserModule.V5_5_0_61735/Parsers/MovementHandler.cs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Google.Protobuf.WellKnownTypes;
2+
using System;
23
using System.Linq;
34
using WowPacketParser.DBC;
45
using WowPacketParser.Enums;
@@ -421,6 +422,8 @@ public static MovementInfo ReadMovementStats(Packet packet, params object[] idx)
421422

422423
var int152 = packet.ReadInt32("RemoveForcesCount", idx);
423424
packet.ReadInt32("MoveIndex", idx);
425+
if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502))
426+
packet.ReadSingle("GravityModifier", idx);
424427

425428
for (var i = 0; i < int152; i++)
426429
packet.ReadPackedGuid128("RemoveForcesIDs", idx, i);

‎WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler1158.cs‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ public static void ReadSpellTargetData(Packet packet, PacketSpellData packetSpel
266266
var hasSrcLoc = packet.ReadBit("HasSrcLocation", idx);
267267
var hasDstLoc = packet.ReadBit("HasDstLocation", idx);
268268
var hasOrient = packet.ReadBit("HasOrientation", idx);
269-
var hasMapID = packet.ReadBit("hasMapID ", idx);
269+
var hasMapID = packet.ReadBit("HasMapID", idx);
270270
var nameLength = packet.ReadBits(7);
271271

272272
if (hasSrcLoc)
@@ -443,39 +443,49 @@ public static uint ReadSpellCastRequest(Packet packet, params object[] idx)
443443
if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796))
444444
packet.ReadByte("SendCastFlags", idx);
445445

446-
for (var i = 0; i < 2; i++)
446+
uint miscCount = ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502) ? 3u : 2u;
447+
for (var i = 0; i < miscCount; i++)
447448
packet.ReadInt32("Misc", idx, i);
448449

449450
var spellId = packet.ReadUInt32<SpellId>("SpellID", idx);
450451
packet.ReadInt32("SpellXSpellVisual", idx);
452+
//if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502))
453+
// packet.ReadInt32("ScriptVisualID", idx);
451454

452455
ReadMissileTrajectoryRequest(packet, idx, "MissileTrajectory");
453456

454457
packet.ReadPackedGuid128("CraftingNPC", idx);
455458

456459
var optionalCurrenciesCount = packet.ReadUInt32("OptionalCurrenciesCount", idx);
457460
var optionalReagentsCount = packet.ReadUInt32("OptionalReagentsCount", idx);
461+
458462
var removedModificationsCount = packet.ReadUInt32("RemovedModificationsCount", idx);
459463

460464
packet.ReadByte("CraftingFlags", idx);
461465

462466
for (var j = 0; j < optionalCurrenciesCount; ++j)
463467
ReadOptionalCurrency(packet, idx, "OptionalCurrency", j);
464468

465-
if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796))
469+
if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796) && ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502))
466470
ReadSpellTargetData(packet, null, spellId, idx, "Target");
467471

468472
packet.ResetBitReader();
469473
if (ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796))
470474
packet.ReadBits("SendCastFlags", 6, idx);
471475

476+
var hasReceiveTime = false;
477+
if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502))
478+
packet.ReadBit("HasReceiveTime", idx);
472479
var hasMoveUpdate = packet.ReadBit("HasMoveUpdate", idx);
473480
var weightCount = packet.ReadBits("WeightCount", 2, idx);
474481
var hasCraftingOrderID = packet.ReadBit("HasCrafingOrderID", idx);
475482

476-
if (ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796))
483+
if (ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796) || ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502))
477484
ReadSpellTargetData(packet, null, spellId, idx, "Target");
478485

486+
if (hasReceiveTime)
487+
packet.ReadUInt32("ReceiveTime", idx);
488+
479489
if (hasCraftingOrderID && ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796))
480490
packet.ReadUInt64("CraftingOrderID", idx);
481491

0 commit comments

Comments
 (0)