Skip to content

Commit 0c9b298

Browse files
committed
Implement rudimentary parsing of 1.15.7
1 parent 14d2c7a commit 0c9b298

85 files changed

Lines changed: 10429 additions & 6 deletions

File tree

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: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,11 @@ public enum ClientVersionBuild
753753
V1_15_6_58912 = 58912, // live
754754
V1_15_6_59415 = 59415, // live
755755

756+
V1_15_7_60000 = 60000, // ptr
757+
V1_15_7_60013 = 60013, // ptr
758+
V1_15_7_60141 = 60141, // ptr and live
759+
V1_15_7_60191 = 60191, // live
760+
756761
// TBC Classic
757762
V2_5_1_38598 = 38598, // ptr
758763
V2_5_1_38644 = 38644,

WowPacketParser/Enums/Version/Opcodes.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
using WowPacketParser.Enums.Version.V11_0_7_58123;
9090
using WowPacketParser.Enums.Version.V11_1_0_59347;
9191
using WowPacketParser.Misc;
92+
using WowPacketParser.Enums.Version.V1_15_7_60000;
9293

9394
namespace WowPacketParser.Enums.Version
9495
{
@@ -1045,6 +1046,11 @@ public static ClientVersionBuild GetOpcodeDefiningBuild(ClientVersionBuild build
10451046
case ClientVersionBuild.V1_15_6_58912:
10461047
case ClientVersionBuild.V1_15_6_59415:
10471048
return ClientVersionBuild.V1_15_6_58797;
1049+
case ClientVersionBuild.V1_15_7_60000:
1050+
case ClientVersionBuild.V1_15_7_60013:
1051+
case ClientVersionBuild.V1_15_7_60141:
1052+
case ClientVersionBuild.V1_15_7_60191:
1053+
return ClientVersionBuild.V1_15_7_60000;
10481054
case ClientVersionBuild.V4_4_2_59185:
10491055
case ClientVersionBuild.V4_4_2_59297:
10501056
case ClientVersionBuild.V4_4_2_59346:
@@ -1224,6 +1230,8 @@ public static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild b
12241230
return Opcodes_1_15_5.Opcodes(direction);
12251231
case ClientVersionBuild.V1_15_6_58797:
12261232
return Opcodes_1_15_6.Opcodes(direction);
1233+
case ClientVersionBuild.V1_15_7_60000:
1234+
return Opcodes_1_15_7.Opcodes(direction);
12271235
case ClientVersionBuild.V2_5_1_38835:
12281236
return Opcodes_2_5_1.Opcodes(direction);
12291237
case ClientVersionBuild.V2_5_2_39570:

WowPacketParser/Enums/Version/UpdateFields.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,13 @@ private static string GetUpdateFieldDictionaryBuildName(ClientVersionBuild build
11151115
{
11161116
return "V1_15_6_58797";
11171117
}
1118+
case ClientVersionBuild.V1_15_7_60000:
1119+
case ClientVersionBuild.V1_15_7_60013:
1120+
case ClientVersionBuild.V1_15_7_60141:
1121+
case ClientVersionBuild.V1_15_7_60191:
1122+
{
1123+
return "V1_15_7_60000";
1124+
}
11181125
case ClientVersionBuild.V2_5_1_38598:
11191126
case ClientVersionBuild.V2_5_1_38644:
11201127
case ClientVersionBuild.V2_5_1_38707:

WowPacketParser/Enums/Version/V1_15_7_60000/Opcodes.cs

Lines changed: 2135 additions & 0 deletions
Large diffs are not rendered by default.

WowPacketParser/Misc/ClientVersion.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,10 @@ public static ClientVersionBuild GetVersionDefiningBuild(ClientVersionBuild buil
14691469
case ClientVersionBuild.V4_4_2_59734:
14701470
case ClientVersionBuild.V4_4_2_59962:
14711471
case ClientVersionBuild.V4_4_2_60142:
1472+
case ClientVersionBuild.V1_15_7_60000:
1473+
case ClientVersionBuild.V1_15_7_60013:
1474+
case ClientVersionBuild.V1_15_7_60141:
1475+
case ClientVersionBuild.V1_15_7_60191:
14721476
return ClientVersionBuild.V4_4_0_54481;
14731477
case ClientVersionBuild.BattleNetV37165:
14741478
return ClientVersionBuild.BattleNetV37165;
@@ -1880,6 +1884,10 @@ public static bool IsSeasonOfDiscoveryClientVersionBuild(ClientVersionBuild buil
18801884
case ClientVersionBuild.V1_15_6_58866:
18811885
case ClientVersionBuild.V1_15_6_58912:
18821886
case ClientVersionBuild.V1_15_6_59415:
1887+
case ClientVersionBuild.V1_15_7_60000:
1888+
case ClientVersionBuild.V1_15_7_60013:
1889+
case ClientVersionBuild.V1_15_7_60141:
1890+
case ClientVersionBuild.V1_15_7_60191:
18831891
return true;
18841892
default:
18851893
return false;

WowPacketParserModule.V4_4_0_54481/Parsers/SpellHandler.cs

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ public static void HandleLearnedSpells(Packet packet)
534534
}
535535

536536
[HasSniffData]
537-
[Parser(Opcode.SMSG_AURA_UPDATE)]
537+
[Parser(Opcode.SMSG_AURA_UPDATE, ClientBranch.Cata)]
538538
public static void HandleAuraUpdate(Packet packet)
539539
{
540540
PacketAuraUpdate packetAuraUpdate = packet.Holder.AuraUpdate = new();
@@ -629,6 +629,107 @@ public static void HandleAuraUpdate(Packet packet)
629629
}
630630
}
631631

632+
[HasSniffData]
633+
[Parser(Opcode.SMSG_AURA_UPDATE, ClientBranch.Classic)]
634+
public static void HandleAuraUpdateClassic(Packet packet)
635+
{
636+
PacketAuraUpdate packetAuraUpdate = packet.Holder.AuraUpdate = new();
637+
packet.ReadBit("UpdateAll");
638+
var count = packet.ReadBits("AurasCount", 9);
639+
640+
var auras = new List<Aura>();
641+
for (var i = 0; i < count; ++i)
642+
{
643+
var auraEntry = new PacketAuraUpdateEntry();
644+
packetAuraUpdate.Updates.Add(auraEntry);
645+
var aura = new Aura();
646+
647+
if (ClientVersion.AddedInVersion(ClientVersionBuild.V1_15_7_60000))
648+
auraEntry.Slot = packet.ReadUInt16("Slot", i);
649+
else
650+
auraEntry.Slot = packet.ReadByte("Slot", i);
651+
652+
packet.ResetBitReader();
653+
var hasAura = packet.ReadBit("HasAura", i);
654+
auraEntry.Remove = !hasAura;
655+
if (hasAura)
656+
{
657+
packet.ReadPackedGuid128("CastID", i);
658+
aura.SpellId = auraEntry.Spell = (uint)packet.ReadInt32<SpellId>("SpellID", i);
659+
packet.ReadInt32("SpellXSpellVisualID", i);
660+
var flags = packet.ReadUInt16E<AuraFlagClassic>("Flags", i);
661+
aura.AuraFlags = flags;
662+
auraEntry.Flags = flags.ToUniversal();
663+
packet.ReadUInt32("ActiveFlags", i);
664+
aura.Level = packet.ReadUInt16("CastLevel", i);
665+
aura.Charges = packet.ReadByte("Applications", i);
666+
packet.ReadInt32("ContentTuningID", i);
667+
if (ClientVersion.AddedInVersion(ClientVersionBuild.V1_15_7_60000))
668+
packet.ReadVector3("DstLocation", i);
669+
670+
packet.ResetBitReader();
671+
672+
var hasCastUnit = packet.ReadBit("HasCastUnit", i);
673+
var hasDuration = packet.ReadBit("HasDuration", i);
674+
var hasRemaining = packet.ReadBit("HasRemaining", i);
675+
676+
var hasTimeMod = packet.ReadBit("HasTimeMod", i);
677+
678+
var pointsCount = packet.ReadBits("PointsCount", 6, i);
679+
var effectCount = packet.ReadBits("EstimatedPoints", 6, i);
680+
681+
var hasContentTuning = packet.ReadBit("HasContentTuning", i);
682+
683+
if (hasContentTuning)
684+
CombatLogHandler.ReadContentTuningParams(packet, i, "ContentTuning");
685+
686+
if (hasCastUnit)
687+
auraEntry.CasterUnit = packet.ReadPackedGuid128("CastUnit", i);
688+
689+
aura.Duration = hasDuration ? packet.ReadInt32("Duration", i) : 0;
690+
aura.MaxDuration = hasRemaining ? packet.ReadInt32("Remaining", i) : 0;
691+
692+
if (hasDuration)
693+
auraEntry.Duration = aura.Duration;
694+
695+
if (hasRemaining)
696+
auraEntry.Remaining = aura.MaxDuration;
697+
698+
if (hasTimeMod)
699+
packet.ReadSingle("TimeMod");
700+
701+
for (var j = 0; j < pointsCount; ++j)
702+
packet.ReadSingle("Points", i, j);
703+
704+
for (var j = 0; j < effectCount; ++j)
705+
packet.ReadSingle("EstimatedPoints", i, j);
706+
707+
auras.Add(aura);
708+
packet.AddSniffData(StoreNameType.Spell, (int)aura.SpellId, "AURA_UPDATE");
709+
}
710+
}
711+
712+
var guid = packet.ReadPackedGuid128("UnitGUID");
713+
packetAuraUpdate.Unit = guid;
714+
715+
if (Storage.Objects.ContainsKey(guid))
716+
{
717+
var unit = Storage.Objects[guid].Item1 as Unit;
718+
if (unit != null)
719+
{
720+
// If this is the first packet that sends auras
721+
// (hopefully at spawn time) add it to the "Auras" field,
722+
// if not create another row of auras in AddedAuras
723+
// (similar to ChangedUpdateFields)
724+
725+
if (unit.Auras == null)
726+
unit.Auras = auras;
727+
else
728+
unit.AddedAuras.Add(auras);
729+
}
730+
}
731+
}
732+
632733
[Parser(Opcode.SMSG_SPELL_START)]
633734
public static void HandleSpellStart(Packet packet)
634735
{

WowPacketParserModule.V4_4_0_54481/Parsers/UpdateFieldsHandler1156.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,7 @@ public static IUnitChannel ReadUpdateUnitChannel(Packet packet, params object[]
727727
var data = new UnitChannel();
728728
packet.ResetBitReader();
729729
data.SpellID = packet.ReadInt32("SpellID", indexes);
730-
data.SpellVisual = ReadUpdateSpellCastVisual(packet, indexes, "SpellVisual");
730+
packet.ReadInt32("SpellXSpellVisualID", indexes);
731731
return data;
732732
}
733733

@@ -862,7 +862,7 @@ public override IUnitData ReadCreateUnitData(Packet packet, UpdateFieldFlag flag
862862
data.Flags = packet.ReadUInt32("Flags", indexes);
863863
data.Flags2 = packet.ReadUInt32("Flags2", indexes);
864864
data.Flags3 = packet.ReadUInt32("Flags3", indexes);
865-
packet.ReadUInt32("UNK", indexes); // Maybe flags 4?
865+
data.Flags4 = packet.ReadUInt32("Flags4", indexes);
866866
data.AuraState = packet.ReadUInt32("AuraState", indexes);
867867
for (var i = 0; i < 3; ++i)
868868
{
@@ -5670,7 +5670,6 @@ public override ICorpseData ReadCreateCorpseData(Packet packet, UpdateFieldFlag
56705670
data.Customizations.Resize(packet.ReadUInt32());
56715671
data.Flags = packet.ReadUInt32("Flags", indexes);
56725672
data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
5673-
data.StateSpellVisualKitID = packet.ReadUInt32("StateSpellVisualKitID", indexes);
56745673
for (var i = 0; i < data.Customizations.Count; ++i)
56755674
{
56765675
data.Customizations[i] = ReadCreateChrCustomizationChoice(packet, indexes, "Customizations", i);

0 commit comments

Comments
 (0)