diff --git a/WowPacketParser/Enums/ClientVersionBuild.cs b/WowPacketParser/Enums/ClientVersionBuild.cs
index a85a305723..2ee859c3fe 100644
--- a/WowPacketParser/Enums/ClientVersionBuild.cs
+++ b/WowPacketParser/Enums/ClientVersionBuild.cs
@@ -1061,6 +1061,8 @@ public enum ClientVersionBuild
V5_5_3_65746 = 65746, // live
V5_5_3_65890 = 65890, // live
V5_5_3_65988 = 65988, // live
+ V5_5_3_66128 = 66128, // live
+ V5_5_3_66290 = 66290, // live
// Battle.net - should probably not mix this but oh well
BattleNetV37165 = 37165,
diff --git a/WowPacketParser/Enums/Version/Opcodes.cs b/WowPacketParser/Enums/Version/Opcodes.cs
index 117ec183fd..6118ecb2fe 100644
--- a/WowPacketParser/Enums/Version/Opcodes.cs
+++ b/WowPacketParser/Enums/Version/Opcodes.cs
@@ -1236,6 +1236,8 @@ public static ClientVersionBuild GetOpcodeDefiningBuild(ClientVersionBuild build
case ClientVersionBuild.V5_5_3_65746:
case ClientVersionBuild.V5_5_3_65890:
case ClientVersionBuild.V5_5_3_65988:
+ case ClientVersionBuild.V5_5_3_66128:
+ case ClientVersionBuild.V5_5_3_66290:
return ClientVersionBuild.V5_5_3_64802;
default:
return ClientVersionBuild.V3_3_5a_12340;
diff --git a/WowPacketParser/Enums/Version/UpdateFields.cs b/WowPacketParser/Enums/Version/UpdateFields.cs
index 0462c907e4..35fb9ebaef 100644
--- a/WowPacketParser/Enums/Version/UpdateFields.cs
+++ b/WowPacketParser/Enums/Version/UpdateFields.cs
@@ -1470,6 +1470,17 @@ private static string GetUpdateFieldDictionaryBuildName(ClientVersionBuild build
{
return "V5_5_2_64068";
}
+ case ClientVersionBuild.V5_5_3_64802:
+ case ClientVersionBuild.V5_5_3_64857:
+ case ClientVersionBuild.V5_5_3_65703:
+ case ClientVersionBuild.V5_5_3_65746:
+ case ClientVersionBuild.V5_5_3_65890:
+ case ClientVersionBuild.V5_5_3_65988:
+ case ClientVersionBuild.V5_5_3_66128:
+ case ClientVersionBuild.V5_5_3_66290:
+ {
+ return "V5_5_3_64802";
+ }
default:
{
return "V3_3_5a_12340";
diff --git a/WowPacketParser/Misc/ClientVersion.cs b/WowPacketParser/Misc/ClientVersion.cs
index 61e8e147df..6a8a817101 100644
--- a/WowPacketParser/Misc/ClientVersion.cs
+++ b/WowPacketParser/Misc/ClientVersion.cs
@@ -1689,6 +1689,10 @@ public static ClientVersionBuild GetVersionDefiningBuild(ClientVersionBuild buil
case ClientVersionBuild.V5_5_3_64802:
case ClientVersionBuild.V5_5_3_64857:
case ClientVersionBuild.V5_5_3_65746:
+ case ClientVersionBuild.V5_5_3_65890:
+ case ClientVersionBuild.V5_5_3_65988:
+ case ClientVersionBuild.V5_5_3_66128:
+ case ClientVersionBuild.V5_5_3_66290:
case ClientVersionBuild.V1_15_8_63829:
case ClientVersionBuild.V1_15_8_64057:
case ClientVersionBuild.V1_15_8_64130:
@@ -2394,6 +2398,10 @@ public static bool IsMoPClassicClientVersionBuild(ClientVersionBuild build)
case ClientVersionBuild.V5_5_3_64802:
case ClientVersionBuild.V5_5_3_64857:
case ClientVersionBuild.V5_5_3_65746:
+ case ClientVersionBuild.V5_5_3_65890:
+ case ClientVersionBuild.V5_5_3_65988:
+ case ClientVersionBuild.V5_5_3_66128:
+ case ClientVersionBuild.V5_5_3_66290:
return true;
default:
return false;
diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler.cs
index 837d528d63..a71d5694ec 100644
--- a/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler.cs
+++ b/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler.cs
@@ -201,7 +201,7 @@ public static void ReadSpellTargetData553(Packet packet, PacketSpellData packetS
{
packet.ResetBitReader();
- packet.ReadInt32("FlagsDupa", idx);
+ packet.ReadInt32("Flags", idx);
var targetUnit = packet.ReadPackedGuid128("Unit", idx);
if (packetSpellData != null)
@@ -984,7 +984,7 @@ public static void HandleAuraUpdate(Packet packet)
// (opcjonalnie) packet.ResetBitReader(); // tylko jeśli zaraz potem miałbyś znowu ReadBit
}
}
- auras.Add(aura);
+ auras.Add(aura);
packet.AddSniffData(StoreNameType.Spell, (int)aura.SpellId, "AURA_UPDATE");
}
}
diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateFieldsHandler553.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateFieldsHandler553.cs
new file mode 100644
index 0000000000..2af5ec66af
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateFieldsHandler553.cs
@@ -0,0 +1,5564 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using System.Collections;
+using System.Linq;
+using WowPacketParser.Enums;
+using WowPacketParser.Misc;
+using WowPacketParser.Parsing.Parsers;
+using WowPacketParser.Store.Objects.UpdateFields;
+using WowPacketParserModule.V5_5_0_61735.Parsers;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class UpdateFieldHandler : UpdateFieldsHandlerBase
+ {
+ public override IObjectData ReadCreateObjectData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new ObjectData();
+ packet.ResetBitReader();
+ data.EntryID = packet.ReadInt32("EntryID", indexes);
+ data.DynamicFlags = packet.ReadUInt32("DynamicFlags", indexes);
+ data.Scale = packet.ReadSingle("Scale", indexes);
+ return data;
+ }
+
+ public override IObjectData ReadUpdateObjectData(Packet packet, params object[] indexes)
+ {
+ var data = new ObjectData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(4);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.EntryID = packet.ReadInt32("EntryID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.DynamicFlags = packet.ReadUInt32("DynamicFlags", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.Scale = packet.ReadSingle("Scale", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IItemEnchantment ReadCreateItemEnchantment(Packet packet, params object[] indexes)
+ {
+ var data = new ItemEnchantment();
+ packet.ResetBitReader();
+ data.ID = packet.ReadInt32("ID", indexes);
+ data.Duration = packet.ReadUInt32("Duration", indexes);
+ data.Charges = packet.ReadInt16("Charges", indexes);
+ data.Inactive = packet.ReadUInt16("Inactive", indexes);
+ return data;
+ }
+
+ public static IItemEnchantment ReadUpdateItemEnchantment(Packet packet, params object[] indexes)
+ {
+ var data = new ItemEnchantment();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(5);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.ID = packet.ReadInt32("ID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Duration = packet.ReadUInt32("Duration", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.Charges = packet.ReadInt16("Charges", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.Inactive = packet.ReadUInt16("Inactive", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IItemMod ReadCreateItemMod(Packet packet, params object[] indexes)
+ {
+ var data = new ItemMod();
+ packet.ResetBitReader();
+ data.Type = packet.ReadByte("Type", indexes);
+ data.Value = packet.ReadInt32("Value", indexes);
+ return data;
+ }
+
+ public static IItemMod ReadUpdateItemMod(Packet packet, params object[] indexes)
+ {
+ var data = new ItemMod();
+ packet.ResetBitReader();
+ data.Type = packet.ReadByte("Type", indexes);
+ data.Value = packet.ReadInt32("Value", indexes);
+ return data;
+ }
+
+ public static IItemModList ReadCreateItemModList(Packet packet, params object[] indexes)
+ {
+ var data = new ItemModList();
+ packet.ResetBitReader();
+ data.Values.Resize(packet.ReadBits(6));
+ for (var i = 0; i < data.Values.Count; ++i)
+ {
+ data.Values[i] = ReadCreateItemMod(packet, indexes, "Values", i);
+ }
+ return data;
+ }
+
+ public static IItemModList ReadUpdateItemModList(Packet packet, params object[] indexes)
+ {
+ var data = new ItemModList();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(1);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ data.Values.ReadUpdateMask(packet, 6);
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ for (var i = 0; i < data.Values.Count; ++i)
+ {
+ if (data.Values.UpdateMask[i])
+ {
+ data.Values[i] = ReadUpdateItemMod(packet, indexes, "Values", i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IArtifactPower ReadCreateArtifactPower(Packet packet, params object[] indexes)
+ {
+ var data = new ArtifactPower();
+ packet.ResetBitReader();
+ data.ArtifactPowerID = packet.ReadInt16("ArtifactPowerID", indexes);
+ data.PurchasedRank = packet.ReadByte("PurchasedRank", indexes);
+ data.CurrentRankWithBonus = packet.ReadByte("CurrentRankWithBonus", indexes);
+ return data;
+ }
+
+ public static IArtifactPower ReadUpdateArtifactPower(Packet packet, params object[] indexes)
+ {
+ var data = new ArtifactPower();
+ packet.ResetBitReader();
+ data.ArtifactPowerID = packet.ReadInt16("ArtifactPowerID", indexes);
+ data.PurchasedRank = packet.ReadByte("PurchasedRank", indexes);
+ data.CurrentRankWithBonus = packet.ReadByte("CurrentRankWithBonus", indexes);
+ return data;
+ }
+
+ public static ISocketedGem ReadCreateSocketedGem(Packet packet, params object[] indexes)
+ {
+ var data = new SocketedGem();
+ packet.ResetBitReader();
+ data.ItemID = packet.ReadInt32("ItemID", indexes);
+ for (var i = 0; i < 16; ++i)
+ {
+ data.BonusListIDs[i] = packet.ReadUInt16("BonusListIDs", indexes, i);
+ }
+ data.Context = packet.ReadByte("Context", indexes);
+ return data;
+ }
+
+ public static ISocketedGem ReadUpdateSocketedGem(Packet packet, params object[] indexes)
+ {
+ var data = new SocketedGem();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(1);
+ var maskMask = new BitArray(rawMaskMask);
+ if (maskMask[0])
+ rawChangesMask[0] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.ItemID = packet.ReadInt32("ItemID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Context = packet.ReadByte("Context", indexes);
+ }
+ }
+ if (changesMask[3])
+ {
+ for (var i = 0; i < 16; ++i)
+ {
+ if (changesMask[4 + i])
+ {
+ data.BonusListIDs[i] = packet.ReadUInt16("BonusListIDs", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public override IItemData ReadCreateItemData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new ItemData();
+ packet.ResetBitReader();
+ data.Owner = packet.ReadPackedGuid128("Owner", indexes);
+ data.ContainedIn = packet.ReadPackedGuid128("ContainedIn", indexes);
+ data.Creator = packet.ReadPackedGuid128("Creator", indexes);
+ data.GiftCreator = packet.ReadPackedGuid128("GiftCreator", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.StackCount = packet.ReadUInt32("StackCount", indexes);
+ data.Expiration = packet.ReadUInt32("Expiration", indexes);
+ for (var i = 0; i < 5; ++i)
+ {
+ data.SpellCharges[i] = packet.ReadInt32("SpellCharges", indexes, i);
+ }
+ }
+ data.DynamicFlags = packet.ReadUInt32("DynamicFlags", indexes);
+ for (var i = 0; i < 13; ++i)
+ {
+ data.Enchantment[i] = ReadCreateItemEnchantment(packet, indexes, "Enchantment", i);
+ }
+ data.PropertySeed = packet.ReadInt32("PropertySeed", indexes);
+ data.RandomPropertiesID = packet.ReadInt32("RandomPropertiesID", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.Durability = packet.ReadUInt32("Durability", indexes);
+ data.MaxDurability = packet.ReadUInt32("MaxDurability", indexes);
+ }
+ data.CreatePlayedTime = packet.ReadUInt32("CreatePlayedTime", indexes);
+ data.Context = packet.ReadByte("Context", indexes);
+ data.CreateTime = packet.ReadInt64("CreateTime", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.ArtifactXP = packet.ReadUInt64("ArtifactXP", indexes);
+ data.ItemAppearanceModID = packet.ReadByte("ItemAppearanceModID", indexes);
+ }
+ data.ArtifactPowers.Resize(packet.ReadUInt32());
+ data.Gems.Resize(packet.ReadUInt32());
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.ZoneFlags = packet.ReadUInt32("ZoneFlags", indexes);
+ }
+ Substructures.ItemHandler.ReadItemBonusKey(packet, indexes, "ItemBonusKey");
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.DEBUGItemLevel = packet.ReadUInt16("DEBUGItemLevel", indexes);
+ }
+ for (var i = 0; i < data.ArtifactPowers.Count; ++i)
+ {
+ data.ArtifactPowers[i] = ReadCreateArtifactPower(packet, indexes, "ArtifactPowers", i);
+ }
+ for (var i = 0; i < data.Gems.Count; ++i)
+ {
+ data.Gems[i] = ReadCreateSocketedGem(packet, indexes, "Gems", i);
+ }
+ data.Modifiers = ReadCreateItemModList(packet, indexes, "Modifiers");
+ return data;
+ }
+
+ public override IItemData ReadUpdateItemData(Packet packet, params object[] indexes)
+ {
+ var data = new ItemData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[2];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(2);
+ var maskMask = new BitArray(rawMaskMask);
+ for (var i = 0; i < 2; ++i)
+ if (maskMask[i])
+ rawChangesMask[i] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.ArtifactPowers.ReadUpdateMask(packet);
+ }
+ if (changesMask[2])
+ {
+ data.Gems.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.ArtifactPowers.Count; ++i)
+ {
+ if (data.ArtifactPowers.UpdateMask[i])
+ {
+ data.ArtifactPowers[i] = ReadUpdateArtifactPower(packet, indexes, "ArtifactPowers", i);
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.Gems.Count; ++i)
+ {
+ if (data.Gems.UpdateMask[i])
+ {
+ data.Gems[i] = ReadUpdateSocketedGem(packet, indexes, "Gems", i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data.Owner = packet.ReadPackedGuid128("Owner", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.ContainedIn = packet.ReadPackedGuid128("ContainedIn", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.Creator = packet.ReadPackedGuid128("Creator", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.GiftCreator = packet.ReadPackedGuid128("GiftCreator", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.StackCount = packet.ReadUInt32("StackCount", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.Expiration = packet.ReadUInt32("Expiration", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.DynamicFlags = packet.ReadUInt32("DynamicFlags", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.PropertySeed = packet.ReadInt32("PropertySeed", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.RandomPropertiesID = packet.ReadInt32("RandomPropertiesID", indexes);
+ }
+ if (changesMask[12])
+ {
+ data.Durability = packet.ReadUInt32("Durability", indexes);
+ }
+ if (changesMask[13])
+ {
+ data.MaxDurability = packet.ReadUInt32("MaxDurability", indexes);
+ }
+ if (changesMask[14])
+ {
+ data.CreatePlayedTime = packet.ReadUInt32("CreatePlayedTime", indexes);
+ }
+ if (changesMask[15])
+ {
+ data.Context = packet.ReadByte("Context", indexes);
+ }
+ if (changesMask[16])
+ {
+ data.CreateTime = packet.ReadInt64("CreateTime", indexes);
+ }
+ if (changesMask[17])
+ {
+ data.ArtifactXP = packet.ReadUInt64("ArtifactXP", indexes);
+ }
+ if (changesMask[18])
+ {
+ data.ItemAppearanceModID = packet.ReadByte("ItemAppearanceModID", indexes);
+ }
+ if (changesMask[20])
+ {
+ data.ZoneFlags = packet.ReadUInt32("ZoneFlags", indexes);
+ }
+ if (changesMask[21])
+ {
+ Substructures.ItemHandler.ReadItemBonusKey(packet, indexes, "ItemBonusKey");
+ }
+ if (changesMask[22])
+ {
+ data.DEBUGItemLevel = packet.ReadUInt16("DEBUGItemLevel", indexes);
+ }
+ if (changesMask[19])
+ {
+ data.Modifiers = ReadUpdateItemModList(packet, indexes, "Modifiers");
+ }
+ }
+ if (changesMask[23])
+ {
+ for (var i = 0; i < 5; ++i)
+ {
+ if (changesMask[24 + i])
+ {
+ data.SpellCharges[i] = packet.ReadInt32("SpellCharges", indexes, i);
+ }
+ }
+ }
+ if (changesMask[29])
+ {
+ for (var i = 0; i < 13; ++i)
+ {
+ if (changesMask[30 + i])
+ {
+ data.Enchantment[i] = ReadUpdateItemEnchantment(packet, indexes, "Enchantment", i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public override IContainerData ReadCreateContainerData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new ContainerData();
+ packet.ResetBitReader();
+ for (var i = 0; i < 36; ++i)
+ {
+ data.Slots[i] = packet.ReadPackedGuid128("Slots", indexes, i);
+ }
+ data.NumSlots = packet.ReadUInt32("NumSlots", indexes);
+ return data;
+ }
+
+ public override IContainerData ReadUpdateContainerData(Packet packet, params object[] indexes)
+ {
+ var data = new ContainerData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[2];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(2);
+ var maskMask = new BitArray(rawMaskMask);
+ for (var i = 0; i < 2; ++i)
+ if (maskMask[i])
+ rawChangesMask[i] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.NumSlots = packet.ReadUInt32("NumSlots", indexes);
+ }
+ }
+ if (changesMask[2])
+ {
+ for (var i = 0; i < 36; ++i)
+ {
+ if (changesMask[3 + i])
+ {
+ data.Slots[i] = packet.ReadPackedGuid128("Slots", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IUnitChannel ReadCreateUnitChannel(Packet packet, params object[] indexes)
+ {
+ var data = new UnitChannel();
+ packet.ResetBitReader();
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.SpellXSpellVisualID = packet.ReadInt32("SpellXSpellVisualID", indexes);
+ data.StartTimeMs = packet.ReadUInt32("StartTimeMs", indexes);
+ data.Duration = packet.ReadUInt32("Duration", indexes);
+ return data;
+ }
+
+ public static IUnitChannel ReadUpdateUnitChannel(Packet packet, params object[] indexes)
+ {
+ var data = new UnitChannel();
+ packet.ResetBitReader();
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.SpellXSpellVisualID = packet.ReadInt32("SpellXSpellVisualID", indexes);
+ data.StartTimeMs = packet.ReadUInt32("StartTimeMs", indexes);
+ data.Duration = packet.ReadUInt32("Duration", indexes);
+ return data;
+ }
+
+ public static IVisibleItem ReadCreateVisibleItem(Packet packet, params object[] indexes)
+ {
+ var data = new VisibleItem();
+ packet.ResetBitReader();
+ data.ItemID = packet.ReadInt32("ItemID", indexes);
+ data.SecondaryItemModifiedAppearanceID = packet.ReadInt32("SecondaryItemModifiedAppearanceID", indexes);
+ data.ConditionalItemAppearanceID = packet.ReadInt32("ConditionalItemAppearanceID", indexes);
+ data.ItemAppearanceModID = packet.ReadUInt16("ItemAppearanceModID", indexes);
+ data.ItemVisual = packet.ReadUInt16("ItemVisual", indexes);
+ return data;
+ }
+
+ public static IVisibleItem ReadUpdateVisibleItem(Packet packet, params object[] indexes)
+ {
+ var data = new VisibleItem();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(6);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.ItemID = packet.ReadInt32("ItemID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.SecondaryItemModifiedAppearanceID = packet.ReadInt32("SecondaryItemModifiedAppearanceID", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.ConditionalItemAppearanceID = packet.ReadInt32("ConditionalItemAppearanceID", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.ItemAppearanceModID = packet.ReadUInt16("ItemAppearanceModID", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.ItemVisual = packet.ReadUInt16("ItemVisual", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IPassiveSpellHistory ReadCreatePassiveSpellHistory(Packet packet, params object[] indexes)
+ {
+ var data = new PassiveSpellHistory();
+ packet.ResetBitReader();
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.AuraSpellID = packet.ReadInt32("AuraSpellID", indexes);
+ return data;
+ }
+
+ public static IPassiveSpellHistory ReadUpdatePassiveSpellHistory(Packet packet, params object[] indexes)
+ {
+ var data = new PassiveSpellHistory();
+ packet.ResetBitReader();
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.AuraSpellID = packet.ReadInt32("AuraSpellID", indexes);
+ return data;
+ }
+
+ public static IUnitAssistActionData ReadCreateUnitAssistActionData(Packet packet, params object[] indexes)
+ {
+ var data = new UnitAssistActionData();
+ packet.ResetBitReader();
+ data.Type = packet.ReadByte("Type", indexes);
+ data.VirtualRealmAddress = packet.ReadUInt32("VirtualRealmAddress", indexes);
+ data.PlayerName = new string('*', (int)packet.ReadBits(6));
+ packet.ResetBitReader();
+ data.PlayerName = packet.ReadWoWString("PlayerName", data.PlayerName.Length, indexes);
+ return data;
+ }
+
+ public static IUnitAssistActionData ReadUpdateUnitAssistActionData(Packet packet, params object[] indexes)
+ {
+ var data = new UnitAssistActionData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(4);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Type = packet.ReadByte("Type", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.VirtualRealmAddress = packet.ReadUInt32("VirtualRealmAddress", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.PlayerName = new string('*', (int)packet.ReadBits(6));
+ packet.ResetBitReader();
+ data.PlayerName = packet.ReadWoWString("PlayerName", data.PlayerName.Length, indexes);
+ }
+ }
+ return data;
+ }
+
+ public override IUnitData ReadCreateUnitData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new UnitData();
+ packet.ResetBitReader();
+ var hasAssistActionData = false;
+ data.Health = packet.ReadInt64("Health", indexes);
+ data.MaxHealth = packet.ReadInt64("MaxHealth", indexes);
+ data.DisplayID = packet.ReadInt32("DisplayID", indexes);
+ data.NpcFlags = packet.ReadUInt32("NpcFlags", indexes);
+ data.NpcFlags2 = packet.ReadUInt32("NpcFlags2", indexes);
+ data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
+ data.StateAnimID = packet.ReadUInt32("StateAnimID", indexes);
+ data.StateAnimKitID = packet.ReadUInt32("StateAnimKitID", indexes);
+ data.StateWorldEffectIDs = new System.Nullable[packet.ReadUInt32()];
+ for (var i = 0; i < data.StateWorldEffectIDs.Length; ++i)
+ {
+ data.StateWorldEffectIDs[i] = packet.ReadUInt32("StateWorldEffectIDs", indexes, i);
+ }
+ data.Charm = packet.ReadPackedGuid128("Charm", indexes);
+ data.Summon = packet.ReadPackedGuid128("Summon", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.Critter = packet.ReadPackedGuid128("Critter", indexes);
+ }
+ data.CharmedBy = packet.ReadPackedGuid128("CharmedBy", indexes);
+ data.SummonedBy = packet.ReadPackedGuid128("SummonedBy", indexes);
+ data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
+ data.DemonCreator = packet.ReadPackedGuid128("DemonCreator", indexes);
+ data.LookAtControllerTarget = packet.ReadPackedGuid128("LookAtControllerTarget", indexes);
+ data.Target = packet.ReadPackedGuid128("Target", indexes);
+ data.BattlePetCompanionGUID = packet.ReadPackedGuid128("BattlePetCompanionGUID", indexes);
+ data.BattlePetDBID = packet.ReadUInt64("BattlePetDBID", indexes);
+ data.ChannelData = ReadCreateUnitChannel(packet, indexes, "ChannelData");
+ data.SummonedByHomeRealm = packet.ReadUInt32("SummonedByHomeRealm", indexes);
+ data.Race = packet.ReadByte("Race", indexes);
+ data.ClassId = packet.ReadByte("ClassId", indexes);
+ data.PlayerClassId = packet.ReadByte("PlayerClassId", indexes);
+ data.Sex = packet.ReadByte("Sex", indexes);
+ data.DisplayPower = packet.ReadByte("DisplayPower", indexes);
+ data.OverrideDisplayPowerID = packet.ReadUInt32("OverrideDisplayPowerID", indexes);
+ if ((flags & (UpdateFieldFlag.Owner | UpdateFieldFlag.UnitAll)) != UpdateFieldFlag.None)
+ {
+ for (var i = 0; i < 10; ++i)
+ {
+ data.PowerRegenFlatModifier[i] = packet.ReadSingle("PowerRegenFlatModifier", indexes, i);
+ data.PowerRegenInterruptedFlatModifier[i] = packet.ReadSingle("PowerRegenInterruptedFlatModifier", indexes, i);
+ }
+ }
+ for (var i = 0; i < 10; ++i)
+ {
+ data.Power[i] = packet.ReadInt32("Power", indexes, i);
+ data.MaxPower[i] = packet.ReadInt32("MaxPower", indexes, i);
+ data.ModPowerRegen[i] = packet.ReadSingle("ModPowerRegen", indexes, i);
+ }
+ data.Level = packet.ReadInt32("Level", indexes);
+ data.EffectiveLevel = packet.ReadInt32("EffectiveLevel", indexes);
+ data.ContentTuningID = packet.ReadInt32("ContentTuningID", indexes);
+ data.ScalingLevelMin = packet.ReadInt32("ScalingLevelMin", indexes);
+ data.ScalingLevelMax = packet.ReadInt32("ScalingLevelMax", indexes);
+ data.ScalingLevelDelta = packet.ReadInt32("ScalingLevelDelta", indexes);
+ data.ScalingFactionGroup = packet.ReadByte("ScalingFactionGroup", indexes);
+ data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
+ for (var i = 0; i < 3; ++i)
+ {
+ data.VirtualItems[i] = ReadCreateVisibleItem(packet, indexes, "VirtualItems", i);
+ }
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ data.Flags2 = packet.ReadUInt32("Flags2", indexes);
+ data.Flags3 = packet.ReadUInt32("Flags3", indexes);
+ data.Flags4 = packet.ReadUInt32("Flags4", indexes);
+ data.AuraState = packet.ReadUInt32("AuraState", indexes);
+ for (var i = 0; i < 3; ++i)
+ {
+ data.AttackRoundBaseTime[i] = packet.ReadUInt32("AttackRoundBaseTime", indexes, i);
+ }
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.RangedAttackRoundBaseTime = packet.ReadUInt32("RangedAttackRoundBaseTime", indexes);
+ }
+ data.BoundingRadius = packet.ReadSingle("BoundingRadius", indexes);
+ data.CombatReach = packet.ReadSingle("CombatReach", indexes);
+ data.DisplayScale = packet.ReadSingle("DisplayScale", indexes);
+ data.NativeDisplayID = packet.ReadInt32("NativeDisplayID", indexes);
+ data.NativeXDisplayScale = packet.ReadSingle("NativeXDisplayScale", indexes);
+ data.MountDisplayID = packet.ReadInt32("MountDisplayID", indexes);
+ if ((flags & (UpdateFieldFlag.Owner | UpdateFieldFlag.Empath)) != UpdateFieldFlag.None)
+ {
+ data.MinDamage = packet.ReadSingle("MinDamage", indexes);
+ data.MaxDamage = packet.ReadSingle("MaxDamage", indexes);
+ data.MinOffHandDamage = packet.ReadSingle("MinOffHandDamage", indexes);
+ data.MaxOffHandDamage = packet.ReadSingle("MaxOffHandDamage", indexes);
+ }
+ data.StandState = packet.ReadByte("StandState", indexes);
+ data.PetTalentPoints = packet.ReadByte("PetTalentPoints", indexes);
+ data.VisFlags = packet.ReadByte("VisFlags", indexes);
+ data.AnimTier = packet.ReadByte("AnimTier", indexes);
+ data.PetNumber = packet.ReadUInt32("PetNumber", indexes);
+ data.PetNameTimestamp = packet.ReadUInt32("PetNameTimestamp", indexes);
+ data.PetExperience = packet.ReadUInt32("PetExperience", indexes);
+ data.PetNextLevelExperience = packet.ReadUInt32("PetNextLevelExperience", indexes);
+ data.ModCastingSpeed = packet.ReadSingle("ModCastingSpeed", indexes);
+ data.ModSpellHaste = packet.ReadSingle("ModSpellHaste", indexes);
+ data.ModHaste = packet.ReadSingle("ModHaste", indexes);
+ data.ModRangedHaste = packet.ReadSingle("ModRangedHaste", indexes);
+ data.ModHasteRegen = packet.ReadSingle("ModHasteRegen", indexes);
+ data.ModTimeRate = packet.ReadSingle("ModTimeRate", indexes);
+ data.CreatedBySpell = packet.ReadInt32("CreatedBySpell", indexes);
+ data.EmoteState = packet.ReadInt32("EmoteState", indexes);
+ data.TrainingPointsUsed = packet.ReadInt16("TrainingPointsUsed", indexes);
+ data.TrainingPointsTotal = packet.ReadInt16("TrainingPointsTotal", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ for (var i = 0; i < 5; ++i)
+ {
+ data.Stats[i] = packet.ReadInt32("Stats", indexes, i);
+ data.StatPosBuff[i] = packet.ReadInt32("StatPosBuff", indexes, i);
+ data.StatNegBuff[i] = packet.ReadInt32("StatNegBuff", indexes, i);
+ }
+ }
+ if ((flags & (UpdateFieldFlag.Owner | UpdateFieldFlag.Empath)) != UpdateFieldFlag.None)
+ {
+ for (var i = 0; i < 7; ++i)
+ {
+ data.Resistances[i] = packet.ReadInt32("Resistances", indexes, i);
+ }
+ }
+ for (var i = 0; i < 7; ++i)
+ {
+ data.ResistanceBuffModsPositive[i] = packet.ReadInt32("ResistanceBuffModsPositive", indexes, i);
+ data.ResistanceBuffModsNegative[i] = packet.ReadInt32("ResistanceBuffModsNegative", indexes, i);
+ }
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ for (var i = 0; i < 7; ++i)
+ {
+ data.PowerCostModifier[i] = packet.ReadInt32("PowerCostModifier", indexes, i);
+ data.PowerCostMultiplier[i] = packet.ReadSingle("PowerCostMultiplier", indexes, i);
+ }
+ }
+ data.BaseMana = packet.ReadInt32("BaseMana", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.BaseHealth = packet.ReadInt32("BaseHealth", indexes);
+ }
+ data.SheatheState = packet.ReadByte("SheatheState", indexes);
+ data.PvpFlags = packet.ReadByte("PvpFlags", indexes);
+ data.PetFlags = packet.ReadByte("PetFlags", indexes);
+ data.ShapeshiftForm = packet.ReadByte("ShapeshiftForm", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.AttackPower = packet.ReadInt32("AttackPower", indexes);
+ data.AttackPowerModPos = packet.ReadInt32("AttackPowerModPos", indexes);
+ data.AttackPowerModNeg = packet.ReadInt32("AttackPowerModNeg", indexes);
+ data.AttackPowerMultiplier = packet.ReadSingle("AttackPowerMultiplier", indexes);
+ data.RangedAttackPower = packet.ReadInt32("RangedAttackPower", indexes);
+ data.RangedAttackPowerModPos = packet.ReadInt32("RangedAttackPowerModPos", indexes);
+ data.RangedAttackPowerModNeg = packet.ReadInt32("RangedAttackPowerModNeg", indexes);
+ data.RangedAttackPowerMultiplier = packet.ReadSingle("RangedAttackPowerMultiplier", indexes);
+ data.SetAttackSpeedAura = packet.ReadInt32("SetAttackSpeedAura", indexes);
+ data.Lifesteal = packet.ReadSingle("Lifesteal", indexes);
+ data.MinRangedDamage = packet.ReadSingle("MinRangedDamage", indexes);
+ data.MaxRangedDamage = packet.ReadSingle("MaxRangedDamage", indexes);
+ }
+ data.MaxHealthModifier = packet.ReadSingle("MaxHealthModifier", indexes);
+ data.HoverHeight = packet.ReadSingle("HoverHeight", indexes);
+ data.MinItemLevelCutoff = packet.ReadInt32("MinItemLevelCutoff", indexes);
+ data.MinItemLevel = packet.ReadInt32("MinItemLevel", indexes);
+ data.MaxItemLevel = packet.ReadInt32("MaxItemLevel", indexes);
+ data.WildBattlePetLevel = packet.ReadInt32("WildBattlePetLevel", indexes);
+ data.BattlePetCompanionNameTimestamp = packet.ReadUInt32("BattlePetCompanionNameTimestamp", indexes);
+ data.InteractSpellID = packet.ReadInt32("InteractSpellID", indexes);
+ data.ScaleDuration = packet.ReadInt32("ScaleDuration", indexes);
+ data.LooksLikeMountID = packet.ReadInt32("LooksLikeMountID", indexes);
+ data.LooksLikeCreatureID = packet.ReadInt32("LooksLikeCreatureID", indexes);
+ data.LookAtControllerID = packet.ReadInt32("LookAtControllerID", indexes);
+ data.PerksVendorItemID = packet.ReadInt32("PerksVendorItemID", indexes);
+ data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
+ data.PassiveSpells.Resize(packet.ReadUInt32());
+ data.WorldEffects.Resize(packet.ReadUInt32());
+ data.ChannelObjects.Resize(packet.ReadUInt32());
+ data.SkinningOwnerGUID = packet.ReadPackedGuid128("SkinningOwnerGUID", indexes);
+ data.FlightCapabilityID = packet.ReadInt32("FlightCapabilityID", indexes);
+ data.GlideEventSpeedDivisor = packet.ReadSingle("GlideEventSpeedDivisor", indexes);
+ data.DriveCapabilityID = packet.ReadInt32("DriveCapabilityID", indexes);
+ data.SilencedSchoolMask = packet.ReadUInt32("SilencedSchoolMask", indexes);
+ data.CurrentAreaID = packet.ReadUInt32("CurrentAreaID", indexes);
+ if ((flags & UpdateFieldFlag.Owner) != UpdateFieldFlag.None)
+ {
+ data.ComboTarget = packet.ReadPackedGuid128("ComboTarget", indexes);
+ }
+ data.Field_2F0 = packet.ReadSingle("Field_2F0", indexes);
+ data.Field_2F4 = packet.ReadSingle("Field_2F4", indexes);
+
+ for (var i = 0; i < data.PassiveSpells.Count; ++i)
+ {
+ data.PassiveSpells[i] = ReadCreatePassiveSpellHistory(packet, indexes, "PassiveSpells", i);
+ }
+ for (var i = 0; i < data.WorldEffects.Count; ++i)
+ {
+ data.WorldEffects[i] = packet.ReadInt32("WorldEffects", indexes, i);
+ }
+ for (var i = 0; i < data.ChannelObjects.Count; ++i)
+ {
+ data.ChannelObjects[i] = packet.ReadPackedGuid128("ChannelObjects", indexes, i);
+ }
+ hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes);
+ if (hasAssistActionData)
+ {
+ data.AssistActionData = ReadCreateUnitAssistActionData(packet, indexes, "AssistActionData");
+ }
+ return data;
+ }
+
+ public override IUnitData ReadUpdateUnitData(Packet packet, params object[] indexes)
+ {
+ var data = new UnitData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[8];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(8);
+ var maskMask = new BitArray(rawMaskMask);
+ for (var i = 0; i < 8; ++i)
+ if (maskMask[i])
+ rawChangesMask[i] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ var hasAssistActionData = false;
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.StateWorldEffectIDs = Enumerable.Range(0, (int)packet.ReadBits(32)).Select(x => new uint()).Cast>().ToArray();
+ for (var i = 0; i < data.StateWorldEffectIDs.Length; ++i)
+ {
+ data.StateWorldEffectIDs[i] = packet.ReadUInt32("StateWorldEffectIDs", indexes, i);
+ }
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.PassiveSpells.ReadUpdateMask(packet);
+ }
+ if (changesMask[3])
+ {
+ data.WorldEffects.ReadUpdateMask(packet);
+ }
+ if (changesMask[4])
+ {
+ data.ChannelObjects.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.PassiveSpells.Count; ++i)
+ {
+ if (data.PassiveSpells.UpdateMask[i])
+ {
+ data.PassiveSpells[i] = ReadUpdatePassiveSpellHistory(packet, indexes, "PassiveSpells", i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ for (var i = 0; i < data.WorldEffects.Count; ++i)
+ {
+ if (data.WorldEffects.UpdateMask[i])
+ {
+ data.WorldEffects[i] = packet.ReadInt32("WorldEffects", indexes, i);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ for (var i = 0; i < data.ChannelObjects.Count; ++i)
+ {
+ if (data.ChannelObjects.UpdateMask[i])
+ {
+ data.ChannelObjects[i] = packet.ReadPackedGuid128("ChannelObjects", indexes, i);
+ }
+ }
+ }
+ if (changesMask[5])
+ {
+ data.Health = packet.ReadInt64("Health", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.MaxHealth = packet.ReadInt64("MaxHealth", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.DisplayID = packet.ReadInt32("DisplayID", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.NpcFlags = packet.ReadUInt32("NpcFlags", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.NpcFlags2 = packet.ReadUInt32("NpcFlags2", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.StateAnimID = packet.ReadUInt32("StateAnimID", indexes);
+ }
+ if (changesMask[12])
+ {
+ data.StateAnimKitID = packet.ReadUInt32("StateAnimKitID", indexes);
+ }
+ if (changesMask[13])
+ {
+ data.Charm = packet.ReadPackedGuid128("Charm", indexes);
+ }
+ if (changesMask[14])
+ {
+ data.Summon = packet.ReadPackedGuid128("Summon", indexes);
+ }
+ if (changesMask[15])
+ {
+ data.Critter = packet.ReadPackedGuid128("Critter", indexes);
+ }
+ if (changesMask[16])
+ {
+ data.CharmedBy = packet.ReadPackedGuid128("CharmedBy", indexes);
+ }
+ if (changesMask[17])
+ {
+ data.SummonedBy = packet.ReadPackedGuid128("SummonedBy", indexes);
+ }
+ if (changesMask[18])
+ {
+ data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
+ }
+ if (changesMask[19])
+ {
+ data.DemonCreator = packet.ReadPackedGuid128("DemonCreator", indexes);
+ }
+ if (changesMask[20])
+ {
+ data.LookAtControllerTarget = packet.ReadPackedGuid128("LookAtControllerTarget", indexes);
+ }
+ if (changesMask[21])
+ {
+ data.Target = packet.ReadPackedGuid128("Target", indexes);
+ }
+ if (changesMask[22])
+ {
+ data.BattlePetCompanionGUID = packet.ReadPackedGuid128("BattlePetCompanionGUID", indexes);
+ }
+ if (changesMask[23])
+ {
+ data.BattlePetDBID = packet.ReadUInt64("BattlePetDBID", indexes);
+ }
+ if (changesMask[24])
+ {
+ data.ChannelData = ReadUpdateUnitChannel(packet, indexes, "ChannelData");
+ }
+ if (changesMask[25])
+ {
+ data.SummonedByHomeRealm = packet.ReadUInt32("SummonedByHomeRealm", indexes);
+ }
+ if (changesMask[26])
+ {
+ data.Race = packet.ReadByte("Race", indexes);
+ }
+ if (changesMask[27])
+ {
+ data.ClassId = packet.ReadByte("ClassId", indexes);
+ }
+ if (changesMask[28])
+ {
+ data.PlayerClassId = packet.ReadByte("PlayerClassId", indexes);
+ }
+ if (changesMask[29])
+ {
+ data.Sex = packet.ReadByte("Sex", indexes);
+ }
+ if (changesMask[30])
+ {
+ data.DisplayPower = packet.ReadByte("DisplayPower", indexes);
+ }
+ if (changesMask[31])
+ {
+ data.OverrideDisplayPowerID = packet.ReadUInt32("OverrideDisplayPowerID", indexes);
+ }
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
+ {
+ data.Level = packet.ReadInt32("Level", indexes);
+ }
+ if (changesMask[34])
+ {
+ data.EffectiveLevel = packet.ReadInt32("EffectiveLevel", indexes);
+ }
+ if (changesMask[35])
+ {
+ data.ContentTuningID = packet.ReadInt32("ContentTuningID", indexes);
+ }
+ if (changesMask[36])
+ {
+ data.ScalingLevelMin = packet.ReadInt32("ScalingLevelMin", indexes);
+ }
+ if (changesMask[37])
+ {
+ data.ScalingLevelMax = packet.ReadInt32("ScalingLevelMax", indexes);
+ }
+ if (changesMask[38])
+ {
+ data.ScalingLevelDelta = packet.ReadInt32("ScalingLevelDelta", indexes);
+ }
+ if (changesMask[39])
+ {
+ data.ScalingFactionGroup = packet.ReadByte("ScalingFactionGroup", indexes);
+ }
+ if (changesMask[40])
+ {
+ data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
+ }
+ if (changesMask[41])
+ {
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ }
+ if (changesMask[42])
+ {
+ data.Flags2 = packet.ReadUInt32("Flags2", indexes);
+ }
+ if (changesMask[43])
+ {
+ data.Flags3 = packet.ReadUInt32("Flags3", indexes);
+ }
+ if (changesMask[44])
+ {
+ data.Flags4 = packet.ReadUInt32("Flags4", indexes);
+ }
+ if (changesMask[45])
+ {
+ data.AuraState = packet.ReadUInt32("AuraState", indexes);
+ }
+ if (changesMask[46])
+ {
+ data.RangedAttackRoundBaseTime = packet.ReadUInt32("RangedAttackRoundBaseTime", indexes);
+ }
+ if (changesMask[47])
+ {
+ data.BoundingRadius = packet.ReadSingle("BoundingRadius", indexes);
+ }
+ if (changesMask[48])
+ {
+ data.CombatReach = packet.ReadSingle("CombatReach", indexes);
+ }
+ if (changesMask[49])
+ {
+ data.DisplayScale = packet.ReadSingle("DisplayScale", indexes);
+ }
+ if (changesMask[50])
+ {
+ data.NativeDisplayID = packet.ReadInt32("NativeDisplayID", indexes);
+ }
+ if (changesMask[51])
+ {
+ data.NativeXDisplayScale = packet.ReadSingle("NativeXDisplayScale", indexes);
+ }
+ if (changesMask[52])
+ {
+ data.MountDisplayID = packet.ReadInt32("MountDisplayID", indexes);
+ }
+ if (changesMask[53])
+ {
+ data.MinDamage = packet.ReadSingle("MinDamage", indexes);
+ }
+ if (changesMask[54])
+ {
+ data.MaxDamage = packet.ReadSingle("MaxDamage", indexes);
+ }
+ if (changesMask[55])
+ {
+ data.MinOffHandDamage = packet.ReadSingle("MinOffHandDamage", indexes);
+ }
+ if (changesMask[56])
+ {
+ data.MaxOffHandDamage = packet.ReadSingle("MaxOffHandDamage", indexes);
+ }
+ if (changesMask[57])
+ {
+ data.StandState = packet.ReadByte("StandState", indexes);
+ }
+ if (changesMask[58])
+ {
+ data.PetTalentPoints = packet.ReadByte("PetTalentPoints", indexes);
+ }
+ if (changesMask[59])
+ {
+ data.VisFlags = packet.ReadByte("VisFlags", indexes);
+ }
+ if (changesMask[60])
+ {
+ data.AnimTier = packet.ReadByte("AnimTier", indexes);
+ }
+ if (changesMask[61])
+ {
+ data.PetNumber = packet.ReadUInt32("PetNumber", indexes);
+ }
+ if (changesMask[62])
+ {
+ data.PetNameTimestamp = packet.ReadUInt32("PetNameTimestamp", indexes);
+ }
+ if (changesMask[63])
+ {
+ data.PetExperience = packet.ReadUInt32("PetExperience", indexes);
+ }
+ }
+ if (changesMask[64])
+ {
+ if (changesMask[65])
+ {
+ data.PetNextLevelExperience = packet.ReadUInt32("PetNextLevelExperience", indexes);
+ }
+ if (changesMask[66])
+ {
+ data.ModCastingSpeed = packet.ReadSingle("ModCastingSpeed", indexes);
+ }
+ if (changesMask[67])
+ {
+ data.ModSpellHaste = packet.ReadSingle("ModSpellHaste", indexes);
+ }
+ if (changesMask[68])
+ {
+ data.ModHaste = packet.ReadSingle("ModHaste", indexes);
+ }
+ if (changesMask[69])
+ {
+ data.ModRangedHaste = packet.ReadSingle("ModRangedHaste", indexes);
+ }
+ if (changesMask[70])
+ {
+ data.ModHasteRegen = packet.ReadSingle("ModHasteRegen", indexes);
+ }
+ if (changesMask[71])
+ {
+ data.ModTimeRate = packet.ReadSingle("ModTimeRate", indexes);
+ }
+ if (changesMask[72])
+ {
+ data.CreatedBySpell = packet.ReadInt32("CreatedBySpell", indexes);
+ }
+ if (changesMask[73])
+ {
+ data.EmoteState = packet.ReadInt32("EmoteState", indexes);
+ }
+ if (changesMask[74])
+ {
+ data.TrainingPointsUsed = packet.ReadInt16("TrainingPointsUsed", indexes);
+ }
+ if (changesMask[75])
+ {
+ data.TrainingPointsTotal = packet.ReadInt16("TrainingPointsTotal", indexes);
+ }
+ if (changesMask[76])
+ {
+ data.BaseMana = packet.ReadInt32("BaseMana", indexes);
+ }
+ if (changesMask[77])
+ {
+ data.BaseHealth = packet.ReadInt32("BaseHealth", indexes);
+ }
+ if (changesMask[78])
+ {
+ data.SheatheState = packet.ReadByte("SheatheState", indexes);
+ }
+ if (changesMask[79])
+ {
+ data.PvpFlags = packet.ReadByte("PvpFlags", indexes);
+ }
+ if (changesMask[80])
+ {
+ data.PetFlags = packet.ReadByte("PetFlags", indexes);
+ }
+ if (changesMask[81])
+ {
+ data.ShapeshiftForm = packet.ReadByte("ShapeshiftForm", indexes);
+ }
+ if (changesMask[82])
+ {
+ data.AttackPower = packet.ReadInt32("AttackPower", indexes);
+ }
+ if (changesMask[83])
+ {
+ data.AttackPowerModPos = packet.ReadInt32("AttackPowerModPos", indexes);
+ }
+ if (changesMask[84])
+ {
+ data.AttackPowerModNeg = packet.ReadInt32("AttackPowerModNeg", indexes);
+ }
+ if (changesMask[85])
+ {
+ data.AttackPowerMultiplier = packet.ReadSingle("AttackPowerMultiplier", indexes);
+ }
+ if (changesMask[86])
+ {
+ data.RangedAttackPower = packet.ReadInt32("RangedAttackPower", indexes);
+ }
+ if (changesMask[87])
+ {
+ data.RangedAttackPowerModPos = packet.ReadInt32("RangedAttackPowerModPos", indexes);
+ }
+ if (changesMask[88])
+ {
+ data.RangedAttackPowerModNeg = packet.ReadInt32("RangedAttackPowerModNeg", indexes);
+ }
+ if (changesMask[89])
+ {
+ data.RangedAttackPowerMultiplier = packet.ReadSingle("RangedAttackPowerMultiplier", indexes);
+ }
+ if (changesMask[90])
+ {
+ data.SetAttackSpeedAura = packet.ReadInt32("SetAttackSpeedAura", indexes);
+ }
+ if (changesMask[91])
+ {
+ data.Lifesteal = packet.ReadSingle("Lifesteal", indexes);
+ }
+ if (changesMask[92])
+ {
+ data.MinRangedDamage = packet.ReadSingle("MinRangedDamage", indexes);
+ }
+ if (changesMask[93])
+ {
+ data.MaxRangedDamage = packet.ReadSingle("MaxRangedDamage", indexes);
+ }
+ if (changesMask[94])
+ {
+ data.MaxHealthModifier = packet.ReadSingle("MaxHealthModifier", indexes);
+ }
+ if (changesMask[95])
+ {
+ data.HoverHeight = packet.ReadSingle("HoverHeight", indexes);
+ }
+ }
+ if (changesMask[96])
+ {
+ if (changesMask[97])
+ {
+ data.MinItemLevelCutoff = packet.ReadInt32("MinItemLevelCutoff", indexes);
+ }
+ if (changesMask[98])
+ {
+ data.MinItemLevel = packet.ReadInt32("MinItemLevel", indexes);
+ }
+ if (changesMask[99])
+ {
+ data.MaxItemLevel = packet.ReadInt32("MaxItemLevel", indexes);
+ }
+ if (changesMask[100])
+ {
+ data.WildBattlePetLevel = packet.ReadInt32("WildBattlePetLevel", indexes);
+ }
+ if (changesMask[101])
+ {
+ data.BattlePetCompanionNameTimestamp = packet.ReadUInt32("BattlePetCompanionNameTimestamp", indexes);
+ }
+ if (changesMask[102])
+ {
+ data.InteractSpellID = packet.ReadInt32("InteractSpellID", indexes);
+ }
+ if (changesMask[103])
+ {
+ data.ScaleDuration = packet.ReadInt32("ScaleDuration", indexes);
+ }
+ if (changesMask[104])
+ {
+ data.LooksLikeMountID = packet.ReadInt32("LooksLikeMountID", indexes);
+ }
+ if (changesMask[105])
+ {
+ data.LooksLikeCreatureID = packet.ReadInt32("LooksLikeCreatureID", indexes);
+ }
+ if (changesMask[106])
+ {
+ data.LookAtControllerID = packet.ReadInt32("LookAtControllerID", indexes);
+ }
+ if (changesMask[107])
+ {
+ data.PerksVendorItemID = packet.ReadInt32("PerksVendorItemID", indexes);
+ }
+ if (changesMask[108])
+ {
+ data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
+ }
+ if (changesMask[109])
+ {
+ data.SkinningOwnerGUID = packet.ReadPackedGuid128("SkinningOwnerGUID", indexes);
+ }
+ if (changesMask[110])
+ {
+ data.FlightCapabilityID = packet.ReadInt32("FlightCapabilityID", indexes);
+ }
+ if (changesMask[111])
+ {
+ data.GlideEventSpeedDivisor = packet.ReadSingle("GlideEventSpeedDivisor", indexes);
+ }
+ if (changesMask[112])
+ {
+ data.DriveCapabilityID = packet.ReadInt32("DriveCapabilityID", indexes);
+ }
+ if (changesMask[113])
+ {
+ data.SilencedSchoolMask = packet.ReadUInt32("SilencedSchoolMask", indexes);
+ }
+ if (changesMask[114])
+ {
+ data.CurrentAreaID = packet.ReadUInt32("CurrentAreaID", indexes);
+ }
+ if (changesMask[115])
+ {
+ data.ComboTarget = packet.ReadPackedGuid128("ComboTarget", indexes);
+ }
+ if (changesMask[116])
+ {
+ data.Field_2F0 = packet.ReadSingle("Field_2F0", indexes);
+ }
+ if (changesMask[117])
+ {
+ data.Field_2F4 = packet.ReadSingle("Field_2F4", indexes);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[96])
+ {
+ hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes);
+ if (changesMask[118])
+ {
+ if (hasAssistActionData)
+ {
+ data.AssistActionData = ReadUpdateUnitAssistActionData(packet, indexes, "AssistActionData");
+ }
+ }
+ }
+ if (changesMask[119])
+ {
+ for (var i = 0; i < 10; ++i)
+ {
+ if (changesMask[120 + i])
+ {
+ data.PowerRegenFlatModifier[i] = packet.ReadSingle("PowerRegenFlatModifier", indexes, i);
+ }
+ if (changesMask[130 + i])
+ {
+ data.PowerRegenInterruptedFlatModifier[i] = packet.ReadSingle("PowerRegenInterruptedFlatModifier", indexes, i);
+ }
+ if (changesMask[140 + i])
+ {
+ data.Power[i] = packet.ReadInt32("Power", indexes, i);
+ }
+ if (changesMask[150 + i])
+ {
+ data.MaxPower[i] = packet.ReadInt32("MaxPower", indexes, i);
+ }
+ if (changesMask[160 + i])
+ {
+ data.ModPowerRegen[i] = packet.ReadSingle("ModPowerRegen", indexes, i);
+ }
+ }
+ }
+ if (changesMask[170])
+ {
+ for (var i = 0; i < 3; ++i)
+ {
+ if (changesMask[171 + i])
+ {
+ data.VirtualItems[i] = ReadUpdateVisibleItem(packet, indexes, "VirtualItems", i);
+ }
+ }
+ }
+ if (changesMask[174])
+ {
+ for (var i = 0; i < 3; ++i)
+ {
+ if (changesMask[175 + i])
+ {
+ data.AttackRoundBaseTime[i] = packet.ReadUInt32("AttackRoundBaseTime", indexes, i);
+ }
+ }
+ }
+ if (changesMask[178])
+ {
+ for (var i = 0; i < 5; ++i)
+ {
+ if (changesMask[179 + i])
+ {
+ data.Stats[i] = packet.ReadInt32("Stats", indexes, i);
+ }
+ if (changesMask[184 + i])
+ {
+ data.StatPosBuff[i] = packet.ReadInt32("StatPosBuff", indexes, i);
+ }
+ if (changesMask[189 + i])
+ {
+ data.StatNegBuff[i] = packet.ReadInt32("StatNegBuff", indexes, i);
+ }
+ }
+ }
+ if (changesMask[194])
+ {
+ for (var i = 0; i < 7; ++i)
+ {
+ if (changesMask[195 + i])
+ {
+ data.Resistances[i] = packet.ReadInt32("Resistances", indexes, i);
+ }
+ if (changesMask[202 + i])
+ {
+ data.ResistanceBuffModsPositive[i] = packet.ReadInt32("ResistanceBuffModsPositive", indexes, i);
+ }
+ if (changesMask[209 + i])
+ {
+ data.ResistanceBuffModsNegative[i] = packet.ReadInt32("ResistanceBuffModsNegative", indexes, i);
+ }
+ if (changesMask[216 + i])
+ {
+ data.PowerCostModifier[i] = packet.ReadInt32("PowerCostModifier", indexes, i);
+ }
+ if (changesMask[223 + i])
+ {
+ data.PowerCostMultiplier[i] = packet.ReadSingle("PowerCostMultiplier", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IChrCustomizationChoice ReadCreateChrCustomizationChoice(Packet packet, params object[] indexes)
+ {
+ var data = new ChrCustomizationChoice();
+ packet.ResetBitReader();
+ data.ChrCustomizationOptionID = packet.ReadUInt32("ChrCustomizationOptionID", indexes);
+ data.ChrCustomizationChoiceID = packet.ReadUInt32("ChrCustomizationChoiceID", indexes);
+ return data;
+ }
+
+ public static IChrCustomizationChoice ReadUpdateChrCustomizationChoice(Packet packet, params object[] indexes)
+ {
+ var data = new ChrCustomizationChoice();
+ packet.ResetBitReader();
+ data.ChrCustomizationOptionID = packet.ReadUInt32("ChrCustomizationOptionID", indexes);
+ data.ChrCustomizationChoiceID = packet.ReadUInt32("ChrCustomizationChoiceID", indexes);
+ return data;
+ }
+
+ public static IQuestLog ReadCreateQuestLog(Packet packet, params object[] indexes)
+ {
+ var data = new QuestLog();
+ packet.ResetBitReader();
+
+ data.QuestID = packet.ReadInt32("QuestID", indexes);
+ data.StateFlags = packet.ReadUInt16("StateFlags", indexes);
+ for (var i = 0; i < 24; ++i)
+ {
+ data.ObjectiveProgress[i] = packet.ReadInt16("ObjectiveProgress", indexes, i);
+ }
+ data.EndTime = packet.ReadInt64("EndTime", indexes);
+ data.ObjectiveFlags = packet.ReadUInt32("ObjectiveFlags", indexes);
+ return data;
+ }
+
+ public static IQuestLog ReadUpdateQuestLog(Packet packet, params object[] indexes)
+ {
+ var data = new QuestLog();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(1);
+ var maskMask = new BitArray(rawMaskMask);
+ if (maskMask[0])
+ rawChangesMask[0] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.EndTime = packet.ReadInt64("EndTime", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.QuestID = packet.ReadInt32("QuestID", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.StateFlags = packet.ReadUInt32("StateFlags", indexes);
+ }
+ }
+ if (changesMask[4])
+ {
+ for (var i = 0; i < 24; ++i)
+ {
+ if (changesMask[5 + i])
+ {
+ data.ObjectiveProgress[i] = packet.ReadInt16("ObjectiveProgress", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IArenaCooldown ReadCreateArenaCooldown(Packet packet, params object[] indexes)
+ {
+ var data = new ArenaCooldown();
+ packet.ResetBitReader();
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.ItemID = packet.ReadInt32("ItemID", indexes);
+ data.Charges = packet.ReadInt32("Charges", indexes);
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ data.StartTime = packet.ReadUInt32("StartTime", indexes);
+ data.EndTime = packet.ReadUInt32("EndTime", indexes);
+ data.NextChargeTime = packet.ReadUInt32("NextChargeTime", indexes);
+ data.MaxCharges = packet.ReadByte("MaxCharges", indexes);
+ return data;
+ }
+
+ public static IArenaCooldown ReadUpdateArenaCooldown(Packet packet, params object[] indexes)
+ {
+ var data = new ArenaCooldown();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(9);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.ItemID = packet.ReadInt32("ItemID", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.Charges = packet.ReadInt32("Charges", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.StartTime = packet.ReadUInt32("StartTime", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.EndTime = packet.ReadUInt32("EndTime", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.NextChargeTime = packet.ReadUInt32("NextChargeTime", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.MaxCharges = packet.ReadByte("MaxCharges", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IZonePlayerForcedReaction ReadCreateZonePlayerForcedReaction(Packet packet, params object[] indexes)
+ {
+ var data = new ZonePlayerForcedReaction();
+ packet.ResetBitReader();
+ data.FactionID = packet.ReadInt32("FactionID", indexes);
+ data.Reaction = packet.ReadInt32("Reaction", indexes);
+ return data;
+ }
+
+ public static IZonePlayerForcedReaction ReadUpdateZonePlayerForcedReaction(Packet packet, params object[] indexes)
+ {
+ var data = new ZonePlayerForcedReaction();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.FactionID = packet.ReadInt32("FactionID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Reaction = packet.ReadInt32("Reaction", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static ILeaverInfo ReadCreateLeaverInfo(Packet packet, params object[] indexes)
+ {
+ var data = new LeaverInfo();
+ packet.ResetBitReader();
+ data.BnetAccountGUID = packet.ReadPackedGuid128("BnetAccountGUID", indexes);
+ data.LeaveScore = packet.ReadSingle("LeaveScore", indexes);
+ data.SeasonID = packet.ReadUInt32("SeasonID", indexes);
+ data.TotalLeaves = packet.ReadUInt32("TotalLeaves", indexes);
+ data.TotalSuccesses = packet.ReadUInt32("TotalSuccesses", indexes);
+ data.ConsecutiveSuccesses = packet.ReadInt32("ConsecutiveSuccesses", indexes);
+ data.LastPenaltyTime = packet.ReadInt64("LastPenaltyTime", indexes);
+ data.LeaverExpirationTime = packet.ReadInt64("LeaverExpirationTime", indexes);
+ data.Unknown_1120 = packet.ReadInt32("Unknown_1120", indexes);
+ data.LeaverStatus = packet.ReadBits("LeaverStatus", 1, indexes);
+ return data;
+ }
+
+ public static ILeaverInfo ReadUpdateLeaverInfo(Packet packet, params object[] indexes)
+ {
+ var data = new LeaverInfo();
+ packet.ResetBitReader();
+ data.BnetAccountGUID = packet.ReadPackedGuid128("BnetAccountGUID", indexes);
+ data.LeaveScore = packet.ReadSingle("LeaveScore", indexes);
+ data.SeasonID = packet.ReadUInt32("SeasonID", indexes);
+ data.TotalLeaves = packet.ReadUInt32("TotalLeaves", indexes);
+ data.TotalSuccesses = packet.ReadUInt32("TotalSuccesses", indexes);
+ data.ConsecutiveSuccesses = packet.ReadInt32("ConsecutiveSuccesses", indexes);
+ data.LastPenaltyTime = packet.ReadInt64("LastPenaltyTime", indexes);
+ data.LeaverExpirationTime = packet.ReadInt64("LeaverExpirationTime", indexes);
+ data.Unknown_1120 = packet.ReadInt32("Unknown_1120", indexes);
+ data.LeaverStatus = packet.ReadBits("LeaverStatus", 1, indexes);
+ return data;
+ }
+
+ public static IPetCreatureName ReadCreatePetCreatureName(Packet packet, params object[] indexes)
+ {
+ var data = new PetCreatureName();
+ packet.ResetBitReader();
+ data.CreatureID = packet.ReadUInt32("CreatureID", indexes);
+ data.Name = new string('*', (int)packet.ReadBits(8));
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ return data;
+ }
+
+ public static IPetCreatureName ReadUpdatePetCreatureName(Packet packet, params object[] indexes)
+ {
+ var data = new PetCreatureName();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.CreatureID = packet.ReadUInt32("CreatureID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Name = new string('*', (int)packet.ReadBits(8));
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IDeclinedNames ReadCreateDeclinedNames(Packet packet, params object[] indexes)
+ {
+ var data = new DeclinedNames();
+ packet.ResetBitReader();
+ for (var i = 0; i < 5; ++i)
+ {
+ data.Name[i] = new string('*', (int)packet.ReadBits(10));
+ }
+ for (var i = 0; i < 5; ++i)
+ {
+ data.Name[i] = packet.ReadWoWString("Name", data.Name[i].Length, indexes, i);
+ }
+ return data;
+ }
+
+ public static IDeclinedNames ReadUpdateDeclinedNames(Packet packet, params object[] indexes)
+ {
+ var data = new DeclinedNames();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(1);
+ var maskMask = new BitArray(rawMaskMask);
+ if (maskMask[0])
+ rawChangesMask[0] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ for (var i = 0; i < 5; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data.Name[i] = new string('*', (int)packet.ReadBits(10));
+ }
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ for (var i = 0; i < 5; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data.Name[i] = packet.ReadWoWString("Name", data.Name[i].Length, indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static ICustomTabardInfo ReadCreateCustomTabardInfo(Packet packet, params object[] indexes)
+ {
+ var data = new CustomTabardInfo();
+ packet.ResetBitReader();
+ data.EmblemStyle = packet.ReadInt32("EmblemStyle", indexes);
+ data.EmblemColor = packet.ReadInt32("EmblemColor", indexes);
+ data.BorderStyle = packet.ReadInt32("BorderStyle", indexes);
+ data.BorderColor = packet.ReadInt32("BorderColor", indexes);
+ data.BackgroundColor = packet.ReadInt32("BackgroundColor", indexes);
+ return data;
+ }
+
+ public static ICustomTabardInfo ReadUpdateCustomTabardInfo(Packet packet, params object[] indexes)
+ {
+ var data = new CustomTabardInfo();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(5);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ data.EmblemStyle = packet.ReadInt32("EmblemStyle", indexes);
+ }
+ if (changesMask[1])
+ {
+ data.EmblemColor = packet.ReadInt32("EmblemColor", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.BorderStyle = packet.ReadInt32("BorderStyle", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.BorderColor = packet.ReadInt32("BorderColor", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.BackgroundColor = packet.ReadInt32("BackgroundColor", indexes);
+ }
+ return data;
+ }
+
+ public override IPlayerData ReadCreatePlayerData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new PlayerData();
+ packet.ResetBitReader();
+ var hasDeclinedNames = false;
+ data.DuelArbiter = packet.ReadPackedGuid128("DuelArbiter", indexes);
+ data.WowAccount = packet.ReadPackedGuid128("WowAccount", indexes);
+ data.BnetAccount = packet.ReadPackedGuid128("BnetAccount", indexes);
+ data.GuildClubMemberID = packet.ReadUInt64("GuildClubMemberID", indexes);
+ data.LootTargetGUID = packet.ReadPackedGuid128("LootTargetGUID", indexes);
+ data.PlayerFlags = packet.ReadUInt32("PlayerFlags", indexes);
+ data.PlayerFlagsEx = packet.ReadUInt32("PlayerFlagsEx", indexes);
+ data.GuildRankID = packet.ReadUInt32("GuildRankID", indexes);
+ data.GuildDeleteDate = packet.ReadUInt32("GuildDeleteDate", indexes);
+ data.GuildLevel = packet.ReadInt32("GuildLevel", indexes);
+ data.Customizations.Resize(packet.ReadUInt32());
+ for (var i = 0; i < 2; ++i)
+ {
+ data.PartyType[i] = packet.ReadByte("PartyType", indexes, i);
+ }
+ data.NumBankSlots = packet.ReadByte("NumBankSlots", indexes);
+ data.NativeSex = packet.ReadByte("NativeSex", indexes);
+ data.Inebriation = packet.ReadByte("Inebriation", indexes);
+ data.PvpTitle = packet.ReadByte("PvpTitle", indexes);
+ data.ArenaFaction = packet.ReadByte("ArenaFaction", indexes);
+ data.PvpRank = packet.ReadByte("PvpRank", indexes);
+ data.Field_88 = packet.ReadInt32("Field_88", indexes);
+ data.DuelTeam = packet.ReadUInt32("DuelTeam", indexes);
+ data.GuildTimeStamp = packet.ReadInt32("GuildTimeStamp", indexes);
+ if ((flags & UpdateFieldFlag.PartyMember) != UpdateFieldFlag.None)
+ {
+ for (var i = 0; i < 25; ++i)
+ {
+ data.QuestLog[i] = ReadCreateQuestLog(packet, indexes, "QuestLog", i);
+ }
+ }
+ for (var i = 0; i < 19; ++i)
+ {
+ data.VisibleItems[i] = ReadCreateVisibleItem(packet, indexes, "VisibleItems", i);
+ }
+ data.PlayerTitle = packet.ReadInt32("PlayerTitle", indexes);
+ data.FakeInebriation = packet.ReadInt32("FakeInebriation", indexes);
+ data.VirtualPlayerRealm = packet.ReadUInt32("VirtualPlayerRealm", indexes);
+ data.CurrentSpecID = packet.ReadUInt32("CurrentSpecID", indexes);
+ data.CurrentCombatTraitConfigSubTreeID = packet.ReadInt32("CurrentCombatTraitConfigSubTreeID", indexes);
+ data.TaxiMountAnimKitID = packet.ReadInt32("TaxiMountAnimKitID", indexes);
+ for (var i = 0; i < 6; ++i)
+ {
+ data.AvgItemLevel[i] = packet.ReadSingle("AvgItemLevel", indexes, i);
+ }
+ data.CurrentBattlePetBreedQuality = packet.ReadByte("CurrentBattlePetBreedQuality", indexes);
+ data.HonorLevel = packet.ReadInt32("HonorLevel", indexes);
+ data.LogoutTime = packet.ReadInt64("LogoutTime", indexes);
+ data.ArenaCooldowns.Resize(packet.ReadUInt32());
+ for (var i = 0; i < 32; ++i)
+ {
+ data.ForcedReactions[i] = ReadCreateZonePlayerForcedReaction(packet, indexes, "ForcedReactions", i);
+ }
+ data.Field_13C = packet.ReadInt32("Field_13C", indexes);
+ data.Field_140 = packet.ReadInt32("Field_140", indexes);
+ data.CurrentBattlePetSpeciesID = packet.ReadInt32("CurrentBattlePetSpeciesID", indexes);
+ data.PetNames.Resize(packet.ReadUInt32());
+ data.VisualItemReplacements.Resize(packet.ReadUInt32());
+ for (var i = 0; i < 19; ++i)
+ {
+ data.Field_3120[i] = packet.ReadUInt32("Field_3120", indexes, i);
+ }
+ data.PersonalTabard = ReadCreateCustomTabardInfo(packet, indexes, "PersonalTabard");
+ for (var i = 0; i < data.Customizations.Count; ++i)
+ {
+ data.Customizations[i] = ReadCreateChrCustomizationChoice(packet, indexes, "Customizations", i);
+ }
+ for (var i = 0; i < data.ArenaCooldowns.Count; ++i)
+ {
+ data.ArenaCooldowns[i] = ReadCreateArenaCooldown(packet, indexes, "ArenaCooldowns", i);
+ }
+ for (var i = 0; i < data.VisualItemReplacements.Count; ++i)
+ {
+ data.VisualItemReplacements[i] = packet.ReadInt32("VisualItemReplacements", indexes, i);
+ }
+ data.Name = new string('*', (int)packet.ReadBits(6));
+ data.HasLevelLink = packet.ReadBit("HasLevelLink", indexes);
+ hasDeclinedNames = packet.ReadBit("HasDeclinedNames", indexes);
+ Substructures.MythicPlusHandler.ReadDungeonScoreSummary(packet, indexes, "DungeonScore");
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ data.LeaverInfo = ReadCreateLeaverInfo(packet, indexes, "LeaverInfo");
+ for (var i = 0; i < data.PetNames.Count; ++i)
+ {
+ data.PetNames[i] = ReadCreatePetCreatureName(packet, indexes, "PetNames", i);
+ }
+ if (hasDeclinedNames)
+ {
+ data.DeclinedNames = ReadCreateDeclinedNames(packet, indexes, "DeclinedNames");
+ }
+ return data;
+ }
+
+ public override IPlayerData ReadUpdatePlayerData(Packet packet, params object[] indexes)
+ {
+ var data = new PlayerData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[5];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(5);
+ var maskMask = new BitArray(rawMaskMask);
+ for (var i = 0; i < 5; ++i)
+ if (maskMask[i])
+ rawChangesMask[i] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ var noQuestLogChangesMask = packet.ReadBit();
+ var hasDeclinedNames = false;
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.HasLevelLink = packet.ReadBit("HasLevelLink", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Customizations.ReadUpdateMask(packet);
+ }
+ if (changesMask[3])
+ {
+ data.ArenaCooldowns.ReadUpdateMask(packet);
+ }
+ if (changesMask[4])
+ {
+ data.PetNames.ReadUpdateMask(packet);
+ }
+ if (changesMask[5])
+ {
+ data.VisualItemReplacements.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.Customizations.Count; ++i)
+ {
+ if (data.Customizations.UpdateMask[i])
+ {
+ data.Customizations[i] = ReadUpdateChrCustomizationChoice(packet, indexes, "Customizations", i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ for (var i = 0; i < data.ArenaCooldowns.Count; ++i)
+ {
+ if (data.ArenaCooldowns.UpdateMask[i])
+ {
+ data.ArenaCooldowns[i] = ReadUpdateArenaCooldown(packet, indexes, "ArenaCooldowns", i);
+ }
+ }
+ }
+ if (changesMask[5])
+ {
+ for (var i = 0; i < data.VisualItemReplacements.Count; ++i)
+ {
+ if (data.VisualItemReplacements.UpdateMask[i])
+ {
+ data.VisualItemReplacements[i] = packet.ReadInt32("VisualItemReplacements", indexes, i);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ for (var i = 0; i < data.PetNames.Count; ++i)
+ {
+ if (data.PetNames.UpdateMask[i])
+ {
+ data.PetNames[i] = ReadUpdatePetCreatureName(packet, indexes, "PetNames", i);
+ }
+ }
+ }
+ if (changesMask[6])
+ {
+ data.DuelArbiter = packet.ReadPackedGuid128("DuelArbiter", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.WowAccount = packet.ReadPackedGuid128("WowAccount", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.BnetAccount = packet.ReadPackedGuid128("BnetAccount", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.GuildClubMemberID = packet.ReadUInt64("GuildClubMemberID", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.LootTargetGUID = packet.ReadPackedGuid128("LootTargetGUID", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.PlayerFlags = packet.ReadUInt32("PlayerFlags", indexes);
+ }
+ if (changesMask[12])
+ {
+ data.PlayerFlagsEx = packet.ReadUInt32("PlayerFlagsEx", indexes);
+ }
+ if (changesMask[13])
+ {
+ data.GuildRankID = packet.ReadUInt32("GuildRankID", indexes);
+ }
+ if (changesMask[14])
+ {
+ data.GuildDeleteDate = packet.ReadUInt32("GuildDeleteDate", indexes);
+ }
+ if (changesMask[15])
+ {
+ data.GuildLevel = packet.ReadInt32("GuildLevel", indexes);
+ }
+ if (changesMask[16])
+ {
+ data.NumBankSlots = packet.ReadByte("NumBankSlots", indexes);
+ }
+ if (changesMask[17])
+ {
+ data.NativeSex = packet.ReadByte("NativeSex", indexes);
+ }
+ if (changesMask[18])
+ {
+ data.Inebriation = packet.ReadByte("Inebriation", indexes);
+ }
+ if (changesMask[19])
+ {
+ data.PvpTitle = packet.ReadByte("PvpTitle", indexes);
+ }
+ if (changesMask[20])
+ {
+ data.ArenaFaction = packet.ReadByte("ArenaFaction", indexes);
+ }
+ if (changesMask[21])
+ {
+ data.PvpRank = packet.ReadByte("PvpRank", indexes);
+ }
+ if (changesMask[22])
+ {
+ data.Field_88 = packet.ReadInt32("Field_88", indexes);
+ }
+ if (changesMask[23])
+ {
+ data.DuelTeam = packet.ReadUInt32("DuelTeam", indexes);
+ }
+ if (changesMask[24])
+ {
+ data.GuildTimeStamp = packet.ReadInt32("GuildTimeStamp", indexes);
+ }
+ if (changesMask[25])
+ {
+ data.PlayerTitle = packet.ReadInt32("PlayerTitle", indexes);
+ }
+ if (changesMask[26])
+ {
+ data.FakeInebriation = packet.ReadInt32("FakeInebriation", indexes);
+ }
+ if (changesMask[27])
+ {
+ data.VirtualPlayerRealm = packet.ReadUInt32("VirtualPlayerRealm", indexes);
+ }
+ if (changesMask[28])
+ {
+ data.CurrentSpecID = packet.ReadUInt32("CurrentSpecID", indexes);
+ }
+ if (changesMask[29])
+ {
+ data.CurrentCombatTraitConfigSubTreeID = packet.ReadInt32("CurrentCombatTraitConfigSubTreeID", indexes);
+ }
+ if (changesMask[30])
+ {
+ data.TaxiMountAnimKitID = packet.ReadInt32("TaxiMountAnimKitID", indexes);
+ }
+ if (changesMask[31])
+ {
+ data.CurrentBattlePetBreedQuality = packet.ReadByte("CurrentBattlePetBreedQuality", indexes);
+ }
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
+ {
+ data.HonorLevel = packet.ReadInt32("HonorLevel", indexes);
+ }
+ if (changesMask[34])
+ {
+ data.LogoutTime = packet.ReadInt64("LogoutTime", indexes);
+ }
+ if (changesMask[36])
+ {
+ data.Field_13C = packet.ReadInt32("Field_13C", indexes);
+ }
+ if (changesMask[37])
+ {
+ data.Field_140 = packet.ReadInt32("Field_140", indexes);
+ }
+ if (changesMask[38])
+ {
+ data.CurrentBattlePetSpeciesID = packet.ReadInt32("CurrentBattlePetSpeciesID", indexes);
+ }
+ if (changesMask[42])
+ {
+ data.PersonalTabard = ReadUpdateCustomTabardInfo(packet, indexes, "PersonalTabard");
+ }
+ if (changesMask[35])
+ {
+ data.Name = new string('*', (int)packet.ReadBits(6));
+ }
+ hasDeclinedNames = packet.ReadBit("HasDeclinedNames", indexes);
+ packet.ResetBitReader();
+ if (changesMask[39])
+ {
+ Substructures.MythicPlusHandler.ReadDungeonScoreSummary(packet, indexes, "DungeonScore");
+ }
+ if (changesMask[35])
+ {
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ }
+ if (changesMask[40])
+ {
+ data.LeaverInfo = ReadUpdateLeaverInfo(packet, indexes, "LeaverInfo");
+ }
+ if (changesMask[41])
+ {
+ if (hasDeclinedNames)
+ {
+ data.DeclinedNames = ReadUpdateDeclinedNames(packet, indexes, "DeclinedNames");
+ }
+ }
+ }
+ if (changesMask[43])
+ {
+ for (var i = 0; i < 2; ++i)
+ {
+ if (changesMask[44 + i])
+ {
+ data.PartyType[i] = packet.ReadByte("PartyType", indexes, i);
+ }
+ }
+ }
+ if (changesMask[46])
+ {
+ for (var i = 0; i < 25; ++i)
+ {
+ if (changesMask[47 + i])
+ {
+ if (noQuestLogChangesMask)
+ data.QuestLog[i] = ReadCreateQuestLog(packet, indexes, "QuestLog", i);
+ else
+ data.QuestLog[i] = ReadUpdateQuestLog(packet, indexes, "QuestLog", i);
+ }
+ }
+ }
+ if (changesMask[72])
+ {
+ for (var i = 0; i < 19; ++i)
+ {
+ if (changesMask[73 + i])
+ {
+ data.VisibleItems[i] = ReadUpdateVisibleItem(packet, indexes, "VisibleItems", i);
+ }
+ }
+ }
+ if (changesMask[92])
+ {
+ for (var i = 0; i < 6; ++i)
+ {
+ if (changesMask[93 + i])
+ {
+ data.AvgItemLevel[i] = packet.ReadSingle("AvgItemLevel", indexes, i);
+ }
+ }
+ }
+ if (changesMask[99])
+ {
+ for (var i = 0; i < 32; ++i)
+ {
+ if (changesMask[100 + i])
+ {
+ data.ForcedReactions[i] = ReadUpdateZonePlayerForcedReaction(packet, indexes, "ForcedReactions", i);
+ }
+ }
+ }
+ if (changesMask[132])
+ {
+ for (var i = 0; i < 19; ++i)
+ {
+ if (changesMask[133 + i])
+ {
+ data.Field_3120[i] = packet.ReadUInt32("Field_3120", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static ISkillInfo ReadCreateSkillInfo(Packet packet, params object[] indexes)
+ {
+ var data = new SkillInfo();
+ packet.ResetBitReader();
+ for (var i = 0; i < 256; ++i)
+ {
+ data.SkillLineID[i] = packet.ReadUInt16("SkillLineID", indexes, i);
+ data.SkillStep[i] = packet.ReadUInt16("SkillStep", indexes, i);
+ data.SkillRank[i] = packet.ReadUInt16("SkillRank", indexes, i);
+ data.SkillStartingRank[i] = packet.ReadUInt16("SkillStartingRank", indexes, i);
+ data.SkillMaxRank[i] = packet.ReadUInt16("SkillMaxRank", indexes, i);
+ data.SkillTempBonus[i] = packet.ReadInt16("SkillTempBonus", indexes, i);
+ data.SkillPermBonus[i] = packet.ReadUInt16("SkillPermBonus", indexes, i);
+ }
+ return data;
+ }
+
+ public static ISkillInfo ReadUpdateSkillInfo(Packet packet, params object[] indexes)
+ {
+ var data = new SkillInfo();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[57];
+ var rawMaskMask = new int[2];
+ for (var i = 0; i < 1; ++i)
+ rawMaskMask[i] = packet.ReadInt32();
+ rawMaskMask[1] = (int)packet.ReadBits(25);
+ var maskMask = new BitArray(rawMaskMask);
+ for (var i = 0; i < 57; ++i)
+ if (maskMask[i])
+ rawChangesMask[i] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ for (var i = 0; i < 256; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data.SkillLineID[i] = packet.ReadUInt16("SkillLineID", indexes, i);
+ }
+ if (changesMask[257 + i])
+ {
+ data.SkillStep[i] = packet.ReadUInt16("SkillStep", indexes, i);
+ }
+ if (changesMask[513 + i])
+ {
+ data.SkillRank[i] = packet.ReadUInt16("SkillRank", indexes, i);
+ }
+ if (changesMask[769 + i])
+ {
+ data.SkillStartingRank[i] = packet.ReadUInt16("SkillStartingRank", indexes, i);
+ }
+ if (changesMask[1025 + i])
+ {
+ data.SkillMaxRank[i] = packet.ReadUInt16("SkillMaxRank", indexes, i);
+ }
+ if (changesMask[1281 + i])
+ {
+ data.SkillTempBonus[i] = packet.ReadInt16("SkillTempBonus", indexes, i);
+ }
+ if (changesMask[1537 + i])
+ {
+ data.SkillPermBonus[i] = packet.ReadUInt16("SkillPermBonus", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IBitVector ReadCreateBitVector(Packet packet, params object[] indexes)
+ {
+ var data = new BitVector();
+ packet.ResetBitReader();
+ data.Values.Resize(packet.ReadUInt32());
+ for (var i = 0; i < data.Values.Count; ++i)
+ {
+ data.Values[i] = packet.ReadUInt64("Values", indexes, i);
+ }
+ return data;
+ }
+
+ public static IBitVector ReadUpdateBitVector(Packet packet, params object[] indexes)
+ {
+ var data = new BitVector();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(2);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Values.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.Values.Count; ++i)
+ {
+ if (data.Values.UpdateMask[i])
+ {
+ data.Values[i] = packet.ReadUInt64("Values", indexes, i);
+ }
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IBitVectors ReadCreateBitVectors(Packet packet, params object[] indexes)
+ {
+ var data = new BitVectors();
+ packet.ResetBitReader();
+ for (var i = 0; i < 13; ++i)
+ {
+ data.Values[i] = ReadCreateBitVector(packet, indexes, "Values", i);
+ }
+ return data;
+ }
+
+ public static IBitVectors ReadUpdateBitVectors(Packet packet, params object[] indexes)
+ {
+ var data = new BitVectors();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(1);
+ var maskMask = new BitArray(rawMaskMask);
+ if (maskMask[0])
+ rawChangesMask[0] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ for (var i = 0; i < 13; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data.Values[i] = ReadUpdateBitVector(packet, indexes, "Values", i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IPlayerDataElement ReadCreatePlayerDataElement(Packet packet, params object[] indexes)
+ {
+ var data = new PlayerDataElement();
+ packet.ResetBitReader();
+ data.Type = packet.ReadUInt32("Type", indexes);
+ if (data.Type == 1)
+ {
+ data.FloatValue = packet.ReadSingle("FloatValue", indexes);
+ }
+ if (data.Type == 0)
+ {
+ data.Int64Value = packet.ReadInt64("Int64Value", indexes);
+ }
+ return data;
+ }
+
+ public static IPlayerDataElement ReadUpdatePlayerDataElement(Packet packet, params object[] indexes)
+ {
+ var data = new PlayerDataElement();
+ packet.ResetBitReader();
+ data.Type = packet.ReadUInt32("Type", indexes);
+ if (data.Type == 1)
+ {
+ data.FloatValue = packet.ReadSingle("FloatValue", indexes);
+ }
+ if (data.Type == 0)
+ {
+ data.Int64Value = packet.ReadInt64("Int64Value", indexes);
+ }
+ return data;
+ }
+
+ public static IRestInfo ReadCreateRestInfo(Packet packet, params object[] indexes)
+ {
+ var data = new RestInfo();
+ packet.ResetBitReader();
+ data.Threshold = packet.ReadUInt32("Threshold", indexes);
+ data.StateID = packet.ReadByte("StateID", indexes);
+ return data;
+ }
+
+ public static IRestInfo ReadUpdateRestInfo(Packet packet, params object[] indexes)
+ {
+ var data = new RestInfo();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Threshold = packet.ReadUInt32("Threshold", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.StateID = packet.ReadByte("StateID", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IPVPInfo ReadCreatePVPInfo(Packet packet, params object[] indexes)
+ {
+ var data = new PVPInfo();
+ packet.ResetBitReader();
+ data.Bracket = packet.ReadSByte("Bracket", indexes);
+ data.PvpRatingID = packet.ReadInt32("PvpRatingID", indexes);
+ data.WeeklyPlayed = packet.ReadUInt32("WeeklyPlayed", indexes);
+ data.WeeklyWon = packet.ReadUInt32("WeeklyWon", indexes);
+ data.SeasonPlayed = packet.ReadUInt32("SeasonPlayed", indexes);
+ data.SeasonWon = packet.ReadUInt32("SeasonWon", indexes);
+ data.Rating = packet.ReadUInt32("Rating", indexes);
+ data.WeeklyBestRating = packet.ReadUInt32("WeeklyBestRating", indexes);
+ data.SeasonBestRating = packet.ReadUInt32("SeasonBestRating", indexes);
+ data.PvpTierID = packet.ReadUInt32("PvpTierID", indexes);
+ data.WeeklyBestWinPvpTierID = packet.ReadUInt32("WeeklyBestWinPvpTierID", indexes);
+ data.Field_28 = packet.ReadUInt32("Field_28", indexes);
+ data.Field_2C = packet.ReadUInt32("Field_2C", indexes);
+ data.WeeklyRoundsPlayed = packet.ReadUInt32("WeeklyRoundsPlayed", indexes);
+ data.WeeklyRoundsWon = packet.ReadUInt32("WeeklyRoundsWon", indexes);
+ data.SeasonRoundsPlayed = packet.ReadUInt32("SeasonRoundsPlayed", indexes);
+ data.SeasonRoundsWon = packet.ReadUInt32("SeasonRoundsWon", indexes);
+ data.Disqualified = packet.ReadBit("Disqualified", indexes);
+ return data;
+ }
+
+ public static IPVPInfo ReadUpdatePVPInfo(Packet packet, params object[] indexes)
+ {
+ var data = new PVPInfo();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(19);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Disqualified = packet.ReadBit("Disqualified", indexes);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.Bracket = packet.ReadSByte("Bracket", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.PvpRatingID = packet.ReadInt32("PvpRatingID", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.WeeklyPlayed = packet.ReadUInt32("WeeklyPlayed", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.WeeklyWon = packet.ReadUInt32("WeeklyWon", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.SeasonPlayed = packet.ReadUInt32("SeasonPlayed", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.SeasonWon = packet.ReadUInt32("SeasonWon", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.Rating = packet.ReadUInt32("Rating", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.WeeklyBestRating = packet.ReadUInt32("WeeklyBestRating", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.SeasonBestRating = packet.ReadUInt32("SeasonBestRating", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.PvpTierID = packet.ReadUInt32("PvpTierID", indexes);
+ }
+ if (changesMask[12])
+ {
+ data.WeeklyBestWinPvpTierID = packet.ReadUInt32("WeeklyBestWinPvpTierID", indexes);
+ }
+ if (changesMask[13])
+ {
+ data.Field_28 = packet.ReadUInt32("Field_28", indexes);
+ }
+ if (changesMask[14])
+ {
+ data.Field_2C = packet.ReadUInt32("Field_2C", indexes);
+ }
+ if (changesMask[15])
+ {
+ data.WeeklyRoundsPlayed = packet.ReadUInt32("WeeklyRoundsPlayed", indexes);
+ }
+ if (changesMask[16])
+ {
+ data.WeeklyRoundsWon = packet.ReadUInt32("WeeklyRoundsWon", indexes);
+ }
+ if (changesMask[17])
+ {
+ data.SeasonRoundsPlayed = packet.ReadUInt32("SeasonRoundsPlayed", indexes);
+ }
+ if (changesMask[18])
+ {
+ data.SeasonRoundsWon = packet.ReadUInt32("SeasonRoundsWon", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IResearch ReadCreateResearch(Packet packet, params object[] indexes)
+ {
+ var data = new Research();
+ packet.ResetBitReader();
+ data.ResearchProjectID = packet.ReadInt16("ResearchProjectID", indexes);
+ return data;
+ }
+
+ public static IResearch ReadUpdateResearch(Packet packet, params object[] indexes)
+ {
+ var data = new Research();
+ packet.ResetBitReader();
+ data.ResearchProjectID = packet.ReadInt16("ResearchProjectID", indexes);
+ return data;
+ }
+
+ public static ICharacterRestriction ReadCreateCharacterRestriction(Packet packet, params object[] indexes)
+ {
+ var data = new CharacterRestriction();
+ packet.ResetBitReader();
+ data.Field_0 = packet.ReadInt32("Field_0", indexes);
+ data.Field_4 = packet.ReadInt32("Field_4", indexes);
+ data.Field_8 = packet.ReadInt32("Field_8", indexes);
+ data.Type = packet.ReadBits("Type", 5, indexes);
+ return data;
+ }
+
+ public static ICharacterRestriction ReadUpdateCharacterRestriction(Packet packet, params object[] indexes)
+ {
+ var data = new CharacterRestriction();
+ packet.ResetBitReader();
+ data.Field_0 = packet.ReadInt32("Field_0", indexes);
+ data.Field_4 = packet.ReadInt32("Field_4", indexes);
+ data.Field_8 = packet.ReadInt32("Field_8", indexes);
+ data.Type = packet.ReadBits("Type", 5, indexes);
+ return data;
+ }
+
+ public static ISpellPctModByLabel ReadCreateSpellPctModByLabel(Packet packet, params object[] indexes)
+ {
+ var data = new SpellPctModByLabel();
+ packet.ResetBitReader();
+ data.ModIndex = packet.ReadInt32("ModIndex", indexes);
+ data.ModifierValue = packet.ReadSingle("ModifierValue", indexes);
+ data.LabelID = packet.ReadInt32("LabelID", indexes);
+ return data;
+ }
+
+ public static ISpellPctModByLabel ReadUpdateSpellPctModByLabel(Packet packet, params object[] indexes)
+ {
+ var data = new SpellPctModByLabel();
+ packet.ResetBitReader();
+ data.ModIndex = packet.ReadInt32("ModIndex", indexes);
+ data.ModifierValue = packet.ReadSingle("ModifierValue", indexes);
+ data.LabelID = packet.ReadInt32("LabelID", indexes);
+ return data;
+ }
+
+ public static ISpellFlatModByLabel ReadCreateSpellFlatModByLabel(Packet packet, params object[] indexes)
+ {
+ var data = new SpellFlatModByLabel();
+ packet.ResetBitReader();
+ data.ModIndex = packet.ReadInt32("ModIndex", indexes);
+ data.ModifierValue = packet.ReadInt32("ModifierValue", indexes);
+ data.LabelID = packet.ReadInt32("LabelID", indexes);
+ return data;
+ }
+
+ public static ISpellFlatModByLabel ReadUpdateSpellFlatModByLabel(Packet packet, params object[] indexes)
+ {
+ var data = new SpellFlatModByLabel();
+ packet.ResetBitReader();
+ data.ModIndex = packet.ReadInt32("ModIndex", indexes);
+ data.ModifierValue = packet.ReadInt32("ModifierValue", indexes);
+ data.LabelID = packet.ReadInt32("LabelID", indexes);
+ return data;
+ }
+
+ public static ICompletedProject ReadCreateCompletedProject(Packet packet, params object[] indexes)
+ {
+ var data = new CompletedProject();
+ packet.ResetBitReader();
+
+ long firstCompleted = packet.ReadInt64();
+ data.FirstCompleted = firstCompleted;
+ packet.AddValue("FirstCompleted", Utilities.GetDateTimeFromUnixTime(firstCompleted), indexes);
+
+ data.ProjectID = packet.ReadUInt32("ProjectID", indexes);
+ data.CompletionCount = packet.ReadUInt32("CompletionCount", indexes);
+ return data;
+ }
+
+ public static ICompletedProject ReadUpdateCompletedProject(Packet packet, params object[] indexes)
+ {
+ var data = new CompletedProject();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(4);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ long firstCompleted = packet.ReadInt64();
+ data.FirstCompleted = firstCompleted;
+ packet.AddValue("FirstCompleted", Utilities.GetDateTimeFromUnixTime(firstCompleted), indexes);
+ }
+ if (changesMask[2])
+ {
+ data.ProjectID = packet.ReadUInt32("ProjectID", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.CompletionCount = packet.ReadUInt32("CompletionCount", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IResearchHistory ReadCreateResearchHistory(Packet packet, params object[] indexes)
+ {
+ var data = new ResearchHistory();
+ packet.ResetBitReader();
+ data.CompletedProjects.Resize(packet.ReadUInt32());
+ for (var i = 0; i < data.CompletedProjects.Count; ++i)
+ {
+ data.CompletedProjects[i] = ReadCreateCompletedProject(packet, indexes, "CompletedProjects", i);
+ }
+ return data;
+ }
+
+ public static IResearchHistory ReadUpdateResearchHistory(Packet packet, params object[] indexes)
+ {
+ var data = new ResearchHistory();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(2);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.CompletedProjects.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.CompletedProjects.Count; ++i)
+ {
+ if (data.CompletedProjects.UpdateMask[i])
+ {
+ data.CompletedProjects[i] = ReadUpdateCompletedProject(packet, indexes, "CompletedProjects", i);
+ }
+ }
+ }
+ }
+ return data;
+ }
+
+ public static ITraitEntry ReadCreateTraitEntry(Packet packet, params object[] indexes)
+ {
+ var data = new TraitEntry();
+ packet.ResetBitReader();
+ data.TraitNodeID = packet.ReadInt32("TraitNodeID", indexes);
+ data.TraitNodeEntryID = packet.ReadInt32("TraitNodeEntryID", indexes);
+ data.Rank = packet.ReadInt32("Rank", indexes);
+ data.GrantedRanks = packet.ReadInt32("GrantedRanks", indexes);
+ data.BonusRanks = packet.ReadInt32("BonusRanks", indexes);
+ return data;
+ }
+
+ public static ITraitEntry ReadUpdateTraitEntry(Packet packet, params object[] indexes)
+ {
+ var data = new TraitEntry();
+ packet.ResetBitReader();
+ data.TraitNodeID = packet.ReadInt32("TraitNodeID", indexes);
+ data.TraitNodeEntryID = packet.ReadInt32("TraitNodeEntryID", indexes);
+ data.Rank = packet.ReadInt32("Rank", indexes);
+ data.GrantedRanks = packet.ReadInt32("GrantedRanks", indexes);
+ data.BonusRanks = packet.ReadInt32("BonusRanks", indexes);
+ return data;
+ }
+
+ public static ITraitSubTreeCache ReadCreateTraitSubTreeCache(Packet packet, params object[] indexes)
+ {
+ var data = new TraitSubTreeCache();
+ packet.ResetBitReader();
+ data.TraitSubTreeID = packet.ReadInt32("TraitSubTreeID", indexes);
+ data.Entries = new ITraitEntry[packet.ReadUInt32()];
+ for (var i = 0; i < data.Entries.Length; ++i)
+ {
+ data.Entries[i] = ReadCreateTraitEntry(packet, indexes, "Entries", i);
+ }
+ data.Active = packet.ReadBits("Active", 1, indexes);
+ return data;
+ }
+
+ public static ITraitSubTreeCache ReadUpdateTraitSubTreeCache(Packet packet, params object[] indexes)
+ {
+ var data = new TraitSubTreeCache();
+ packet.ResetBitReader();
+ data.TraitSubTreeID = packet.ReadInt32("TraitSubTreeID", indexes);
+ data.Entries = new ITraitEntry[packet.ReadUInt32()];
+ for (var i = 0; i < data.Entries.Length; ++i)
+ {
+ data.Entries[i] = ReadUpdateTraitEntry(packet, indexes, "Entries", i);
+ }
+ packet.ResetBitReader();
+ data.Active = packet.ReadBits("Active", 1, indexes);
+ return data;
+ }
+
+ public static ITraitConfig ReadCreateTraitConfig(Packet packet, params object[] indexes)
+ {
+ var data = new TraitConfig();
+ packet.ResetBitReader();
+ data.ID = packet.ReadInt32("ID", indexes);
+ data.Type = packet.ReadInt32("Type", indexes);
+ data.Entries.Resize(packet.ReadUInt32());
+ data.SubTrees.Resize(packet.ReadUInt32());
+ if (data.Type == 2)
+ {
+ data.SkillLineID = packet.ReadInt32("SkillLineID", indexes);
+ }
+ if (data.Type == 1)
+ {
+ data.ChrSpecializationID = packet.ReadInt32("ChrSpecializationID", indexes);
+ data.CombatConfigFlags = packet.ReadInt32("CombatConfigFlags", indexes);
+ data.LocalIdentifier = packet.ReadInt32("LocalIdentifier", indexes);
+ }
+ if (data.Type == 3)
+ {
+ data.TraitSystemID = packet.ReadInt32("TraitSystemID", indexes);
+ }
+ for (var i = 0; i < data.Entries.Count; ++i)
+ {
+ data.Entries[i] = ReadCreateTraitEntry(packet, indexes, "Entries", i);
+ }
+ data.Name = new string('*', (int)packet.ReadBits(9));
+ for (var i = 0; i < data.SubTrees.Count; ++i)
+ {
+ data.SubTrees[i] = ReadCreateTraitSubTreeCache(packet, indexes, "SubTrees", i);
+ }
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ return data;
+ }
+
+ public static ITraitConfig ReadUpdateTraitConfig(Packet packet, params object[] indexes)
+ {
+ var data = new TraitConfig();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(14);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Entries.ReadUpdateMask(packet);
+ }
+ if (changesMask[2])
+ {
+ data.SubTrees.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.Entries.Count; ++i)
+ {
+ if (data.Entries.UpdateMask[i])
+ {
+ data.Entries[i] = ReadUpdateTraitEntry(packet, indexes, "Entries", i);
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.SubTrees.Count; ++i)
+ {
+ if (data.SubTrees.UpdateMask[i])
+ {
+ data.SubTrees[i] = ReadUpdateTraitSubTreeCache(packet, indexes, "SubTrees", i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data.ID = packet.ReadInt32("ID", indexes);
+ }
+ }
+ if (changesMask[4])
+ {
+ if (changesMask[6])
+ {
+ data.Type = packet.ReadInt32("Type", indexes);
+ }
+ if (changesMask[7])
+ {
+ if (data.Type == 2)
+ {
+ data.SkillLineID = packet.ReadInt32("SkillLineID", indexes);
+ }
+ }
+ }
+ if (changesMask[8])
+ {
+ if (changesMask[9])
+ {
+ if (data.Type == 1)
+ {
+ data.ChrSpecializationID = packet.ReadInt32("ChrSpecializationID", indexes);
+ }
+ }
+ if (changesMask[10])
+ {
+ if (data.Type == 1)
+ {
+ data.CombatConfigFlags = packet.ReadInt32("CombatConfigFlags", indexes);
+ }
+ }
+ if (changesMask[11])
+ {
+ if (data.Type == 1)
+ {
+ data.LocalIdentifier = packet.ReadInt32("LocalIdentifier", indexes);
+ }
+ }
+ }
+ if (changesMask[12])
+ {
+ if (changesMask[13])
+ {
+ if (data.Type == 3)
+ {
+ data.TraitSystemID = packet.ReadInt32("TraitSystemID", indexes);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ if (changesMask[5])
+ {
+ data.Name = new string('*', (int)packet.ReadBits(9));
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ }
+ }
+ return data;
+ }
+
+ public static ICategoryCooldownMod ReadCreateCategoryCooldownMod(Packet packet, params object[] indexes)
+ {
+ var data = new CategoryCooldownMod();
+ packet.ResetBitReader();
+ data.SpellCategoryID = packet.ReadInt32("SpellCategoryID", indexes);
+ data.ModCooldown = packet.ReadInt32("ModCooldown", indexes);
+ return data;
+ }
+
+ public static ICategoryCooldownMod ReadUpdateCategoryCooldownMod(Packet packet, params object[] indexes)
+ {
+ var data = new CategoryCooldownMod();
+ packet.ResetBitReader();
+ data.SpellCategoryID = packet.ReadInt32("SpellCategoryID", indexes);
+ data.ModCooldown = packet.ReadInt32("ModCooldown", indexes);
+ return data;
+ }
+
+ public static IWeeklySpellUse ReadCreateWeeklySpellUse(Packet packet, params object[] indexes)
+ {
+ var data = new WeeklySpellUse();
+ packet.ResetBitReader();
+ data.SpellCategoryID = packet.ReadInt32("SpellCategoryID", indexes);
+ data.Uses = packet.ReadByte("Uses", indexes);
+ return data;
+ }
+
+ public static IWeeklySpellUse ReadUpdateWeeklySpellUse(Packet packet, params object[] indexes)
+ {
+ var data = new WeeklySpellUse();
+ packet.ResetBitReader();
+ data.SpellCategoryID = packet.ReadInt32("SpellCategoryID", indexes);
+ data.Uses = packet.ReadByte("Uses", indexes);
+ return data;
+ }
+
+ public static IStablePetInfo ReadCreateStablePetInfo(Packet packet, params object[] indexes)
+ {
+ var data = new StablePetInfo();
+ packet.ResetBitReader();
+ data.PetSlot = packet.ReadUInt32("PetSlot", indexes);
+ data.PetNumber = packet.ReadUInt32("PetNumber", indexes);
+ data.CreatureID = packet.ReadUInt32("CreatureID", indexes);
+ data.DisplayID = packet.ReadUInt32("DisplayID", indexes);
+ data.ExperienceLevel = packet.ReadUInt32("ExperienceLevel", indexes);
+ data.PetFlags = packet.ReadByte("PetFlags", indexes);
+ data.Field_96 = packet.ReadByte("Field_96", indexes);
+ data.Specialization = packet.ReadUInt32("Specialization", indexes);
+ data.Name = new string('*', (int)packet.ReadBits(8));
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ return data;
+ }
+
+ public static IStablePetInfo ReadUpdateStablePetInfo(Packet packet, params object[] indexes)
+ {
+ var data = new StablePetInfo();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(10);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.PetSlot = packet.ReadUInt32("PetSlot", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.PetNumber = packet.ReadUInt32("PetNumber", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.CreatureID = packet.ReadUInt32("CreatureID", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.DisplayID = packet.ReadUInt32("DisplayID", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.ExperienceLevel = packet.ReadUInt32("ExperienceLevel", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.PetFlags = packet.ReadByte("PetFlags", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.Field_96 = packet.ReadByte("Field_96", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.Specialization = packet.ReadUInt32("Specialization", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.Name = new string('*', (int)packet.ReadBits(8));
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IStableInfo ReadCreateStableInfo(Packet packet, params object[] indexes)
+ {
+ var data = new StableInfo();
+ packet.ResetBitReader();
+ data.Pets.Resize(packet.ReadUInt32());
+ data.StableMaster = packet.ReadPackedGuid128("StableMaster", indexes);
+ for (var i = 0; i < data.Pets.Count; ++i)
+ {
+ data.Pets[i] = ReadCreateStablePetInfo(packet, indexes, "Pets", i);
+ }
+ return data;
+ }
+
+ public static IStableInfo ReadUpdateStableInfo(Packet packet, params object[] indexes)
+ {
+ var data = new StableInfo();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Pets.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.Pets.Count; ++i)
+ {
+ if (data.Pets.UpdateMask[i])
+ {
+ data.Pets[i] = ReadUpdateStablePetInfo(packet, indexes, "Pets", i);
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ data.StableMaster = packet.ReadPackedGuid128("StableMaster", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IBankTabSettings ReadCreateBankTabSettings(Packet packet, params object[] indexes)
+ {
+ var data = new BankTabSettings();
+ packet.ResetBitReader();
+ data.Name = new string('*', (int)packet.ReadBits(7));
+ data.Icon = new string('*', (int)packet.ReadBits(9));
+ data.Description = new string('*', (int)packet.ReadBits(14));
+ data.DepositFlags = packet.ReadInt32("DepositFlags", indexes);
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ data.Icon = packet.ReadWoWString("Icon", data.Icon.Length, indexes);
+ data.Description = packet.ReadWoWString("Description", data.Description.Length, indexes);
+ return data;
+ }
+
+ public static IBankTabSettings ReadUpdateBankTabSettings(Packet packet, params object[] indexes)
+ {
+ var data = new BankTabSettings();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(4);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ data.Name = new string('*', (int)packet.ReadBits(7));
+ }
+ if (changesMask[1])
+ {
+ data.Icon = new string('*', (int)packet.ReadBits(9));
+ }
+ if (changesMask[2])
+ {
+ data.Description = new string('*', (int)packet.ReadBits(14));
+ }
+ packet.ResetBitReader();
+ if (changesMask[3])
+ {
+ data.DepositFlags = packet.ReadInt32("DepositFlags", indexes);
+ }
+ if (changesMask[0])
+ {
+ data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes);
+ }
+ if (changesMask[1])
+ {
+ data.Icon = packet.ReadWoWString("Icon", data.Icon.Length, indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Description = packet.ReadWoWString("Description", data.Description.Length, indexes);
+ }
+ return data;
+ }
+
+ public override IActivePlayerData ReadCreateActivePlayerData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new ActivePlayerData();
+ packet.ResetBitReader();
+ var hasPetStable = false;
+ for (var i = 0; i < 146; ++i)
+ {
+ data.InvSlots[i] = packet.ReadPackedGuid128("InvSlots", indexes, i);
+ }
+ data.FarsightObject = packet.ReadPackedGuid128("FarsightObject", indexes);
+ data.SummonedBattlePetGUID = packet.ReadPackedGuid128("SummonedBattlePetGUID", indexes);
+ data.KnownTitles.Resize(packet.ReadUInt32());
+ data.Coinage = packet.ReadUInt64("Coinage", indexes);
+ data.AccountBankCoinage = packet.ReadUInt64("AccountBankCoinage", indexes);
+ data.XP = packet.ReadInt32("XP", indexes);
+ data.NextLevelXP = packet.ReadInt32("NextLevelXP", indexes);
+ data.TrialXP = packet.ReadInt32("TrialXP", indexes);
+ data.Skill = ReadCreateSkillInfo(packet, indexes, "Skill");
+ data.CharacterPoints = packet.ReadInt32("CharacterPoints", indexes);
+ data.MaxTalentTiers = packet.ReadInt32("MaxTalentTiers", indexes);
+ data.TrackCreatureMask = packet.ReadUInt32("TrackCreatureMask", indexes);
+ for (var i = 0; i < 2; ++i)
+ {
+ data.TrackResourceMask[i] = packet.ReadUInt32("TrackResourceMask", indexes, i);
+ }
+ data.MainhandExpertise = packet.ReadSingle("MainhandExpertise", indexes);
+ data.OffhandExpertise = packet.ReadSingle("OffhandExpertise", indexes);
+ data.RangedExpertise = packet.ReadSingle("RangedExpertise", indexes);
+ data.CombatRatingExpertise = packet.ReadSingle("CombatRatingExpertise", indexes);
+ data.BlockPercentage = packet.ReadSingle("BlockPercentage", indexes);
+ data.DodgePercentage = packet.ReadSingle("DodgePercentage", indexes);
+ data.DodgePercentageFromAttribute = packet.ReadSingle("DodgePercentageFromAttribute", indexes);
+ data.ParryPercentage = packet.ReadSingle("ParryPercentage", indexes);
+ data.ParryPercentageFromAttribute = packet.ReadSingle("ParryPercentageFromAttribute", indexes);
+ data.CritPercentage = packet.ReadSingle("CritPercentage", indexes);
+ data.RangedCritPercentage = packet.ReadSingle("RangedCritPercentage", indexes);
+ data.OffhandCritPercentage = packet.ReadSingle("OffhandCritPercentage", indexes);
+ for (var i = 0; i < 7; ++i)
+ {
+ data.SpellCritPercentage[i] = packet.ReadSingle("SpellCritPercentage", indexes, i);
+ data.ModDamageDonePos[i] = packet.ReadInt32("ModDamageDonePos", indexes, i);
+ data.ModDamageDoneNeg[i] = packet.ReadInt32("ModDamageDoneNeg", indexes, i);
+ data.ModDamageDonePercent[i] = packet.ReadSingle("ModDamageDonePercent", indexes, i);
+ }
+ data.ShieldBlock = packet.ReadInt32("ShieldBlock", indexes);
+ data.ShieldBlockCritPercentage = packet.ReadSingle("ShieldBlockCritPercentage", indexes);
+ data.Mastery = packet.ReadSingle("Mastery", indexes);
+ data.Speed = packet.ReadSingle("Speed", indexes);
+ data.Avoidance = packet.ReadSingle("Avoidance", indexes);
+ data.Sturdiness = packet.ReadSingle("Sturdiness", indexes);
+ data.Versatility = packet.ReadInt32("Versatility", indexes);
+ data.VersatilityBonus = packet.ReadSingle("VersatilityBonus", indexes);
+ data.PvpPowerDamage = packet.ReadSingle("PvpPowerDamage", indexes);
+ data.PvpPowerHealing = packet.ReadSingle("PvpPowerHealing", indexes);
+ data.BitVectors = ReadCreateBitVectors(packet, indexes, "BitVectors");
+ data.CharacterDataElements.Resize(packet.ReadUInt32());
+ data.AccountDataElements.Resize(packet.ReadUInt32());
+ for (var i = 0; i < 2; ++i)
+ {
+ data.RestInfo[i] = ReadCreateRestInfo(packet, indexes, "RestInfo", i);
+ }
+ data.ModHealingDonePos = packet.ReadInt32("ModHealingDonePos", indexes);
+ data.ModHealingPercent = packet.ReadSingle("ModHealingPercent", indexes);
+ data.ModHealingDonePercent = packet.ReadSingle("ModHealingDonePercent", indexes);
+ data.ModPeriodicHealingDonePercent = packet.ReadSingle("ModPeriodicHealingDonePercent", indexes);
+ for (var i = 0; i < 3; ++i)
+ {
+ data.WeaponDmgMultipliers[i] = packet.ReadSingle("WeaponDmgMultipliers", indexes, i);
+ data.WeaponAtkSpeedMultipliers[i] = packet.ReadSingle("WeaponAtkSpeedMultipliers", indexes, i);
+ }
+ data.ModSpellPowerPercent = packet.ReadSingle("ModSpellPowerPercent", indexes);
+ data.ModResiliencePercent = packet.ReadSingle("ModResiliencePercent", indexes);
+ data.OverrideSpellPowerByAPPercent = packet.ReadSingle("OverrideSpellPowerByAPPercent", indexes);
+ data.OverrideAPBySpellPowerPercent = packet.ReadSingle("OverrideAPBySpellPowerPercent", indexes);
+ data.ModTargetResistance = packet.ReadInt32("ModTargetResistance", indexes);
+ data.ModTargetPhysicalResistance = packet.ReadInt32("ModTargetPhysicalResistance", indexes);
+ data.LocalFlags = packet.ReadUInt32("LocalFlags", indexes);
+ data.GrantableLevels = packet.ReadByte("GrantableLevels", indexes);
+ data.MultiActionBars = packet.ReadByte("MultiActionBars", indexes);
+ data.LifetimeMaxRank = packet.ReadByte("LifetimeMaxRank", indexes);
+ data.NumRespecs = packet.ReadByte("NumRespecs", indexes);
+ data.AmmoID = packet.ReadInt32("AmmoID", indexes);
+ data.PvpMedals = packet.ReadUInt32("PvpMedals", indexes);
+ for (var i = 0; i < 12; ++i)
+ {
+ data.BuybackPrice[i] = packet.ReadUInt32("BuybackPrice", indexes, i);
+ data.BuybackTimestamp[i] = packet.ReadInt64("BuybackTimestamp", indexes, i);
+ }
+ data.TodayHonorableKills = packet.ReadUInt16("TodayHonorableKills", indexes);
+ data.TodayDishonorableKills = packet.ReadUInt16("TodayDishonorableKills", indexes);
+ data.YesterdayHonorableKills = packet.ReadUInt16("YesterdayHonorableKills", indexes);
+ data.YesterdayDishonorableKills = packet.ReadUInt16("YesterdayDishonorableKills", indexes);
+ data.LastWeekHonorableKills = packet.ReadUInt16("LastWeekHonorableKills", indexes);
+ data.LastWeekDishonorableKills = packet.ReadUInt16("LastWeekDishonorableKills", indexes);
+ data.ThisWeekHonorableKills = packet.ReadUInt16("ThisWeekHonorableKills", indexes);
+ data.ThisWeekDishonorableKills = packet.ReadUInt16("ThisWeekDishonorableKills", indexes);
+ data.ThisWeekContribution = packet.ReadUInt32("ThisWeekContribution", indexes);
+ data.LifetimeHonorableKills = packet.ReadUInt32("LifetimeHonorableKills", indexes);
+ data.LifetimeDishonorableKills = packet.ReadUInt32("LifetimeDishonorableKills", indexes);
+ data.Field_F24 = packet.ReadUInt32("Field_F24", indexes);
+ data.YesterdayContribution = packet.ReadUInt32("YesterdayContribution", indexes);
+ data.LastWeekContribution = packet.ReadUInt32("LastWeekContribution", indexes);
+ data.LastWeekRank = packet.ReadUInt32("LastWeekRank", indexes);
+ data.WatchedFactionIndex = packet.ReadInt32("WatchedFactionIndex", indexes);
+ for (var i = 0; i < 32; ++i)
+ {
+ data.CombatRatings[i] = packet.ReadInt32("CombatRatings", indexes, i);
+ }
+ data.MaxLevel = packet.ReadInt32("MaxLevel", indexes);
+ data.ScalingPlayerLevelDelta = packet.ReadInt32("ScalingPlayerLevelDelta", indexes);
+ data.MaxCreatureScalingLevel = packet.ReadInt32("MaxCreatureScalingLevel", indexes);
+ for (var i = 0; i < 4; ++i)
+ {
+ data.NoReagentCostMask[i] = packet.ReadUInt32("NoReagentCostMask", indexes, i);
+ }
+ data.PetSpellPower = packet.ReadInt32("PetSpellPower", indexes);
+ for (var i = 0; i < 2; ++i)
+ {
+ data.ProfessionSkillLine[i] = packet.ReadInt32("ProfessionSkillLine", indexes, i);
+ }
+ data.UiHitModifier = packet.ReadSingle("UiHitModifier", indexes);
+ data.UiSpellHitModifier = packet.ReadSingle("UiSpellHitModifier", indexes);
+ data.HomeRealmTimeOffset = packet.ReadInt32("HomeRealmTimeOffset", indexes);
+ data.ModPetHaste = packet.ReadSingle("ModPetHaste", indexes);
+ data.LocalRegenFlags = packet.ReadByte("LocalRegenFlags", indexes);
+ data.AuraVision = packet.ReadByte("AuraVision", indexes);
+ data.NumBackpackSlots = packet.ReadByte("NumBackpackSlots", indexes);
+ data.OverrideSpellsID = packet.ReadInt32("OverrideSpellsID", indexes);
+ data.LfgBonusFactionID = packet.ReadInt32("LfgBonusFactionID", indexes);
+ data.LootSpecID = packet.ReadUInt16("LootSpecID", indexes);
+ data.OverrideZonePVPType = packet.ReadUInt32("OverrideZonePVPType", indexes);
+ for (var i = 0; i < 4; ++i)
+ {
+ data.BagSlotFlags[i] = packet.ReadUInt32("BagSlotFlags", indexes, i);
+ }
+ for (var i = 0; i < 7; ++i)
+ {
+ data.BankBagSlotFlags[i] = packet.ReadUInt32("BankBagSlotFlags", indexes, i);
+ }
+ data.Honor = packet.ReadInt32("Honor", indexes);
+ data.HonorNextLevel = packet.ReadInt32("HonorNextLevel", indexes);
+ data.Field_F74 = packet.ReadInt32("Field_F74", indexes);
+ data.Field_1261 = packet.ReadByte("Field_1261", indexes);
+ data.PvpTierMaxFromWins = packet.ReadInt32("PvpTierMaxFromWins", indexes);
+ data.PvpLastWeeksTierMaxFromWins = packet.ReadInt32("PvpLastWeeksTierMaxFromWins", indexes);
+ data.PvpRankProgress = packet.ReadByte("PvpRankProgress", indexes);
+ data.PerksProgramCurrency = packet.ReadInt32("PerksProgramCurrency", indexes);
+ for (var i = 0; i < 1; ++i)
+ {
+ data.ResearchSites[i].Resize(packet.ReadUInt32());
+ data.ResearchSiteProgress[i].Resize(packet.ReadUInt32());
+ data.Research[i].Resize(packet.ReadUInt32());
+ for (var j = 0; j < data.ResearchSites[i].Count; ++j)
+ {
+ data.ResearchSites[i][j] = packet.ReadUInt16("ResearchSites", indexes, i, j);
+ }
+ for (var j = 0; j < data.ResearchSiteProgress[i].Count; ++j)
+ {
+ data.ResearchSiteProgress[i][j] = packet.ReadUInt32("ResearchSiteProgress", indexes, i, j);
+ }
+ for (var j = 0; j < data.Research[i].Count; ++j)
+ {
+ data.Research[i][j] = ReadCreateResearch(packet, indexes, "Research", i, j);
+ }
+ }
+ data.DailyQuestsCompleted.Resize(packet.ReadUInt32());
+ data.Field_1000.Resize(packet.ReadUInt32());
+ data.AvailableQuestLineXQuestIDs.Resize(packet.ReadUInt32());
+ data.Heirlooms.Resize(packet.ReadUInt32());
+ data.HeirloomFlags.Resize(packet.ReadUInt32());
+ data.Toys.Resize(packet.ReadUInt32());
+ data.ToyFlags.Resize(packet.ReadUInt32());
+ data.Transmog.Resize(packet.ReadUInt32());
+ data.ConditionalTransmog.Resize(packet.ReadUInt32());
+ data.SelfResSpells.Resize(packet.ReadUInt32());
+ data.WarbandScenes.Resize(packet.ReadUInt32());
+ data.CharacterRestrictions.Resize(packet.ReadUInt32());
+ data.SpellPctModByLabel.Resize(packet.ReadUInt32());
+ data.SpellFlatModByLabel.Resize(packet.ReadUInt32());
+ data.TaskQuests.Resize(packet.ReadUInt32());
+ data.TimerunningSeasonID = packet.ReadInt32("TimerunningSeasonID", indexes);
+ data.TransportServerTime = packet.ReadInt32("TransportServerTime", indexes);
+ data.TraitConfigs.Resize(packet.ReadUInt32());
+ data.ActiveCombatTraitConfigID = packet.ReadUInt32("ActiveCombatTraitConfigID", indexes);
+ for (var i = 0; i < 6; ++i)
+ {
+ data.GlyphSlots[i] = packet.ReadUInt32("GlyphSlots", indexes, i);
+ data.Glyphs[i] = packet.ReadUInt32("Glyphs", indexes, i);
+ }
+ data.GlyphsEnabled = packet.ReadUInt16("GlyphsEnabled", indexes);
+ data.LfgRoles = packet.ReadByte("LfgRoles", indexes);
+ data.CategoryCooldownMods.Resize(packet.ReadUInt32());
+ data.WeeklySpellUses.Resize(packet.ReadUInt32());
+ data.NumStableSlots = packet.ReadByte("NumStableSlots", indexes);
+ for (var i = 0; i < 13; ++i)
+ {
+ data.Field_4348[i] = packet.ReadUInt64("Field_4348", indexes, i);
+ }
+ data.Field_17B8 = packet.ReadInt32("Field_17B8", indexes);
+ for (var i = 0; i < data.KnownTitles.Count; ++i)
+ {
+ data.KnownTitles[i] = packet.ReadUInt64("KnownTitles", indexes, i);
+ }
+ for (var i = 0; i < data.CharacterDataElements.Count; ++i)
+ {
+ data.CharacterDataElements[i] = ReadCreatePlayerDataElement(packet, indexes, "CharacterDataElements", i);
+ }
+ for (var i = 0; i < data.AccountDataElements.Count; ++i)
+ {
+ data.AccountDataElements[i] = ReadCreatePlayerDataElement(packet, indexes, "AccountDataElements", i);
+ }
+ for (var i = 0; i < data.DailyQuestsCompleted.Count; ++i)
+ {
+ data.DailyQuestsCompleted[i] = packet.ReadInt32("DailyQuestsCompleted", indexes, i);
+ }
+ for (var i = 0; i < data.Field_1000.Count; ++i)
+ {
+ data.Field_1000[i] = packet.ReadInt32("Field_1000", indexes, i);
+ }
+ for (var i = 0; i < data.AvailableQuestLineXQuestIDs.Count; ++i)
+ {
+ data.AvailableQuestLineXQuestIDs[i] = packet.ReadInt32("AvailableQuestLineXQuestIDs", indexes, i);
+ }
+ for (var i = 0; i < data.Heirlooms.Count; ++i)
+ {
+ data.Heirlooms[i] = packet.ReadInt32("Heirlooms", indexes, i);
+ }
+ for (var i = 0; i < data.HeirloomFlags.Count; ++i)
+ {
+ data.HeirloomFlags[i] = packet.ReadUInt32("HeirloomFlags", indexes, i);
+ }
+ for (var i = 0; i < data.Toys.Count; ++i)
+ {
+ data.Toys[i] = packet.ReadInt32("Toys", indexes, i);
+ }
+ for (var i = 0; i < data.ToyFlags.Count; ++i)
+ {
+ data.ToyFlags[i] = packet.ReadUInt32("ToyFlags", indexes, i);
+ }
+ for (var i = 0; i < data.Transmog.Count; ++i)
+ {
+ data.Transmog[i] = packet.ReadUInt32("Transmog", indexes, i);
+ }
+ for (var i = 0; i < data.ConditionalTransmog.Count; ++i)
+ {
+ data.ConditionalTransmog[i] = packet.ReadInt32("ConditionalTransmog", indexes, i);
+ }
+ for (var i = 0; i < data.SelfResSpells.Count; ++i)
+ {
+ data.SelfResSpells[i] = packet.ReadInt32("SelfResSpells", indexes, i);
+ }
+ for (var i = 0; i < data.WarbandScenes.Count; ++i)
+ {
+ data.WarbandScenes[i] = packet.ReadUInt32("WarbandScenes", indexes, i);
+ }
+ for (var i = 0; i < data.SpellPctModByLabel.Count; ++i)
+ {
+ data.SpellPctModByLabel[i] = ReadCreateSpellPctModByLabel(packet, indexes, "SpellPctModByLabel", i);
+ }
+ for (var i = 0; i < data.SpellFlatModByLabel.Count; ++i)
+ {
+ data.SpellFlatModByLabel[i] = ReadCreateSpellFlatModByLabel(packet, indexes, "SpellFlatModByLabel", i);
+ }
+ for (var i = 0; i < data.TaskQuests.Count; ++i)
+ {
+ data.TaskQuests[i] = ReadCreateQuestLog(packet, indexes, "TaskQuests", i);
+ }
+ for (var i = 0; i < data.CategoryCooldownMods.Count; ++i)
+ {
+ data.CategoryCooldownMods[i] = ReadCreateCategoryCooldownMod(packet, indexes, "CategoryCooldownMods", i);
+ }
+ for (var i = 0; i < data.WeeklySpellUses.Count; ++i)
+ {
+ data.WeeklySpellUses[i] = ReadCreateWeeklySpellUse(packet, indexes, "WeeklySpellUses", i);
+ }
+ for (var i = 0; i < 9; ++i)
+ {
+ data.PvpInfo[i] = ReadCreatePVPInfo(packet, indexes, "PvpInfo", i);
+ }
+ packet.ResetBitReader();
+ data.SortBagsRightToLeft = packet.ReadBit("SortBagsRightToLeft", indexes);
+ data.InsertItemsLeftToRight = packet.ReadBit("InsertItemsLeftToRight", indexes);
+ hasPetStable = packet.ReadBit("HasPetStable", indexes);
+ data.AccountBankTabSettings.Resize(packet.ReadBits(3));
+ data.ResearchHistory = ReadCreateResearchHistory(packet, indexes, "ResearchHistory");
+ Substructures.PerksProgramHandler.ReadPerksVendorItem550(packet, indexes, "FrozenPerksVendorItem");
+ MythicPlusHandler.ReadDungeonScoreData(packet, indexes, "DungeonScore");
+ for (var i = 0; i < data.CharacterRestrictions.Count; ++i)
+ {
+ data.CharacterRestrictions[i] = ReadCreateCharacterRestriction(packet, indexes, "CharacterRestrictions", i);
+ }
+ for (var i = 0; i < data.TraitConfigs.Count; ++i)
+ {
+ data.TraitConfigs[i] = ReadCreateTraitConfig(packet, indexes, "TraitConfigs", i);
+ }
+ if (hasPetStable)
+ {
+ data.PetStable = ReadCreateStableInfo(packet, indexes, "PetStable");
+ }
+ for (var i = 0; i < data.AccountBankTabSettings.Count; ++i)
+ {
+ data.AccountBankTabSettings[i] = ReadCreateBankTabSettings(packet, indexes, "AccountBankTabSettings", i);
+ }
+ return data;
+ }
+
+ public override IActivePlayerData ReadUpdateActivePlayerData(Packet packet, params object[] indexes)
+ {
+ var data = new ActivePlayerData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[14];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(14);
+ var maskMask = new BitArray(rawMaskMask);
+ for (var i = 0; i < 14; ++i)
+ if (maskMask[i])
+ rawChangesMask[i] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ var hasPetStable = false;
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.SortBagsRightToLeft = packet.ReadBit("SortBagsRightToLeft", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.InsertItemsLeftToRight = packet.ReadBit("InsertItemsLeftToRight", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.KnownTitles.ReadUpdateMask(packet);
+ }
+ if (changesMask[4])
+ {
+ data.CharacterDataElements.ReadUpdateMask(packet);
+ }
+ if (changesMask[5])
+ {
+ data.AccountDataElements.ReadUpdateMask(packet);
+ }
+ }
+ if (changesMask[25])
+ {
+ for (var i = 0; i < 1; ++i)
+ {
+ if (changesMask[26])
+ {
+ data.ResearchSites[i].ReadUpdateMask(packet);
+ }
+ }
+ }
+ if (changesMask[27])
+ {
+ for (var i = 0; i < 1; ++i)
+ {
+ if (changesMask[28])
+ {
+ data.ResearchSiteProgress[i].ReadUpdateMask(packet);
+ }
+ }
+ }
+ if (changesMask[29])
+ {
+ for (var i = 0; i < 1; ++i)
+ {
+ if (changesMask[30])
+ {
+ data.Research[i].ReadUpdateMask(packet);
+ }
+ }
+ }
+ if (changesMask[25])
+ {
+ for (var i = 0; i < 1; ++i)
+ {
+ if (changesMask[26])
+ {
+ for (var j = 0; j < data.ResearchSites[i].Count; ++j)
+ {
+ if (data.ResearchSites[i].UpdateMask[j])
+ {
+ data.ResearchSites[i][j] = packet.ReadUInt16("ResearchSites", indexes, i, j);
+ }
+ }
+ }
+ }
+ }
+ if (changesMask[27])
+ {
+ for (var i = 0; i < 1; ++i)
+ {
+ if (changesMask[28])
+ {
+ for (var j = 0; j < data.ResearchSiteProgress[i].Count; ++j)
+ {
+ if (data.ResearchSiteProgress[i].UpdateMask[j])
+ {
+ data.ResearchSiteProgress[i][j] = packet.ReadUInt32("ResearchSiteProgress", indexes, i, j);
+ }
+ }
+ }
+ }
+ }
+ if (changesMask[29])
+ {
+ for (var i = 0; i < 1; ++i)
+ {
+ if (changesMask[30])
+ {
+ for (var j = 0; j < data.Research[i].Count; ++j)
+ {
+ if (data.Research[i].UpdateMask[j])
+ {
+ data.Research[i][j] = ReadUpdateResearch(packet, indexes, "Research", i, j);
+ }
+ }
+ }
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[6])
+ {
+ data.DailyQuestsCompleted.ReadUpdateMask(packet);
+ }
+ if (changesMask[7])
+ {
+ data.Field_1000.ReadUpdateMask(packet);
+ }
+ if (changesMask[8])
+ {
+ data.AvailableQuestLineXQuestIDs.ReadUpdateMask(packet);
+ }
+ if (changesMask[9])
+ {
+ data.Heirlooms.ReadUpdateMask(packet);
+ }
+ if (changesMask[10])
+ {
+ data.HeirloomFlags.ReadUpdateMask(packet);
+ }
+ if (changesMask[11])
+ {
+ data.Toys.ReadUpdateMask(packet);
+ }
+ if (changesMask[12])
+ {
+ data.ToyFlags.ReadUpdateMask(packet);
+ }
+ if (changesMask[13])
+ {
+ data.Transmog.ReadUpdateMask(packet);
+ }
+ if (changesMask[14])
+ {
+ data.ConditionalTransmog.ReadUpdateMask(packet);
+ }
+ if (changesMask[15])
+ {
+ data.SelfResSpells.ReadUpdateMask(packet);
+ }
+ if (changesMask[16])
+ {
+ data.WarbandScenes.ReadUpdateMask(packet);
+ }
+ if (changesMask[17])
+ {
+ data.CharacterRestrictions.ReadUpdateMask(packet);
+ }
+ if (changesMask[18])
+ {
+ data.SpellPctModByLabel.ReadUpdateMask(packet);
+ }
+ if (changesMask[19])
+ {
+ data.SpellFlatModByLabel.ReadUpdateMask(packet);
+ }
+ if (changesMask[20])
+ {
+ data.TaskQuests.ReadUpdateMask(packet);
+ }
+ if (changesMask[21])
+ {
+ data.TraitConfigs.ReadUpdateMask(packet);
+ }
+ if (changesMask[22])
+ {
+ data.CategoryCooldownMods.ReadUpdateMask(packet);
+ }
+ if (changesMask[23])
+ {
+ data.WeeklySpellUses.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[3])
+ {
+ for (var i = 0; i < data.KnownTitles.Count; ++i)
+ {
+ if (data.KnownTitles.UpdateMask[i])
+ {
+ data.KnownTitles[i] = packet.ReadUInt64("KnownTitles", indexes, i);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ for (var i = 0; i < data.CharacterDataElements.Count; ++i)
+ {
+ if (data.CharacterDataElements.UpdateMask[i])
+ {
+ data.CharacterDataElements[i] = ReadUpdatePlayerDataElement(packet, indexes, "CharacterDataElements", i);
+ }
+ }
+ }
+ if (changesMask[5])
+ {
+ for (var i = 0; i < data.AccountDataElements.Count; ++i)
+ {
+ if (data.AccountDataElements.UpdateMask[i])
+ {
+ data.AccountDataElements[i] = ReadUpdatePlayerDataElement(packet, indexes, "AccountDataElements", i);
+ }
+ }
+ }
+ if (changesMask[6])
+ {
+ for (var i = 0; i < data.DailyQuestsCompleted.Count; ++i)
+ {
+ if (data.DailyQuestsCompleted.UpdateMask[i])
+ {
+ data.DailyQuestsCompleted[i] = packet.ReadInt32("DailyQuestsCompleted", indexes, i);
+ }
+ }
+ }
+ if (changesMask[7])
+ {
+ for (var i = 0; i < data.Field_1000.Count; ++i)
+ {
+ if (data.Field_1000.UpdateMask[i])
+ {
+ data.Field_1000[i] = packet.ReadInt32("Field_1000", indexes, i);
+ }
+ }
+ }
+ if (changesMask[8])
+ {
+ for (var i = 0; i < data.AvailableQuestLineXQuestIDs.Count; ++i)
+ {
+ if (data.AvailableQuestLineXQuestIDs.UpdateMask[i])
+ {
+ data.AvailableQuestLineXQuestIDs[i] = packet.ReadInt32("AvailableQuestLineXQuestIDs", indexes, i);
+ }
+ }
+ }
+ if (changesMask[9])
+ {
+ for (var i = 0; i < data.Heirlooms.Count; ++i)
+ {
+ if (data.Heirlooms.UpdateMask[i])
+ {
+ data.Heirlooms[i] = packet.ReadInt32("Heirlooms", indexes, i);
+ }
+ }
+ }
+ if (changesMask[10])
+ {
+ for (var i = 0; i < data.HeirloomFlags.Count; ++i)
+ {
+ if (data.HeirloomFlags.UpdateMask[i])
+ {
+ data.HeirloomFlags[i] = packet.ReadUInt32("HeirloomFlags", indexes, i);
+ }
+ }
+ }
+ if (changesMask[11])
+ {
+ for (var i = 0; i < data.Toys.Count; ++i)
+ {
+ if (data.Toys.UpdateMask[i])
+ {
+ data.Toys[i] = packet.ReadInt32("Toys", indexes, i);
+ }
+ }
+ }
+ if (changesMask[12])
+ {
+ for (var i = 0; i < data.ToyFlags.Count; ++i)
+ {
+ if (data.ToyFlags.UpdateMask[i])
+ {
+ data.ToyFlags[i] = packet.ReadUInt32("ToyFlags", indexes, i);
+ }
+ }
+ }
+ if (changesMask[13])
+ {
+ for (var i = 0; i < data.Transmog.Count; ++i)
+ {
+ if (data.Transmog.UpdateMask[i])
+ {
+ data.Transmog[i] = packet.ReadUInt32("Transmog", indexes, i);
+ }
+ }
+ }
+ if (changesMask[14])
+ {
+ for (var i = 0; i < data.ConditionalTransmog.Count; ++i)
+ {
+ if (data.ConditionalTransmog.UpdateMask[i])
+ {
+ data.ConditionalTransmog[i] = packet.ReadInt32("ConditionalTransmog", indexes, i);
+ }
+ }
+ }
+ if (changesMask[15])
+ {
+ for (var i = 0; i < data.SelfResSpells.Count; ++i)
+ {
+ if (data.SelfResSpells.UpdateMask[i])
+ {
+ data.SelfResSpells[i] = packet.ReadInt32("SelfResSpells", indexes, i);
+ }
+ }
+ }
+ if (changesMask[16])
+ {
+ for (var i = 0; i < data.WarbandScenes.Count; ++i)
+ {
+ if (data.WarbandScenes.UpdateMask[i])
+ {
+ data.WarbandScenes[i] = packet.ReadUInt32("WarbandScenes", indexes, i);
+ }
+ }
+ }
+ if (changesMask[18])
+ {
+ for (var i = 0; i < data.SpellPctModByLabel.Count; ++i)
+ {
+ if (data.SpellPctModByLabel.UpdateMask[i])
+ {
+ data.SpellPctModByLabel[i] = ReadUpdateSpellPctModByLabel(packet, indexes, "SpellPctModByLabel", i);
+ }
+ }
+ }
+ if (changesMask[19])
+ {
+ for (var i = 0; i < data.SpellFlatModByLabel.Count; ++i)
+ {
+ if (data.SpellFlatModByLabel.UpdateMask[i])
+ {
+ data.SpellFlatModByLabel[i] = ReadUpdateSpellFlatModByLabel(packet, indexes, "SpellFlatModByLabel", i);
+ }
+ }
+ }
+ if (changesMask[20])
+ {
+ for (var i = 0; i < data.TaskQuests.Count; ++i)
+ {
+ if (data.TaskQuests.UpdateMask[i])
+ {
+ data.TaskQuests[i] = ReadUpdateQuestLog(packet, indexes, "TaskQuests", i);
+ }
+ }
+ }
+ if (changesMask[22])
+ {
+ for (var i = 0; i < data.CategoryCooldownMods.Count; ++i)
+ {
+ if (data.CategoryCooldownMods.UpdateMask[i])
+ {
+ data.CategoryCooldownMods[i] = ReadUpdateCategoryCooldownMod(packet, indexes, "CategoryCooldownMods", i);
+ }
+ }
+ }
+ if (changesMask[23])
+ {
+ for (var i = 0; i < data.WeeklySpellUses.Count; ++i)
+ {
+ if (data.WeeklySpellUses.UpdateMask[i])
+ {
+ data.WeeklySpellUses[i] = ReadUpdateWeeklySpellUse(packet, indexes, "WeeklySpellUses", i);
+ }
+ }
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[24])
+ {
+ data.AccountBankTabSettings.ReadUpdateMask(packet, 3);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[17])
+ {
+ for (var i = 0; i < data.CharacterRestrictions.Count; ++i)
+ {
+ if (data.CharacterRestrictions.UpdateMask[i])
+ {
+ data.CharacterRestrictions[i] = ReadUpdateCharacterRestriction(packet, indexes, "CharacterRestrictions", i);
+ }
+ }
+ }
+ if (changesMask[21])
+ {
+ for (var i = 0; i < data.TraitConfigs.Count; ++i)
+ {
+ if (data.TraitConfigs.UpdateMask[i])
+ {
+ data.TraitConfigs[i] = ReadUpdateTraitConfig(packet, indexes, "TraitConfigs", i);
+ }
+ }
+ }
+ if (changesMask[24])
+ {
+ for (var i = 0; i < data.AccountBankTabSettings.Count; ++i)
+ {
+ if (data.AccountBankTabSettings.UpdateMask[i])
+ {
+ data.AccountBankTabSettings[i] = ReadUpdateBankTabSettings(packet, indexes, "AccountBankTabSettings", i);
+ }
+ }
+ }
+ if (changesMask[31])
+ {
+ data.FarsightObject = packet.ReadPackedGuid128("FarsightObject", indexes);
+ }
+ if (changesMask[32])
+ {
+ data.SummonedBattlePetGUID = packet.ReadPackedGuid128("SummonedBattlePetGUID", indexes);
+ }
+ if (changesMask[33])
+ {
+ data.Coinage = packet.ReadUInt64("Coinage", indexes);
+ }
+ if (changesMask[34])
+ {
+ data.AccountBankCoinage = packet.ReadUInt64("AccountBankCoinage", indexes);
+ }
+ if (changesMask[35])
+ {
+ data.XP = packet.ReadInt32("XP", indexes);
+ }
+ if (changesMask[36])
+ {
+ data.NextLevelXP = packet.ReadInt32("NextLevelXP", indexes);
+ }
+ if (changesMask[37])
+ {
+ data.TrialXP = packet.ReadInt32("TrialXP", indexes);
+ }
+ }
+ if (changesMask[38])
+ {
+ if (changesMask[39])
+ {
+ data.Skill = ReadUpdateSkillInfo(packet, indexes, "Skill");
+ }
+ if (changesMask[40])
+ {
+ data.CharacterPoints = packet.ReadInt32("CharacterPoints", indexes);
+ }
+ if (changesMask[41])
+ {
+ data.MaxTalentTiers = packet.ReadInt32("MaxTalentTiers", indexes);
+ }
+ if (changesMask[42])
+ {
+ data.TrackCreatureMask = packet.ReadUInt32("TrackCreatureMask", indexes);
+ }
+ if (changesMask[43])
+ {
+ data.MainhandExpertise = packet.ReadSingle("MainhandExpertise", indexes);
+ }
+ if (changesMask[44])
+ {
+ data.OffhandExpertise = packet.ReadSingle("OffhandExpertise", indexes);
+ }
+ if (changesMask[45])
+ {
+ data.RangedExpertise = packet.ReadSingle("RangedExpertise", indexes);
+ }
+ if (changesMask[46])
+ {
+ data.CombatRatingExpertise = packet.ReadSingle("CombatRatingExpertise", indexes);
+ }
+ if (changesMask[47])
+ {
+ data.BlockPercentage = packet.ReadSingle("BlockPercentage", indexes);
+ }
+ if (changesMask[48])
+ {
+ data.DodgePercentage = packet.ReadSingle("DodgePercentage", indexes);
+ }
+ if (changesMask[49])
+ {
+ data.DodgePercentageFromAttribute = packet.ReadSingle("DodgePercentageFromAttribute", indexes);
+ }
+ if (changesMask[50])
+ {
+ data.ParryPercentage = packet.ReadSingle("ParryPercentage", indexes);
+ }
+ if (changesMask[51])
+ {
+ data.ParryPercentageFromAttribute = packet.ReadSingle("ParryPercentageFromAttribute", indexes);
+ }
+ if (changesMask[52])
+ {
+ data.CritPercentage = packet.ReadSingle("CritPercentage", indexes);
+ }
+ if (changesMask[53])
+ {
+ data.RangedCritPercentage = packet.ReadSingle("RangedCritPercentage", indexes);
+ }
+ if (changesMask[54])
+ {
+ data.OffhandCritPercentage = packet.ReadSingle("OffhandCritPercentage", indexes);
+ }
+ if (changesMask[55])
+ {
+ data.ShieldBlock = packet.ReadInt32("ShieldBlock", indexes);
+ }
+ if (changesMask[56])
+ {
+ data.ShieldBlockCritPercentage = packet.ReadSingle("ShieldBlockCritPercentage", indexes);
+ }
+ if (changesMask[57])
+ {
+ data.Mastery = packet.ReadSingle("Mastery", indexes);
+ }
+ if (changesMask[58])
+ {
+ data.Speed = packet.ReadSingle("Speed", indexes);
+ }
+ if (changesMask[59])
+ {
+ data.Avoidance = packet.ReadSingle("Avoidance", indexes);
+ }
+ if (changesMask[60])
+ {
+ data.Sturdiness = packet.ReadSingle("Sturdiness", indexes);
+ }
+ if (changesMask[61])
+ {
+ data.Versatility = packet.ReadInt32("Versatility", indexes);
+ }
+ if (changesMask[62])
+ {
+ data.VersatilityBonus = packet.ReadSingle("VersatilityBonus", indexes);
+ }
+ if (changesMask[63])
+ {
+ data.PvpPowerDamage = packet.ReadSingle("PvpPowerDamage", indexes);
+ }
+ if (changesMask[64])
+ {
+ data.PvpPowerHealing = packet.ReadSingle("PvpPowerHealing", indexes);
+ }
+ if (changesMask[65])
+ {
+ data.BitVectors = ReadUpdateBitVectors(packet, indexes, "BitVectors");
+ }
+ if (changesMask[66])
+ {
+ data.ModHealingDonePos = packet.ReadInt32("ModHealingDonePos", indexes);
+ }
+ if (changesMask[67])
+ {
+ data.ModHealingPercent = packet.ReadSingle("ModHealingPercent", indexes);
+ }
+ if (changesMask[68])
+ {
+ data.ModHealingDonePercent = packet.ReadSingle("ModHealingDonePercent", indexes);
+ }
+ if (changesMask[69])
+ {
+ data.ModPeriodicHealingDonePercent = packet.ReadSingle("ModPeriodicHealingDonePercent", indexes);
+ }
+ }
+ if (changesMask[70])
+ {
+ if (changesMask[71])
+ {
+ data.ModSpellPowerPercent = packet.ReadSingle("ModSpellPowerPercent", indexes);
+ }
+ if (changesMask[72])
+ {
+ data.ModResiliencePercent = packet.ReadSingle("ModResiliencePercent", indexes);
+ }
+ if (changesMask[73])
+ {
+ data.OverrideSpellPowerByAPPercent = packet.ReadSingle("OverrideSpellPowerByAPPercent", indexes);
+ }
+ if (changesMask[74])
+ {
+ data.OverrideAPBySpellPowerPercent = packet.ReadSingle("OverrideAPBySpellPowerPercent", indexes);
+ }
+ if (changesMask[75])
+ {
+ data.ModTargetResistance = packet.ReadInt32("ModTargetResistance", indexes);
+ }
+ if (changesMask[76])
+ {
+ data.ModTargetPhysicalResistance = packet.ReadInt32("ModTargetPhysicalResistance", indexes);
+ }
+ if (changesMask[77])
+ {
+ data.LocalFlags = packet.ReadUInt32("LocalFlags", indexes);
+ }
+ if (changesMask[78])
+ {
+ data.GrantableLevels = packet.ReadByte("GrantableLevels", indexes);
+ }
+ if (changesMask[79])
+ {
+ data.MultiActionBars = packet.ReadByte("MultiActionBars", indexes);
+ }
+ if (changesMask[80])
+ {
+ data.LifetimeMaxRank = packet.ReadByte("LifetimeMaxRank", indexes);
+ }
+ if (changesMask[81])
+ {
+ data.NumRespecs = packet.ReadByte("NumRespecs", indexes);
+ }
+ if (changesMask[82])
+ {
+ data.AmmoID = packet.ReadInt32("AmmoID", indexes);
+ }
+ if (changesMask[83])
+ {
+ data.PvpMedals = packet.ReadUInt32("PvpMedals", indexes);
+ }
+ if (changesMask[84])
+ {
+ data.TodayHonorableKills = packet.ReadUInt16("TodayHonorableKills", indexes);
+ }
+ if (changesMask[85])
+ {
+ data.TodayDishonorableKills = packet.ReadUInt16("TodayDishonorableKills", indexes);
+ }
+ if (changesMask[86])
+ {
+ data.YesterdayHonorableKills = packet.ReadUInt16("YesterdayHonorableKills", indexes);
+ }
+ if (changesMask[87])
+ {
+ data.YesterdayDishonorableKills = packet.ReadUInt16("YesterdayDishonorableKills", indexes);
+ }
+ if (changesMask[88])
+ {
+ data.LastWeekHonorableKills = packet.ReadUInt16("LastWeekHonorableKills", indexes);
+ }
+ if (changesMask[89])
+ {
+ data.LastWeekDishonorableKills = packet.ReadUInt16("LastWeekDishonorableKills", indexes);
+ }
+ if (changesMask[90])
+ {
+ data.ThisWeekHonorableKills = packet.ReadUInt16("ThisWeekHonorableKills", indexes);
+ }
+ if (changesMask[91])
+ {
+ data.ThisWeekDishonorableKills = packet.ReadUInt16("ThisWeekDishonorableKills", indexes);
+ }
+ if (changesMask[92])
+ {
+ data.ThisWeekContribution = packet.ReadUInt32("ThisWeekContribution", indexes);
+ }
+ if (changesMask[93])
+ {
+ data.LifetimeHonorableKills = packet.ReadUInt32("LifetimeHonorableKills", indexes);
+ }
+ if (changesMask[94])
+ {
+ data.LifetimeDishonorableKills = packet.ReadUInt32("LifetimeDishonorableKills", indexes);
+ }
+ if (changesMask[95])
+ {
+ data.Field_F24 = packet.ReadUInt32("Field_F24", indexes);
+ }
+ if (changesMask[96])
+ {
+ data.YesterdayContribution = packet.ReadUInt32("YesterdayContribution", indexes);
+ }
+ if (changesMask[97])
+ {
+ data.LastWeekContribution = packet.ReadUInt32("LastWeekContribution", indexes);
+ }
+ if (changesMask[98])
+ {
+ data.LastWeekRank = packet.ReadUInt32("LastWeekRank", indexes);
+ }
+ if (changesMask[99])
+ {
+ data.WatchedFactionIndex = packet.ReadInt32("WatchedFactionIndex", indexes);
+ }
+ if (changesMask[100])
+ {
+ data.MaxLevel = packet.ReadInt32("MaxLevel", indexes);
+ }
+ if (changesMask[101])
+ {
+ data.ScalingPlayerLevelDelta = packet.ReadInt32("ScalingPlayerLevelDelta", indexes);
+ }
+ }
+ if (changesMask[102])
+ {
+ if (changesMask[103])
+ {
+ data.MaxCreatureScalingLevel = packet.ReadInt32("MaxCreatureScalingLevel", indexes);
+ }
+ if (changesMask[104])
+ {
+ data.PetSpellPower = packet.ReadInt32("PetSpellPower", indexes);
+ }
+ if (changesMask[105])
+ {
+ data.UiHitModifier = packet.ReadSingle("UiHitModifier", indexes);
+ }
+ if (changesMask[106])
+ {
+ data.UiSpellHitModifier = packet.ReadSingle("UiSpellHitModifier", indexes);
+ }
+ if (changesMask[107])
+ {
+ data.HomeRealmTimeOffset = packet.ReadInt32("HomeRealmTimeOffset", indexes);
+ }
+ if (changesMask[108])
+ {
+ data.ModPetHaste = packet.ReadSingle("ModPetHaste", indexes);
+ }
+ if (changesMask[109])
+ {
+ data.LocalRegenFlags = packet.ReadByte("LocalRegenFlags", indexes);
+ }
+ if (changesMask[110])
+ {
+ data.AuraVision = packet.ReadByte("AuraVision", indexes);
+ }
+ if (changesMask[111])
+ {
+ data.NumBackpackSlots = packet.ReadByte("NumBackpackSlots", indexes);
+ }
+ if (changesMask[112])
+ {
+ data.OverrideSpellsID = packet.ReadInt32("OverrideSpellsID", indexes);
+ }
+ if (changesMask[113])
+ {
+ data.LfgBonusFactionID = packet.ReadInt32("LfgBonusFactionID", indexes);
+ }
+ if (changesMask[114])
+ {
+ data.LootSpecID = packet.ReadUInt16("LootSpecID", indexes);
+ }
+ if (changesMask[115])
+ {
+ data.OverrideZonePVPType = packet.ReadUInt32("OverrideZonePVPType", indexes);
+ }
+ if (changesMask[116])
+ {
+ data.Honor = packet.ReadInt32("Honor", indexes);
+ }
+ if (changesMask[117])
+ {
+ data.HonorNextLevel = packet.ReadInt32("HonorNextLevel", indexes);
+ }
+ if (changesMask[118])
+ {
+ data.Field_F74 = packet.ReadInt32("Field_F74", indexes);
+ }
+ if (changesMask[119])
+ {
+ data.Field_1261 = packet.ReadByte("Field_1261", indexes);
+ }
+ if (changesMask[120])
+ {
+ data.PvpTierMaxFromWins = packet.ReadInt32("PvpTierMaxFromWins", indexes);
+ }
+ if (changesMask[121])
+ {
+ data.PvpLastWeeksTierMaxFromWins = packet.ReadInt32("PvpLastWeeksTierMaxFromWins", indexes);
+ }
+ if (changesMask[122])
+ {
+ data.PvpRankProgress = packet.ReadByte("PvpRankProgress", indexes);
+ }
+ if (changesMask[123])
+ {
+ data.PerksProgramCurrency = packet.ReadInt32("PerksProgramCurrency", indexes);
+ }
+ if (changesMask[126])
+ {
+ data.TimerunningSeasonID = packet.ReadInt32("TimerunningSeasonID", indexes);
+ }
+ if (changesMask[127])
+ {
+ data.TransportServerTime = packet.ReadInt32("TransportServerTime", indexes);
+ }
+ if (changesMask[129])
+ {
+ data.ActiveCombatTraitConfigID = packet.ReadUInt32("ActiveCombatTraitConfigID", indexes);
+ }
+ if (changesMask[130])
+ {
+ data.GlyphsEnabled = packet.ReadUInt16("GlyphsEnabled", indexes);
+ }
+ if (changesMask[131])
+ {
+ data.LfgRoles = packet.ReadByte("LfgRoles", indexes);
+ }
+ if (changesMask[133])
+ {
+ data.NumStableSlots = packet.ReadByte("NumStableSlots", indexes);
+ }
+ }
+ if (changesMask[134])
+ {
+ if (changesMask[135])
+ {
+ data.Field_17B8 = packet.ReadInt32("Field_17B8", indexes);
+ }
+ }
+ if (changesMask[102])
+ {
+ packet.ResetBitReader();
+ hasPetStable = packet.ReadBit("HasPetStable", indexes);
+ if (changesMask[124])
+ {
+ data.ResearchHistory = ReadUpdateResearchHistory(packet, indexes, "ResearchHistory");
+ }
+ if (changesMask[125])
+ {
+ Substructures.PerksProgramHandler.ReadPerksVendorItem550(packet, indexes, "FrozenPerksVendorItem");
+ }
+ if (changesMask[128])
+ {
+ MythicPlusHandler.ReadDungeonScoreData(packet, indexes, "DungeonScore");
+ }
+ if (changesMask[132])
+ {
+ if (hasPetStable)
+ {
+ data.PetStable = ReadUpdateStableInfo(packet, indexes, "PetStable");
+ }
+ }
+ }
+ if (changesMask[136])
+ {
+ for (var i = 0; i < 146; ++i)
+ {
+ if (changesMask[137 + i])
+ {
+ data.InvSlots[i] = packet.ReadPackedGuid128("InvSlots", indexes, i);
+ }
+ }
+ }
+ if (changesMask[283])
+ {
+ for (var i = 0; i < 2; ++i)
+ {
+ if (changesMask[284 + i])
+ {
+ data.TrackResourceMask[i] = packet.ReadUInt32("TrackResourceMask", indexes, i);
+ }
+ }
+ }
+ if (changesMask[286])
+ {
+ for (var i = 0; i < 7; ++i)
+ {
+ if (changesMask[287 + i])
+ {
+ data.SpellCritPercentage[i] = packet.ReadSingle("SpellCritPercentage", indexes, i);
+ }
+ if (changesMask[294 + i])
+ {
+ data.ModDamageDonePos[i] = packet.ReadInt32("ModDamageDonePos", indexes, i);
+ }
+ if (changesMask[301 + i])
+ {
+ data.ModDamageDoneNeg[i] = packet.ReadInt32("ModDamageDoneNeg", indexes, i);
+ }
+ if (changesMask[308 + i])
+ {
+ data.ModDamageDonePercent[i] = packet.ReadSingle("ModDamageDonePercent", indexes, i);
+ }
+ }
+ }
+ if (changesMask[315])
+ {
+ for (var i = 0; i < 2; ++i)
+ {
+ if (changesMask[316 + i])
+ {
+ data.RestInfo[i] = ReadUpdateRestInfo(packet, indexes, "RestInfo", i);
+ }
+ }
+ }
+ if (changesMask[318])
+ {
+ for (var i = 0; i < 3; ++i)
+ {
+ if (changesMask[319 + i])
+ {
+ data.WeaponDmgMultipliers[i] = packet.ReadSingle("WeaponDmgMultipliers", indexes, i);
+ }
+ if (changesMask[322 + i])
+ {
+ data.WeaponAtkSpeedMultipliers[i] = packet.ReadSingle("WeaponAtkSpeedMultipliers", indexes, i);
+ }
+ }
+ }
+ if (changesMask[325])
+ {
+ for (var i = 0; i < 12; ++i)
+ {
+ if (changesMask[326 + i])
+ {
+ data.BuybackPrice[i] = packet.ReadUInt32("BuybackPrice", indexes, i);
+ }
+ if (changesMask[338 + i])
+ {
+ data.BuybackTimestamp[i] = packet.ReadInt64("BuybackTimestamp", indexes, i);
+ }
+ }
+ }
+ if (changesMask[350])
+ {
+ for (var i = 0; i < 32; ++i)
+ {
+ if (changesMask[351 + i])
+ {
+ data.CombatRatings[i] = packet.ReadInt32("CombatRatings", indexes, i);
+ }
+ }
+ }
+ if (changesMask[393])
+ {
+ for (var i = 0; i < 4; ++i)
+ {
+ if (changesMask[394 + i])
+ {
+ data.NoReagentCostMask[i] = packet.ReadUInt32("NoReagentCostMask", indexes, i);
+ }
+ }
+ }
+ if (changesMask[398])
+ {
+ for (var i = 0; i < 2; ++i)
+ {
+ if (changesMask[399 + i])
+ {
+ data.ProfessionSkillLine[i] = packet.ReadInt32("ProfessionSkillLine", indexes, i);
+ }
+ }
+ }
+ if (changesMask[401])
+ {
+ for (var i = 0; i < 4; ++i)
+ {
+ if (changesMask[402 + i])
+ {
+ data.BagSlotFlags[i] = packet.ReadUInt32("BagSlotFlags", indexes, i);
+ }
+ }
+ }
+ if (changesMask[406])
+ {
+ for (var i = 0; i < 7; ++i)
+ {
+ if (changesMask[407 + i])
+ {
+ data.BankBagSlotFlags[i] = packet.ReadUInt32("BankBagSlotFlags", indexes, i);
+ }
+ }
+ }
+ if (changesMask[414])
+ {
+ for (var i = 0; i < 6; ++i)
+ {
+ if (changesMask[415 + i])
+ {
+ data.GlyphSlots[i] = packet.ReadUInt32("GlyphSlots", indexes, i);
+ }
+ if (changesMask[421 + i])
+ {
+ data.Glyphs[i] = packet.ReadUInt32("Glyphs", indexes, i);
+ }
+ }
+ }
+ if (changesMask[427])
+ {
+ for (var i = 0; i < 13; ++i)
+ {
+ if (changesMask[428 + i])
+ {
+ data.Field_4348[i] = packet.ReadUInt64("Field_4348", indexes, i);
+ }
+ }
+ }
+ if (changesMask[383])
+ {
+ for (var i = 0; i < 9; ++i)
+ {
+ if (changesMask[384 + i])
+ {
+ data.PvpInfo[i] = ReadUpdatePVPInfo(packet, indexes, "PvpInfo", i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IGameObjectAssistActionData ReadCreateGameObjectAssistActionData(Packet packet, params object[] indexes)
+ {
+ var data = new GameObjectAssistActionData();
+ packet.ResetBitReader();
+ data.PlayerName = new string('*', (int)packet.ReadBits(6));
+ data.MonsterName = new string('*', (int)packet.ReadBits(11));
+ data.VirtualRealmAddress = packet.ReadUInt32("VirtualRealmAddress", indexes);
+ data.Sex = packet.ReadByte("Sex", indexes);
+ data.Time = packet.ReadInt64("Time", indexes);
+ data.DelveTier = packet.ReadInt32("DelveTier", indexes);
+ data.PlayerName = packet.ReadWoWString("PlayerName", data.PlayerName.Length, indexes);
+ if (data.MonsterName.Length > 1)
+ {
+ data.MonsterName = packet.ReadWoWString("MonsterName", data.MonsterName.Length - 1, indexes);
+ packet.ReadByte();
+ }
+ else
+ data.MonsterName = string.Empty;
+ return data;
+ }
+
+ public static IGameObjectAssistActionData ReadUpdateGameObjectAssistActionData(Packet packet, params object[] indexes)
+ {
+ var data = new GameObjectAssistActionData();
+ packet.ResetBitReader();
+ data.PlayerName = new string('*', (int)packet.ReadBits(6));
+ data.MonsterName = new string('*', (int)packet.ReadBits(11));
+ data.VirtualRealmAddress = packet.ReadUInt32("VirtualRealmAddress", indexes);
+ data.Sex = packet.ReadByte("Sex", indexes);
+ data.Time = packet.ReadInt64("Time", indexes);
+ data.DelveTier = packet.ReadInt32("DelveTier", indexes);
+ data.PlayerName = packet.ReadWoWString("PlayerName", data.PlayerName.Length, indexes);
+ if (data.MonsterName.Length > 1)
+ {
+ data.MonsterName = packet.ReadWoWString("MonsterName", data.MonsterName.Length - 1, indexes);
+ packet.ReadByte();
+ }
+ else
+ data.MonsterName = string.Empty;
+ return data;
+ }
+
+ public override IGameObjectData ReadCreateGameObjectData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new GameObjectData();
+ packet.ResetBitReader();
+ var hasAssistActionData = false;
+ data.DisplayID = packet.ReadInt32("DisplayID", indexes);
+ data.SpellVisualID = packet.ReadUInt32("SpellVisualID", indexes);
+ data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
+ data.SpawnTrackingStateAnimID = packet.ReadUInt32("SpawnTrackingStateAnimID", indexes);
+ data.SpawnTrackingStateAnimKitID = packet.ReadUInt32("SpawnTrackingStateAnimKitID", indexes);
+ data.StateWorldEffectIDs = new System.Nullable[packet.ReadUInt32()];
+ for (var i = 0; i < data.StateWorldEffectIDs.Length; ++i)
+ {
+ data.StateWorldEffectIDs[i] = packet.ReadUInt32("StateWorldEffectIDs", indexes, i);
+ }
+ data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
+ data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ data.ParentRotation = packet.ReadQuaternion("ParentRotation", indexes);
+ data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
+ data.Level = packet.ReadInt32("Level", indexes);
+ data.State = packet.ReadSByte("State", indexes);
+ data.TypeID = packet.ReadSByte("TypeID", indexes);
+ data.PercentHealth = packet.ReadByte("PercentHealth", indexes);
+ data.ArtKit = packet.ReadUInt32("ArtKit", indexes);
+ data.EnableDoodadSets.Resize(packet.ReadUInt32());
+ data.CustomParam = packet.ReadUInt32("CustomParam", indexes);
+ data.WorldEffects.Resize(packet.ReadUInt32());
+ for (var i = 0; i < data.EnableDoodadSets.Count; ++i)
+ {
+ data.EnableDoodadSets[i] = packet.ReadInt32("EnableDoodadSets", indexes, i);
+ }
+ for (var i = 0; i < data.WorldEffects.Count; ++i)
+ {
+ data.WorldEffects[i] = packet.ReadInt32("WorldEffects", indexes, i);
+ }
+ hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes);
+ packet.ResetBitReader();
+ if (hasAssistActionData)
+ {
+ data.AssistActionData = ReadCreateGameObjectAssistActionData(packet, indexes, "AssistActionData");
+ }
+ return data;
+ }
+
+ public override IGameObjectData ReadUpdateGameObjectData(Packet packet, params object[] indexes)
+ {
+ var data = new GameObjectData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(21);
+ var changesMask = new BitArray(rawChangesMask);
+
+ var hasAssistActionData = false;
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.StateWorldEffectIDs = Enumerable.Range(0, (int)packet.ReadBits(32)).Select(x => new uint()).Cast>().ToArray();
+ for (var i = 0; i < data.StateWorldEffectIDs.Length; ++i)
+ {
+ data.StateWorldEffectIDs[i] = packet.ReadUInt32("StateWorldEffectIDs", indexes, i);
+ }
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.EnableDoodadSets.ReadUpdateMask(packet);
+ }
+ if (changesMask[3])
+ {
+ data.WorldEffects.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.EnableDoodadSets.Count; ++i)
+ {
+ if (data.EnableDoodadSets.UpdateMask[i])
+ {
+ data.EnableDoodadSets[i] = packet.ReadInt32("EnableDoodadSets", indexes, i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ for (var i = 0; i < data.WorldEffects.Count; ++i)
+ {
+ if (data.WorldEffects.UpdateMask[i])
+ {
+ data.WorldEffects[i] = packet.ReadInt32("WorldEffects", indexes, i);
+ }
+ }
+ }
+ if (changesMask[4])
+ {
+ data.DisplayID = packet.ReadInt32("DisplayID", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.SpellVisualID = packet.ReadUInt32("SpellVisualID", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.StateSpellVisualID = packet.ReadUInt32("StateSpellVisualID", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.SpawnTrackingStateAnimID = packet.ReadUInt32("SpawnTrackingStateAnimID", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.SpawnTrackingStateAnimKitID = packet.ReadUInt32("SpawnTrackingStateAnimKitID", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ }
+ if (changesMask[12])
+ {
+ data.ParentRotation = packet.ReadQuaternion("ParentRotation", indexes);
+ }
+ if (changesMask[13])
+ {
+ data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
+ }
+ if (changesMask[14])
+ {
+ data.Level = packet.ReadInt32("Level", indexes);
+ }
+ if (changesMask[15])
+ {
+ data.State = packet.ReadSByte("State", indexes);
+ }
+ if (changesMask[16])
+ {
+ data.TypeID = packet.ReadSByte("TypeID", indexes);
+ }
+ if (changesMask[17])
+ {
+ data.PercentHealth = packet.ReadByte("PercentHealth", indexes);
+ }
+ if (changesMask[18])
+ {
+ data.ArtKit = packet.ReadUInt32("ArtKit", indexes);
+ }
+ if (changesMask[19])
+ {
+ data.CustomParam = packet.ReadUInt32("CustomParam", indexes);
+ }
+ hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes);
+ packet.ResetBitReader();
+ if (changesMask[20])
+ {
+ if (hasAssistActionData)
+ {
+ data.AssistActionData = ReadUpdateGameObjectAssistActionData(packet, indexes, "AssistActionData");
+ }
+ }
+ }
+ return data;
+ }
+
+ public override IDynamicObjectData ReadCreateDynamicObjectData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new DynamicObjectData();
+ packet.ResetBitReader();
+ data.Caster = packet.ReadPackedGuid128("Caster", indexes);
+ data.Type = packet.ReadByte("Type", indexes);
+ data.SpellXSpellVisualID = packet.ReadInt32("SpellXSpellVisualID", indexes);
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ data.CastTime = packet.ReadUInt32("CastTime", indexes);
+ return data;
+ }
+
+ public override IDynamicObjectData ReadUpdateDynamicObjectData(Packet packet, params object[] indexes)
+ {
+ var data = new DynamicObjectData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(7);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Caster = packet.ReadPackedGuid128("Caster", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Type = packet.ReadByte("Type", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.SpellXSpellVisualID = packet.ReadInt32("SpellXSpellVisualID", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.CastTime = packet.ReadUInt32("CastTime", indexes);
+ }
+ }
+ return data;
+ }
+
+ public override ICorpseData ReadCreateCorpseData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new CorpseData();
+ packet.ResetBitReader();
+ data.DynamicFlags = packet.ReadUInt32("DynamicFlags", indexes);
+ data.Owner = packet.ReadPackedGuid128("Owner", indexes);
+ data.PartyGUID = packet.ReadPackedGuid128("PartyGUID", indexes);
+ data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
+ data.DisplayID = packet.ReadUInt32("DisplayID", indexes);
+ for (var i = 0; i < 19; ++i)
+ {
+ data.Items[i] = packet.ReadUInt32("Items", indexes, i);
+ }
+ data.RaceID = packet.ReadByte("RaceID", indexes);
+ data.Sex = packet.ReadByte("Sex", indexes);
+ data.Class = packet.ReadByte("Class", indexes);
+ data.Customizations.Resize(packet.ReadUInt32());
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
+ for (var i = 0; i < data.Customizations.Count; ++i)
+ {
+ data.Customizations[i] = ReadCreateChrCustomizationChoice(packet, indexes, "Customizations", i);
+ }
+ return data;
+ }
+
+ public override ICorpseData ReadUpdateCorpseData(Packet packet, params object[] indexes)
+ {
+ var data = new CorpseData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ var rawMaskMask = new int[1];
+ rawMaskMask[0] = (int)packet.ReadBits(1);
+ var maskMask = new BitArray(rawMaskMask);
+ if (maskMask[0])
+ rawChangesMask[0] = (int)packet.ReadBits(32);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Customizations.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.Customizations.Count; ++i)
+ {
+ if (data.Customizations.UpdateMask[i])
+ {
+ data.Customizations[i] = ReadUpdateChrCustomizationChoice(packet, indexes, "Customizations", i);
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ data.DynamicFlags = packet.ReadUInt32("DynamicFlags", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.Owner = packet.ReadPackedGuid128("Owner", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.PartyGUID = packet.ReadPackedGuid128("PartyGUID", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.GuildGUID = packet.ReadPackedGuid128("GuildGUID", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.DisplayID = packet.ReadUInt32("DisplayID", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.RaceID = packet.ReadByte("RaceID", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.Sex = packet.ReadByte("Sex", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.Class = packet.ReadByte("Class", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes);
+ }
+ }
+ if (changesMask[12])
+ {
+ for (var i = 0; i < 19; ++i)
+ {
+ if (changesMask[13 + i])
+ {
+ data.Items[i] = packet.ReadUInt32("Items", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IScaleCurve ReadCreateScaleCurve(Packet packet, params object[] indexes)
+ {
+ var data = new ScaleCurve();
+ packet.ResetBitReader();
+ data.StartTimeOffset = packet.ReadUInt32("StartTimeOffset", indexes);
+ for (var i = 0; i < 2; ++i)
+ {
+ data.Points[i] = packet.ReadVector2("Points", indexes, i);
+ }
+ data.ParameterCurve = packet.ReadUInt32("ParameterCurve", indexes);
+ data.OverrideActive = packet.ReadBit("OverrideActive", indexes);
+ return data;
+ }
+
+ public static IScaleCurve ReadUpdateScaleCurve(Packet packet, params object[] indexes)
+ {
+ var data = new ScaleCurve();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(7);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.OverrideActive = packet.ReadBit("OverrideActive", indexes);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.StartTimeOffset = packet.ReadUInt32("StartTimeOffset", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.ParameterCurve = packet.ReadUInt32("ParameterCurve", indexes);
+ }
+ }
+ if (changesMask[4])
+ {
+ for (var i = 0; i < 2; ++i)
+ {
+ if (changesMask[5 + i])
+ {
+ data.Points[i] = packet.ReadVector2("Points", indexes, i);
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IVisualAnim ReadCreateVisualAnim(Packet packet, params object[] indexes)
+ {
+ var data = new VisualAnim();
+ packet.ResetBitReader();
+ data.AnimationDataID = packet.ReadUInt32("AnimationDataID", indexes);
+ data.AnimKitID = packet.ReadUInt32("AnimKitID", indexes);
+ data.AnimProgress = packet.ReadUInt32("AnimProgress", indexes);
+ data.IsDecay = packet.ReadBit("IsDecay", indexes);
+ return data;
+ }
+
+ public static IVisualAnim ReadUpdateVisualAnim(Packet packet, params object[] indexes)
+ {
+ var data = new VisualAnim();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(5);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.IsDecay = packet.ReadBit("IsDecay", indexes);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.AnimationDataID = packet.ReadUInt32("AnimationDataID", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.AnimKitID = packet.ReadUInt32("AnimKitID", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.AnimProgress = packet.ReadUInt32("AnimProgress", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IForceSetAreaTriggerPositionAndRotation ReadCreateForceSetAreaTriggerPositionAndRotation(Packet packet, params object[] indexes)
+ {
+ var data = new ForceSetAreaTriggerPositionAndRotation();
+ packet.ResetBitReader();
+ data.TriggerGUID = packet.ReadPackedGuid128("TriggerGUID", indexes);
+ data.Position = packet.ReadVector3("Position", indexes);
+ data.Rotation = packet.ReadQuaternion("Rotation", indexes);
+ return data;
+ }
+
+ public static IForceSetAreaTriggerPositionAndRotation ReadUpdateForceSetAreaTriggerPositionAndRotation(Packet packet, params object[] indexes)
+ {
+ var data = new ForceSetAreaTriggerPositionAndRotation();
+ packet.ResetBitReader();
+ data.TriggerGUID = packet.ReadPackedGuid128("TriggerGUID", indexes);
+ data.Position = packet.ReadVector3("Position", indexes);
+ data.Rotation = packet.ReadQuaternion("Rotation", indexes);
+ return data;
+ }
+
+ public static IAreaTriggerSplineCalculator ReadCreateAreaTriggerSplineCalculator(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerSplineCalculator();
+ packet.ResetBitReader();
+ data.Points.Resize(packet.ReadBits(16));
+ data.Catmullrom = packet.ReadBit("Catmullrom", indexes);
+ for (var i = 0; i < data.Points.Count; ++i)
+ {
+ data.Points[i] = packet.ReadVector3("Points", indexes, i);
+ }
+ return data;
+ }
+
+ public static IAreaTriggerSplineCalculator ReadUpdateAreaTriggerSplineCalculator(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerSplineCalculator();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Catmullrom = packet.ReadBit("Catmullrom", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.Points.ReadUpdateMask(packet, 16);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.Points.Count; ++i)
+ {
+ if (data.Points.UpdateMask[i])
+ {
+ data.Points[i] = packet.ReadVector3("Points", indexes, i);
+ }
+ }
+ }
+ }
+ return data;
+ }
+
+ public static IAreaTriggerOrbit ReadCreateAreaTriggerOrbit(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerOrbit();
+ packet.ResetBitReader();
+ data.Center = packet.ReadVector3("Center", indexes);
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ data.InitialAngle = packet.ReadSingle("InitialAngle", indexes);
+ data.BlendFromRadius = packet.ReadSingle("BlendFromRadius", indexes);
+ data.ExtraTimeForBlending = packet.ReadInt32("ExtraTimeForBlending", indexes);
+ data.CounterClockwise = packet.ReadBit("CounterClockwise", indexes);
+ return data;
+ }
+
+ public static IAreaTriggerOrbit ReadUpdateAreaTriggerOrbit(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerOrbit();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(7);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.CounterClockwise = packet.ReadBit("CounterClockwise", indexes);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.Center = packet.ReadVector3("Center", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.InitialAngle = packet.ReadSingle("InitialAngle", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.BlendFromRadius = packet.ReadSingle("BlendFromRadius", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.ExtraTimeForBlending = packet.ReadInt32("ExtraTimeForBlending", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IAreaTriggerSphere ReadCreateAreaTriggerSphere(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerSphere();
+ packet.ResetBitReader();
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ data.RadiusTarget = packet.ReadSingle("RadiusTarget", indexes);
+ return data;
+ }
+
+ public static IAreaTriggerSphere ReadUpdateAreaTriggerSphere(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerSphere();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.RadiusTarget = packet.ReadSingle("RadiusTarget", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IAreaTriggerBox ReadCreateAreaTriggerBox(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerBox();
+ packet.ResetBitReader();
+ data.Extents = packet.ReadVector3("Extents", indexes);
+ data.ExtentsTarget = packet.ReadVector3("ExtentsTarget", indexes);
+ return data;
+ }
+
+ public static IAreaTriggerBox ReadUpdateAreaTriggerBox(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerBox();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(3);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Extents = packet.ReadVector3("Extents", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.ExtentsTarget = packet.ReadVector3("ExtentsTarget", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IAreaTriggerPolygon ReadCreateAreaTriggerPolygon(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerPolygon();
+ packet.ResetBitReader();
+ data.Vertices.Resize(packet.ReadUInt32());
+ data.VerticesTarget.Resize(packet.ReadUInt32());
+ data.Height = packet.ReadSingle("Height", indexes);
+ data.HeightTarget = packet.ReadSingle("HeightTarget", indexes);
+ for (var i = 0; i < data.Vertices.Count; ++i)
+ {
+ data.Vertices[i] = packet.ReadVector2("Vertices", indexes, i);
+ }
+ for (var i = 0; i < data.VerticesTarget.Count; ++i)
+ {
+ data.VerticesTarget[i] = packet.ReadVector2("VerticesTarget", indexes, i);
+ }
+ return data;
+ }
+
+ public static IAreaTriggerPolygon ReadUpdateAreaTriggerPolygon(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerPolygon();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(5);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Vertices.ReadUpdateMask(packet);
+ }
+ if (changesMask[2])
+ {
+ data.VerticesTarget.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ for (var i = 0; i < data.Vertices.Count; ++i)
+ {
+ if (data.Vertices.UpdateMask[i])
+ {
+ data.Vertices[i] = packet.ReadVector2("Vertices", indexes, i);
+ }
+ }
+ }
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.VerticesTarget.Count; ++i)
+ {
+ if (data.VerticesTarget.UpdateMask[i])
+ {
+ data.VerticesTarget[i] = packet.ReadVector2("VerticesTarget", indexes, i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data.Height = packet.ReadSingle("Height", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.HeightTarget = packet.ReadSingle("HeightTarget", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IAreaTriggerCylinder ReadCreateAreaTriggerCylinder(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerCylinder();
+ packet.ResetBitReader();
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ data.RadiusTarget = packet.ReadSingle("RadiusTarget", indexes);
+ data.Height = packet.ReadSingle("Height", indexes);
+ data.HeightTarget = packet.ReadSingle("HeightTarget", indexes);
+ data.LocationZOffset = packet.ReadSingle("LocationZOffset", indexes);
+ data.LocationZOffsetTarget = packet.ReadSingle("LocationZOffsetTarget", indexes);
+ return data;
+ }
+
+ public static IAreaTriggerCylinder ReadUpdateAreaTriggerCylinder(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerCylinder();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(7);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Radius = packet.ReadSingle("Radius", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.RadiusTarget = packet.ReadSingle("RadiusTarget", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.Height = packet.ReadSingle("Height", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.HeightTarget = packet.ReadSingle("HeightTarget", indexes);
+ }
+ if (changesMask[5])
+ {
+ data.LocationZOffset = packet.ReadSingle("LocationZOffset", indexes);
+ }
+ if (changesMask[6])
+ {
+ data.LocationZOffsetTarget = packet.ReadSingle("LocationZOffsetTarget", indexes);
+ }
+ }
+ return data;
+ }
+
+ public override IAreaTriggerData ReadCreateAreaTriggerData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new AreaTriggerData();
+ packet.ResetBitReader();
+ var hasTargetRollPitchYaw = false;
+ var hasForcedPositionAndRotation = false;
+ data.OverrideScaleCurve = ReadCreateScaleCurve(packet, indexes, "OverrideScaleCurve");
+ data.Caster = packet.ReadPackedGuid128("Caster", indexes);
+ data.Duration = packet.ReadUInt32("Duration", indexes);
+ data.TimeToTarget = packet.ReadUInt32("TimeToTarget", indexes);
+ data.TimeToTargetScale = packet.ReadUInt32("TimeToTargetScale", indexes);
+ data.TimeToTargetExtraScale = packet.ReadUInt32("TimeToTargetExtraScale", indexes);
+ data.TimeToTargetPos = packet.ReadUInt32("TimeToTargetPos", indexes);
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ data.SpellForVisuals = packet.ReadInt32("SpellForVisuals", indexes);
+ data.SpellXSpellVisualID = packet.ReadInt32("SpellXSpellVisualID", indexes);
+ data.BoundsRadius2D = packet.ReadSingle("BoundsRadius2D", indexes);
+ data.DecalPropertiesID = packet.ReadUInt32("DecalPropertiesID", indexes);
+ data.CreatingEffectGUID = packet.ReadPackedGuid128("CreatingEffectGUID", indexes);
+ data.OrbitPathTarget = packet.ReadPackedGuid128("OrbitPathTarget", indexes);
+ data.RollPitchYaw = packet.ReadVector3("RollPitchYaw", indexes);
+ data.MovementStartTime = packet.ReadUInt32("MovementStartTime", indexes);
+ data.CreationTime = packet.ReadUInt32("CreationTime", indexes);
+ data.ZOffset = packet.ReadSingle("ZOffset", indexes);
+ data.Flags = packet.ReadUInt32("Flags", indexes);
+ data.ScaleCurveId = packet.ReadUInt32("ScaleCurveId", indexes);
+ data.FacingCurveId = packet.ReadUInt32("FacingCurveId", indexes);
+ data.MorphCurveId = packet.ReadUInt32("MorphCurveId", indexes);
+ data.MoveCurveId = packet.ReadUInt32("MoveCurveId", indexes);
+ data.Facing = packet.ReadSingle("Facing", indexes);
+ data.PathType = packet.ReadInt32("PathType", indexes);
+ data.ShapeType = packet.ReadByte("ShapeType", indexes);
+ if (data.ShapeType == 0)
+ {
+ data.Sphere = ReadCreateAreaTriggerSphere(packet, indexes, "Sphere");
+ }
+ if (data.ShapeType == 1)
+ {
+ data.Box = ReadCreateAreaTriggerBox(packet, indexes, "Box");
+ }
+ if (data.ShapeType == 2 || data.ShapeType == 3 || data.ShapeType == 5 || data.ShapeType == 6)
+ {
+ data.Polygon = ReadCreateAreaTriggerPolygon(packet, indexes, "Polygon");
+ }
+ if (data.ShapeType == 4)
+ {
+ data.Cylinder = ReadCreateAreaTriggerCylinder(packet, indexes, "Cylinder");
+ }
+ data.ExtraScaleCurve = ReadCreateScaleCurve(packet, indexes, "ExtraScaleCurve");
+ packet.ResetBitReader();
+ hasTargetRollPitchYaw = packet.ReadBit("HasTargetRollPitchYaw", indexes);
+ hasForcedPositionAndRotation = packet.ReadBit("HasForcedPositionAndRotation", indexes);
+ data.OverrideMoveCurveX = ReadCreateScaleCurve(packet, indexes, "OverrideMoveCurveX");
+ if (hasTargetRollPitchYaw)
+ {
+ data.TargetRollPitchYaw = packet.ReadVector3("TargetRollPitchYaw", indexes);
+ }
+ if (hasForcedPositionAndRotation)
+ {
+ data.ForcedPositionAndRotation = ReadCreateForceSetAreaTriggerPositionAndRotation(packet, indexes, "ForcedPositionAndRotation");
+ }
+ data.OverrideMoveCurveY = ReadCreateScaleCurve(packet, indexes, "OverrideMoveCurveY");
+ data.OverrideMoveCurveZ = ReadCreateScaleCurve(packet, indexes, "OverrideMoveCurveZ");
+ data.VisualAnim = ReadCreateVisualAnim(packet, indexes, "VisualAnim");
+ if (data.PathType == 0)
+ {
+ data.Spline = ReadCreateAreaTriggerSplineCalculator(packet, indexes, "Spline");
+ }
+ if (data.PathType == 1)
+ {
+ data.Orbit = ReadCreateAreaTriggerOrbit(packet, indexes, "Orbit");
+ }
+ return data;
+ }
+
+ public override IAreaTriggerData ReadUpdateAreaTriggerData(Packet packet, params object[] indexes)
+ {
+ var data = new AreaTriggerData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(20);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.OverrideScaleCurve = ReadUpdateScaleCurve(packet, indexes, "OverrideScaleCurve");
+ }
+ if (changesMask[6])
+ {
+ data.Caster = packet.ReadPackedGuid128("Caster", indexes);
+ }
+ if (changesMask[7])
+ {
+ data.Duration = packet.ReadUInt32("Duration", indexes);
+ }
+ if (changesMask[8])
+ {
+ data.TimeToTarget = packet.ReadUInt32("TimeToTarget", indexes);
+ }
+ if (changesMask[9])
+ {
+ data.TimeToTargetScale = packet.ReadUInt32("TimeToTargetScale", indexes);
+ }
+ if (changesMask[10])
+ {
+ data.TimeToTargetExtraScale = packet.ReadUInt32("TimeToTargetExtraScale", indexes);
+ }
+ if (changesMask[11])
+ {
+ data.TimeToTargetPos = packet.ReadUInt32("TimeToTargetPos", indexes);
+ }
+ if (changesMask[12])
+ {
+ data.SpellID = packet.ReadInt32("SpellID", indexes);
+ }
+ if (changesMask[13])
+ {
+ data.SpellForVisuals = packet.ReadInt32("SpellForVisuals", indexes);
+ }
+ if (changesMask[14])
+ {
+ data.SpellXSpellVisualID = packet.ReadInt32("SpellXSpellVisualID", indexes);
+ }
+ if (changesMask[15])
+ {
+ data.BoundsRadius2D = packet.ReadSingle("BoundsRadius2D", indexes);
+ }
+ if (changesMask[16])
+ {
+ data.DecalPropertiesID = packet.ReadUInt32("DecalPropertiesID", indexes);
+ }
+ if (changesMask[17])
+ {
+ data.CreatingEffectGUID = packet.ReadPackedGuid128("CreatingEffectGUID", indexes);
+ }
+ if (changesMask[18])
+ {
+ data.OrbitPathTarget = packet.ReadPackedGuid128("OrbitPathTarget", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.ExtraScaleCurve = ReadUpdateScaleCurve(packet, indexes, "ExtraScaleCurve");
+ }
+ if (changesMask[3])
+ {
+ data.OverrideMoveCurveX = ReadUpdateScaleCurve(packet, indexes, "OverrideMoveCurveX");
+ }
+ if (changesMask[4])
+ {
+ data.OverrideMoveCurveY = ReadUpdateScaleCurve(packet, indexes, "OverrideMoveCurveY");
+ }
+ if (changesMask[5])
+ {
+ data.OverrideMoveCurveZ = ReadUpdateScaleCurve(packet, indexes, "OverrideMoveCurveZ");
+ }
+ if (changesMask[19])
+ {
+ data.VisualAnim = ReadUpdateVisualAnim(packet, indexes, "VisualAnim");
+ }
+ }
+ return data;
+ }
+
+ public override ISceneObjectData ReadCreateSceneObjectData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new SceneObjectData();
+ packet.ResetBitReader();
+ data.ScriptPackageID = packet.ReadInt32("ScriptPackageID", indexes);
+ data.RndSeedVal = packet.ReadUInt32("RndSeedVal", indexes);
+ data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
+ data.SceneType = packet.ReadUInt32("SceneType", indexes);
+ return data;
+ }
+
+ public override ISceneObjectData ReadUpdateSceneObjectData(Packet packet, params object[] indexes)
+ {
+ var data = new SceneObjectData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(5);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.ScriptPackageID = packet.ReadInt32("ScriptPackageID", indexes);
+ }
+ if (changesMask[2])
+ {
+ data.RndSeedVal = packet.ReadUInt32("RndSeedVal", indexes);
+ }
+ if (changesMask[3])
+ {
+ data.CreatedBy = packet.ReadPackedGuid128("CreatedBy", indexes);
+ }
+ if (changesMask[4])
+ {
+ data.SceneType = packet.ReadUInt32("SceneType", indexes);
+ }
+ }
+ return data;
+ }
+
+ public static IConversationLine ReadCreateConversationLine(Packet packet, params object[] indexes)
+ {
+ var data = new ConversationLine();
+ packet.ResetBitReader();
+ data.ConversationLineID = packet.ReadInt32("ConversationLineID", indexes);
+ data.BroadcastTextID = packet.ReadInt32("BroadcastTextID", indexes);
+ data.StartTime = packet.ReadUInt32("StartTime", indexes);
+ data.UiCameraID = packet.ReadInt32("UiCameraID", indexes);
+ data.ActorIndex = packet.ReadByte("ActorIndex", indexes);
+ data.Flags = packet.ReadByte("Flags", indexes);
+ return data;
+ }
+
+ public static IConversationLine ReadUpdateConversationLine(Packet packet, params object[] indexes)
+ {
+ var data = new ConversationLine();
+ packet.ResetBitReader();
+ data.ConversationLineID = packet.ReadInt32("ConversationLineID", indexes);
+ data.BroadcastTextID = packet.ReadInt32("BroadcastTextID", indexes);
+ data.StartTime = packet.ReadUInt32("StartTime", indexes);
+ data.UiCameraID = packet.ReadInt32("UiCameraID", indexes);
+ data.ActorIndex = packet.ReadByte("ActorIndex", indexes);
+ data.Flags = packet.ReadByte("Flags", indexes);
+ return data;
+ }
+
+ public static IConversationActor ReadCreateConversationActor(Packet packet, params object[] indexes)
+ {
+ var data = new ConversationActor();
+ packet.ResetBitReader();
+ data.Type = packet.ReadBits("Type", 1, indexes);
+ data.Id = packet.ReadInt32("Id", indexes);
+ if (data.Type == 1)
+ {
+ data.CreatureID = packet.ReadUInt32("CreatureID", indexes);
+ data.CreatureDisplayInfoID = packet.ReadUInt32("CreatureDisplayInfoID", indexes);
+ }
+ if (data.Type == 0)
+ {
+ data.ActorGUID = packet.ReadPackedGuid128("ActorGUID", indexes);
+ }
+ return data;
+ }
+
+ public static IConversationActor ReadUpdateConversationActor(Packet packet, params object[] indexes)
+ {
+ var data = new ConversationActor();
+ packet.ResetBitReader();
+ data.Type = packet.ReadBits("Type", 1, indexes);
+ data.Id = packet.ReadInt32("Id", indexes);
+ if (data.Type == 1)
+ {
+ data.CreatureID = packet.ReadUInt32("CreatureID", indexes);
+ data.CreatureDisplayInfoID = packet.ReadUInt32("CreatureDisplayInfoID", indexes);
+ }
+ if (data.Type == 0)
+ {
+ data.ActorGUID = packet.ReadPackedGuid128("ActorGUID", indexes);
+ }
+ return data;
+ }
+
+ public override IConversationData ReadCreateConversationData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new ConversationData();
+ packet.ResetBitReader();
+ data.Lines = new IConversationLine[packet.ReadUInt32()];
+ data.LastLineEndTime = packet.ReadInt32("LastLineEndTime", indexes);
+ for (var i = 0; i < data.Lines.Length; ++i)
+ {
+ data.Lines[i] = ReadCreateConversationLine(packet, indexes, "Lines", i);
+ }
+ data.Actors.Resize(packet.ReadUInt32());
+ for (var i = 0; i < data.Actors.Count; ++i)
+ {
+ data.Actors[i] = ReadCreateConversationActor(packet, indexes, "Actors", i);
+ }
+ return data;
+ }
+
+ public override IConversationData ReadUpdateConversationData(Packet packet, params object[] indexes)
+ {
+ var data = new ConversationData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(4);
+ var changesMask = new BitArray(rawChangesMask);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Lines = Enumerable.Range(0, (int)packet.ReadBits(32)).Select(x => new ConversationLine()).Cast().ToArray();
+ for (var i = 0; i < data.Lines.Length; ++i)
+ {
+ data.Lines[i] = ReadUpdateConversationLine(packet, indexes, "Lines", i);
+ }
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data.Actors.ReadUpdateMask(packet);
+ }
+ }
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ for (var i = 0; i < data.Actors.Count; ++i)
+ {
+ if (data.Actors.UpdateMask[i])
+ {
+ data.Actors[i] = ReadUpdateConversationActor(packet, indexes, "Actors", i);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
+ data.LastLineEndTime = packet.ReadInt32("LastLineEndTime", indexes);
+ }
+ }
+ return data;
+ }
+
+ public override IVendorData ReadCreateVendorData(Packet packet, UpdateFieldFlag flags, params object[] indexes)
+ {
+ var data = new VendorData();
+ packet.ResetBitReader();
+ data.Flags = packet.ReadInt32("Flags", indexes);
+ return data;
+ }
+
+ public override IVendorData ReadUpdateVendorData(Packet packet, params object[] indexes)
+ {
+ var data = new VendorData();
+ packet.ResetBitReader();
+ var rawChangesMask = new int[1];
+ rawChangesMask[0] = (int)packet.ReadBits(2);
+ var changesMask = new BitArray(rawChangesMask);
+
+ packet.ResetBitReader();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.Flags = packet.ReadInt32("Flags", indexes);
+ }
+ }
+ return data;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs
index 010ed215d9..99ed853aeb 100644
--- a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs
+++ b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs
@@ -92,7 +92,7 @@ public static void HandleUpdateObject(Packet packet)
WoWObject obj;
Storage.Objects.TryGetValue(guid, out obj);
- var fragments = obj != null ? obj.EntityFragments : [new WowCSEntityFragment(WowCSEntityFragments1100.CGObject)];
+ var fragments = obj?.EntityFragments ?? [new WowCSEntityFragment(WowCSEntityFragments1100.CGObject)];
fieldsData.ReadBool("IsOwned", i);
if (fieldsData.ReadBool("HasFragmentUpdates", i))
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ActivePlayerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ActivePlayerData.cs
new file mode 100644
index 0000000000..306bca8526
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ActivePlayerData.cs
@@ -0,0 +1,162 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ActivePlayerData : IActivePlayerData
+ {
+ public WowGuid[] InvSlots { get; } = new WowGuid[146];
+ public WowGuid FarsightObject { get; set; }
+ public WowGuid SummonedBattlePetGUID { get; set; }
+ public System.Nullable Coinage { get; set; }
+ public System.Nullable AccountBankCoinage { get; set; }
+ public System.Nullable XP { get; set; }
+ public System.Nullable NextLevelXP { get; set; }
+ public System.Nullable TrialXP { get; set; }
+ public ISkillInfo Skill { get; set; }
+ public System.Nullable CharacterPoints { get; set; }
+ public System.Nullable MaxTalentTiers { get; set; }
+ public System.Nullable TrackCreatureMask { get; set; }
+ public System.Nullable[] TrackResourceMask { get; } = new System.Nullable[2];
+ public System.Nullable MainhandExpertise { get; set; }
+ public System.Nullable OffhandExpertise { get; set; }
+ public System.Nullable RangedExpertise { get; set; }
+ public System.Nullable CombatRatingExpertise { get; set; }
+ public System.Nullable BlockPercentage { get; set; }
+ public System.Nullable DodgePercentage { get; set; }
+ public System.Nullable DodgePercentageFromAttribute { get; set; }
+ public System.Nullable ParryPercentage { get; set; }
+ public System.Nullable ParryPercentageFromAttribute { get; set; }
+ public System.Nullable CritPercentage { get; set; }
+ public System.Nullable RangedCritPercentage { get; set; }
+ public System.Nullable OffhandCritPercentage { get; set; }
+ public System.Nullable[] SpellCritPercentage { get; } = new System.Nullable[7];
+ public System.Nullable[] ModDamageDonePos { get; } = new System.Nullable[7];
+ public System.Nullable[] ModDamageDoneNeg { get; } = new System.Nullable[7];
+ public System.Nullable[] ModDamageDonePercent { get; } = new System.Nullable[7];
+ public System.Nullable ShieldBlock { get; set; }
+ public System.Nullable ShieldBlockCritPercentage { get; set; }
+ public System.Nullable Mastery { get; set; }
+ public System.Nullable Speed { get; set; }
+ public System.Nullable Avoidance { get; set; }
+ public System.Nullable Sturdiness { get; set; }
+ public System.Nullable Versatility { get; set; }
+ public System.Nullable VersatilityBonus { get; set; }
+ public System.Nullable PvpPowerDamage { get; set; }
+ public System.Nullable PvpPowerHealing { get; set; }
+ public IBitVectors BitVectors { get; set; }
+ public IRestInfo[] RestInfo { get; } = new IRestInfo[2];
+ public System.Nullable ModHealingDonePos { get; set; }
+ public System.Nullable ModHealingPercent { get; set; }
+ public System.Nullable ModHealingDonePercent { get; set; }
+ public System.Nullable ModPeriodicHealingDonePercent { get; set; }
+ public System.Nullable[] WeaponDmgMultipliers { get; } = new System.Nullable[3];
+ public System.Nullable[] WeaponAtkSpeedMultipliers { get; } = new System.Nullable[3];
+ public System.Nullable ModSpellPowerPercent { get; set; }
+ public System.Nullable ModResiliencePercent { get; set; }
+ public System.Nullable OverrideSpellPowerByAPPercent { get; set; }
+ public System.Nullable OverrideAPBySpellPowerPercent { get; set; }
+ public System.Nullable ModTargetResistance { get; set; }
+ public System.Nullable ModTargetPhysicalResistance { get; set; }
+ public System.Nullable LocalFlags { get; set; }
+ public System.Nullable GrantableLevels { get; set; }
+ public System.Nullable MultiActionBars { get; set; }
+ public System.Nullable LifetimeMaxRank { get; set; }
+ public System.Nullable NumRespecs { get; set; }
+ public System.Nullable AmmoID { get; set; }
+ public System.Nullable PvpMedals { get; set; }
+ public System.Nullable[] BuybackPrice { get; } = new System.Nullable[12];
+ public System.Nullable[] BuybackTimestamp { get; } = new System.Nullable[12];
+ public System.Nullable TodayHonorableKills { get; set; }
+ public System.Nullable TodayDishonorableKills { get; set; }
+ public System.Nullable YesterdayHonorableKills { get; set; }
+ public System.Nullable YesterdayDishonorableKills { get; set; }
+ public System.Nullable LastWeekHonorableKills { get; set; }
+ public System.Nullable LastWeekDishonorableKills { get; set; }
+ public System.Nullable ThisWeekHonorableKills { get; set; }
+ public System.Nullable ThisWeekDishonorableKills { get; set; }
+ public System.Nullable ThisWeekContribution { get; set; }
+ public System.Nullable LifetimeHonorableKills { get; set; }
+ public System.Nullable LifetimeDishonorableKills { get; set; }
+ public System.Nullable Field_F24 { get; set; }
+ public System.Nullable YesterdayContribution { get; set; }
+ public System.Nullable LastWeekContribution { get; set; }
+ public System.Nullable LastWeekRank { get; set; }
+ public System.Nullable WatchedFactionIndex { get; set; }
+ public System.Nullable[] CombatRatings { get; } = new System.Nullable[32];
+ public System.Nullable MaxLevel { get; set; }
+ public System.Nullable ScalingPlayerLevelDelta { get; set; }
+ public System.Nullable MaxCreatureScalingLevel { get; set; }
+ public System.Nullable[] NoReagentCostMask { get; } = new System.Nullable[4];
+ public System.Nullable PetSpellPower { get; set; }
+ public System.Nullable[] ProfessionSkillLine { get; } = new System.Nullable[2];
+ public System.Nullable UiHitModifier { get; set; }
+ public System.Nullable UiSpellHitModifier { get; set; }
+ public System.Nullable HomeRealmTimeOffset { get; set; }
+ public System.Nullable ModPetHaste { get; set; }
+ public System.Nullable LocalRegenFlags { get; set; }
+ public System.Nullable AuraVision { get; set; }
+ public System.Nullable NumBackpackSlots { get; set; }
+ public System.Nullable OverrideSpellsID { get; set; }
+ public System.Nullable LfgBonusFactionID { get; set; }
+ public System.Nullable LootSpecID { get; set; }
+ public System.Nullable OverrideZonePVPType { get; set; }
+ public System.Nullable[] BagSlotFlags { get; } = new System.Nullable[4];
+ public System.Nullable[] BankBagSlotFlags { get; } = new System.Nullable[7];
+ public System.Nullable Honor { get; set; }
+ public System.Nullable HonorNextLevel { get; set; }
+ public System.Nullable Field_F74 { get; set; }
+ public System.Nullable Field_1261 { get; set; }
+ public System.Nullable PvpTierMaxFromWins { get; set; }
+ public System.Nullable PvpLastWeeksTierMaxFromWins { get; set; }
+ public System.Nullable PvpRankProgress { get; set; }
+ public System.Nullable PerksProgramCurrency { get; set; }
+ public IResearchHistory ResearchHistory { get; set; }
+ public System.Nullable TimerunningSeasonID { get; set; }
+ public System.Nullable TransportServerTime { get; set; }
+ public System.Nullable ActiveCombatTraitConfigID { get; set; }
+ public System.Nullable[] GlyphSlots { get; } = new System.Nullable[6];
+ public System.Nullable[] Glyphs { get; } = new System.Nullable[6];
+ public System.Nullable GlyphsEnabled { get; set; }
+ public System.Nullable LfgRoles { get; set; }
+ public IStableInfo PetStable { get; set; }
+ public System.Nullable NumStableSlots { get; set; }
+ public System.Nullable[] Field_4348 { get; } = new System.Nullable[13];
+ public System.Nullable Field_17B8 { get; set; }
+ public DynamicUpdateField>[] ResearchSites { get; } = new DynamicUpdateField>[1] { new DynamicUpdateField>() };
+ public DynamicUpdateField>[] ResearchSiteProgress { get; } = new DynamicUpdateField>[1] { new DynamicUpdateField>() };
+ public DynamicUpdateField[] Research { get; } = new DynamicUpdateField[1] { new DynamicUpdateField() };
+ public DynamicUpdateField> KnownTitles { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> DailyQuestsCompleted { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> Field_1000 { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> AvailableQuestLineXQuestIDs { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> Heirlooms { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> HeirloomFlags { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> Toys { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> ToyFlags { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> Transmog { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> ConditionalTransmog { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> SelfResSpells { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> WarbandScenes { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField SpellPctModByLabel { get; } = new DynamicUpdateField();
+ public DynamicUpdateField SpellFlatModByLabel { get; } = new DynamicUpdateField();
+ public DynamicUpdateField TaskQuests { get; } = new DynamicUpdateField();
+ public DynamicUpdateField CategoryCooldownMods { get; } = new DynamicUpdateField();
+ public DynamicUpdateField WeeklySpellUses { get; } = new DynamicUpdateField();
+ public IPVPInfo[] PvpInfo { get; } = new IPVPInfo[9];
+ public System.Nullable SortBagsRightToLeft { get; set; }
+ public System.Nullable InsertItemsLeftToRight { get; set; }
+ public DynamicUpdateField CharacterDataElements { get; } = new DynamicUpdateField();
+ public DynamicUpdateField AccountDataElements { get; } = new DynamicUpdateField();
+ public DynamicUpdateField CharacterRestrictions { get; } = new DynamicUpdateField();
+ public DynamicUpdateField TraitConfigs { get; } = new DynamicUpdateField();
+ public DynamicUpdateField AccountBankTabSettings { get; } = new DynamicUpdateField();
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerBox.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerBox.cs
new file mode 100644
index 0000000000..155d5b2548
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerBox.cs
@@ -0,0 +1,18 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerBox : IAreaTriggerBox
+ {
+ public System.Nullable Extents { get; set; }
+ public System.Nullable ExtentsTarget { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerCylinder.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerCylinder.cs
new file mode 100644
index 0000000000..8840d757f8
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerCylinder.cs
@@ -0,0 +1,22 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerCylinder : IAreaTriggerCylinder
+ {
+ public System.Nullable Radius { get; set; }
+ public System.Nullable RadiusTarget { get; set; }
+ public System.Nullable Height { get; set; }
+ public System.Nullable HeightTarget { get; set; }
+ public System.Nullable LocationZOffset { get; set; }
+ public System.Nullable LocationZOffsetTarget { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerData.cs
new file mode 100644
index 0000000000..61c69eb612
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerData.cs
@@ -0,0 +1,56 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerData : IAreaTriggerData
+ {
+ public WowGuid Caster { get; set; }
+ public System.Nullable Duration { get; set; }
+ public System.Nullable TimeToTarget { get; set; }
+ public System.Nullable TimeToTargetScale { get; set; }
+ public System.Nullable TimeToTargetExtraScale { get; set; }
+ public System.Nullable TimeToTargetPos { get; set; }
+ public System.Nullable SpellID { get; set; }
+ public System.Nullable SpellForVisuals { get; set; }
+ public System.Nullable SpellXSpellVisualID { get; set; }
+ public System.Nullable BoundsRadius2D { get; set; }
+ public System.Nullable DecalPropertiesID { get; set; }
+ public WowGuid CreatingEffectGUID { get; set; }
+ public WowGuid OrbitPathTarget { get; set; }
+ public Vector3 RollPitchYaw { get; set; }
+ public System.Nullable MovementStartTime { get; set; }
+ public System.Nullable CreationTime { get; set; }
+ public System.Nullable ZOffset { get; set; }
+ public Vector3? TargetRollPitchYaw { get; set; }
+ public System.Nullable Flags { get; set; }
+ public System.Nullable ScaleCurveId { get; set; }
+ public System.Nullable FacingCurveId { get; set; }
+ public System.Nullable MorphCurveId { get; set; }
+ public System.Nullable MoveCurveId { get; set; }
+ public System.Nullable Facing { get; set; }
+ public IForceSetAreaTriggerPositionAndRotation ForcedPositionAndRotation { get; set; }
+ public System.Nullable PathType { get; set; }
+ public System.Nullable ShapeType { get; set; }
+ public IAreaTriggerMovementScript MovementScript { get; set; }
+ public IAreaTriggerSphere Sphere { get; set; }
+ public IAreaTriggerBox Box { get; set; }
+ public IAreaTriggerPolygon Polygon { get; set; }
+ public IAreaTriggerCylinder Cylinder { get; set; }
+ public IScaleCurve OverrideScaleCurve { get; set; }
+ public IScaleCurve ExtraScaleCurve { get; set; }
+ public IScaleCurve OverrideMoveCurveX { get; set; }
+ public IScaleCurve OverrideMoveCurveY { get; set; }
+ public IScaleCurve OverrideMoveCurveZ { get; set; }
+ public IVisualAnim VisualAnim { get; set; }
+ public IAreaTriggerSplineCalculator Spline { get; set; }
+ public IAreaTriggerOrbit Orbit { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerOrbit.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerOrbit.cs
new file mode 100644
index 0000000000..b653f7e3b2
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerOrbit.cs
@@ -0,0 +1,22 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerOrbit : IAreaTriggerOrbit
+ {
+ public Vector3 Center { get; set; }
+ public System.Nullable Radius { get; set; }
+ public System.Nullable InitialAngle { get; set; }
+ public System.Nullable BlendFromRadius { get; set; }
+ public System.Nullable ExtraTimeForBlending { get; set; }
+ public System.Nullable CounterClockwise { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerPolygon.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerPolygon.cs
new file mode 100644
index 0000000000..b589402529
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerPolygon.cs
@@ -0,0 +1,20 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerPolygon : IAreaTriggerPolygon
+ {
+ public System.Nullable Height { get; set; }
+ public System.Nullable HeightTarget { get; set; }
+ public DynamicUpdateField> Vertices { get; } = new DynamicUpdateField>();
+ public DynamicUpdateField> VerticesTarget { get; } = new DynamicUpdateField>();
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerSphere.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerSphere.cs
new file mode 100644
index 0000000000..6048085c06
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerSphere.cs
@@ -0,0 +1,18 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerSphere : IAreaTriggerSphere
+ {
+ public System.Nullable Radius { get; set; }
+ public System.Nullable RadiusTarget { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerSplineCalculator.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerSplineCalculator.cs
new file mode 100644
index 0000000000..eb64c5485c
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/AreaTriggerSplineCalculator.cs
@@ -0,0 +1,18 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class AreaTriggerSplineCalculator : IAreaTriggerSplineCalculator
+ {
+ public DynamicUpdateField> Points { get; } = new DynamicUpdateField>();
+ public System.Nullable Catmullrom { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ArenaCooldown.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ArenaCooldown.cs
new file mode 100644
index 0000000000..2556e425d7
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ArenaCooldown.cs
@@ -0,0 +1,24 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ArenaCooldown : IArenaCooldown
+ {
+ public System.Nullable SpellID { get; set; }
+ public System.Nullable ItemID { get; set; }
+ public System.Nullable Charges { get; set; }
+ public System.Nullable Flags { get; set; }
+ public System.Nullable StartTime { get; set; }
+ public System.Nullable EndTime { get; set; }
+ public System.Nullable NextChargeTime { get; set; }
+ public System.Nullable MaxCharges { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ArtifactPower.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ArtifactPower.cs
new file mode 100644
index 0000000000..2f38a2ff7e
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ArtifactPower.cs
@@ -0,0 +1,19 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ArtifactPower : IArtifactPower
+ {
+ public short ArtifactPowerID { get; set; }
+ public byte PurchasedRank { get; set; }
+ public byte CurrentRankWithBonus { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BankTabSettings.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BankTabSettings.cs
new file mode 100644
index 0000000000..4131f8c48b
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BankTabSettings.cs
@@ -0,0 +1,20 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class BankTabSettings : IBankTabSettings
+ {
+ public System.Nullable DepositFlags { get; set; }
+ public string Name { get; set; }
+ public string Icon { get; set; }
+ public string Description { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BitVector.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BitVector.cs
new file mode 100644
index 0000000000..6478bde6aa
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BitVector.cs
@@ -0,0 +1,17 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class BitVector : IBitVector
+ {
+ public DynamicUpdateField> Values { get; } = new DynamicUpdateField>();
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BitVectors.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BitVectors.cs
new file mode 100644
index 0000000000..23b211f641
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/BitVectors.cs
@@ -0,0 +1,17 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class BitVectors : IBitVectors
+ {
+ public IBitVector[] Values { get; } = new IBitVector[13];
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CategoryCooldownMod.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CategoryCooldownMod.cs
new file mode 100644
index 0000000000..8744e4b6b3
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CategoryCooldownMod.cs
@@ -0,0 +1,18 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class CategoryCooldownMod : ICategoryCooldownMod
+ {
+ public int SpellCategoryID { get; set; }
+ public int ModCooldown { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CharacterRestriction.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CharacterRestriction.cs
new file mode 100644
index 0000000000..f23a122a40
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CharacterRestriction.cs
@@ -0,0 +1,20 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class CharacterRestriction : ICharacterRestriction
+ {
+ public int Field_0 { get; set; }
+ public int Field_4 { get; set; }
+ public int Field_8 { get; set; }
+ public uint Type { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ChrCustomizationChoice.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ChrCustomizationChoice.cs
new file mode 100644
index 0000000000..59d9458680
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ChrCustomizationChoice.cs
@@ -0,0 +1,18 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ChrCustomizationChoice : IChrCustomizationChoice
+ {
+ public uint ChrCustomizationOptionID { get; set; }
+ public uint ChrCustomizationChoiceID { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CompletedProject.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CompletedProject.cs
new file mode 100644
index 0000000000..c9d506f31a
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CompletedProject.cs
@@ -0,0 +1,19 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class CompletedProject : ICompletedProject
+ {
+ public System.Nullable ProjectID { get; set; }
+ public System.Nullable FirstCompleted { get; set; }
+ public System.Nullable CompletionCount { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ContainerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ContainerData.cs
new file mode 100644
index 0000000000..73d5255630
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ContainerData.cs
@@ -0,0 +1,18 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ContainerData : IContainerData
+ {
+ public WowGuid[] Slots { get; } = new WowGuid[36];
+ public System.Nullable NumSlots { get; set; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationActor.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationActor.cs
new file mode 100644
index 0000000000..c671a935ea
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationActor.cs
@@ -0,0 +1,24 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ConversationActor : IConversationActor
+ {
+ public int Id { get; set; }
+ public uint CreatureID { get; set; }
+ public uint CreatureDisplayInfoID { get; set; }
+ public WowGuid ActorGUID { get; set; }
+ public uint Type { get; set; }
+
+ // dummies required by interface
+ public uint NoActorObject { get; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationData.cs
new file mode 100644
index 0000000000..9e5ac1aed2
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationData.cs
@@ -0,0 +1,19 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ConversationData : IMutableConversationData
+ {
+ public System.Nullable LastLineEndTime { get; set; }
+ public IConversationLine[] Lines { get; set; }
+ public DynamicUpdateField Actors { get; } = new DynamicUpdateField();
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationLine.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationLine.cs
new file mode 100644
index 0000000000..edf4c3ccbe
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ConversationLine.cs
@@ -0,0 +1,25 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class ConversationLine : IConversationLine
+ {
+ public int ConversationLineID { get; set; }
+ public int BroadcastTextID { get; set; }
+ public uint StartTime { get; set; }
+ public int UiCameraID { get; set; }
+ public byte ActorIndex { get; set; }
+ public byte Flags { get; set; }
+
+ // dummies required by interface
+ public byte ChatType { get; }
+ }
+}
+
diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CorpseData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CorpseData.cs
new file mode 100644
index 0000000000..b6ed61eccd
--- /dev/null
+++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CorpseData.cs
@@ -0,0 +1,28 @@
+//
+// DO NOT EDIT
+//
+
+using System.CodeDom.Compiler;
+using WowPacketParser.Misc;
+using WowPacketParser.Store.Objects.UpdateFields;
+
+namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V5_5_3_64802
+{
+ [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")]
+ public class CorpseData : ICorpseData
+ {
+ public System.Nullable DynamicFlags { get; set; }
+ public WowGuid Owner { get; set; }
+ public WowGuid PartyGUID { get; set; }
+ public WowGuid GuildGUID { get; set; }
+ public System.Nullable DisplayID { get; set; }
+ public System.Nullable[] Items { get; } = new System.Nullable[19];
+ public System.Nullable