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..d73e940edc 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..588ba7c8f0 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) @@ -980,11 +980,9 @@ public static void HandleAuraUpdate(Packet packet) for (var j = 0; j < effectCount; ++j) packet.ReadSingle("EstimatedPoints", i, j); - - // (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..76db3e2456 --- /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; + } + + } +} diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs index 010ed215d9..f9ed1c1cc8 100644 --- a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs +++ b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler.cs @@ -92,9 +92,10 @@ 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)) { switch (fieldsData.ReadByte("ArchetypeSerializationType", i)) @@ -110,7 +111,7 @@ public static void HandleUpdateObject(Packet packet) fragments.RemoveAll(f => f == removedFragment); fragments.Sort(); break; - } + } } var fragmentBitCount = 0; 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..584c36d323 --- /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 Vector3 Extents { get; set; } + public Vector3 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..fab1d66a7b --- /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..a39c13dd78 --- /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 RaceID { get; set; } + public System.Nullable Sex { get; set; } + public System.Nullable Class { get; set; } + public System.Nullable Flags { get; set; } + public System.Nullable FactionTemplate { get; set; } + public DynamicUpdateField Customizations { get; } = new DynamicUpdateField(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CustomTabardInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CustomTabardInfo.cs new file mode 100644 index 0000000000..7d236b5629 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/CustomTabardInfo.cs @@ -0,0 +1,21 @@ +// +// 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 CustomTabardInfo : ICustomTabardInfo + { + public System.Nullable EmblemStyle { get; set; } + public System.Nullable EmblemColor { get; set; } + public System.Nullable BorderStyle { get; set; } + public System.Nullable BorderColor { get; set; } + public System.Nullable BackgroundColor { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/DeclinedNames.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/DeclinedNames.cs new file mode 100644 index 0000000000..0815a6ad74 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/DeclinedNames.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 DeclinedNames : IDeclinedNames + { + public string[] Name { get; } = new string[5]; + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/DynamicObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/DynamicObjectData.cs new file mode 100644 index 0000000000..2c3ff22e96 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/DynamicObjectData.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 DynamicObjectData : IDynamicObjectData + { + public WowGuid Caster { get; set; } + public System.Nullable Type { get; set; } + public System.Nullable SpellXSpellVisualID { get; set; } + public System.Nullable SpellID { get; set; } + public System.Nullable Radius { get; set; } + public System.Nullable CastTime { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ForceSetAreaTriggerPositionAndRotation.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ForceSetAreaTriggerPositionAndRotation.cs new file mode 100644 index 0000000000..150f06406f --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ForceSetAreaTriggerPositionAndRotation.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 ForceSetAreaTriggerPositionAndRotation : IForceSetAreaTriggerPositionAndRotation + { + public WowGuid TriggerGUID { get; set; } + public Vector3 Position { get; set; } + public Quaternion Rotation { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/GameObjectAssistActionData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/GameObjectAssistActionData.cs new file mode 100644 index 0000000000..99e5dfc92b --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/GameObjectAssistActionData.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 GameObjectAssistActionData : IGameObjectAssistActionData + { + public string PlayerName { get; set; } + public string MonsterName { get; set; } + public uint VirtualRealmAddress { get; set; } + public byte Sex { get; set; } + public long Time { get; set; } + public int DelveTier { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/GameObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/GameObjectData.cs new file mode 100644 index 0000000000..070de51928 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/GameObjectData.cs @@ -0,0 +1,37 @@ +// +// 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 GameObjectData : IMutableGameObjectData + { + public System.Nullable DisplayID { get; set; } + public System.Nullable SpellVisualID { get; set; } + public System.Nullable StateSpellVisualID { get; set; } + public System.Nullable SpawnTrackingStateAnimID { get; set; } + public System.Nullable SpawnTrackingStateAnimKitID { get; set; } + public System.Nullable StateWorldEffectsQuestObjectiveID { get; set; } = null; + public System.Nullable[] StateWorldEffectIDs { get; set; } + public WowGuid CreatedBy { get; set; } + public WowGuid GuildGUID { get; set; } + public System.Nullable Flags { get; set; } + public Quaternion? ParentRotation { get; set; } + public System.Nullable FactionTemplate { get; set; } + public System.Nullable Level { get; set; } + public System.Nullable State { get; set; } + public System.Nullable TypeID { get; set; } + public System.Nullable PercentHealth { get; set; } + public System.Nullable ArtKit { get; set; } + public System.Nullable CustomParam { get; set; } + public IGameObjectAssistActionData AssistActionData { get; set; } + public DynamicUpdateField> EnableDoodadSets { get; } = new DynamicUpdateField>(); + public DynamicUpdateField> WorldEffects { get; } = new DynamicUpdateField>(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemData.cs new file mode 100644 index 0000000000..8d6227c40c --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemData.cs @@ -0,0 +1,39 @@ +// +// 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 ItemData : IItemData + { + public WowGuid Owner { get; set; } + public WowGuid ContainedIn { get; set; } + public WowGuid Creator { get; set; } + public WowGuid GiftCreator { get; set; } + public System.Nullable StackCount { get; set; } + public System.Nullable Expiration { get; set; } + public System.Nullable[] SpellCharges { get; } = new System.Nullable[5]; + public System.Nullable DynamicFlags { get; set; } + public IItemEnchantment[] Enchantment { get; } = new IItemEnchantment[13]; + public System.Nullable PropertySeed { get; set; } + public System.Nullable RandomPropertiesID { get; set; } + public System.Nullable Durability { get; set; } + public System.Nullable MaxDurability { get; set; } + public System.Nullable CreatePlayedTime { get; set; } + public System.Nullable Context { get; set; } + public System.Nullable CreateTime { get; set; } + public System.Nullable ArtifactXP { get; set; } + public System.Nullable ItemAppearanceModID { get; set; } + public System.Nullable ZoneFlags { get; set; } + public System.Nullable DEBUGItemLevel { get; set; } + public DynamicUpdateField ArtifactPowers { get; } = new DynamicUpdateField(); + public DynamicUpdateField Gems { get; } = new DynamicUpdateField(); + public IItemModList Modifiers { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemEnchantment.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemEnchantment.cs new file mode 100644 index 0000000000..92d6aa7c6f --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemEnchantment.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 ItemEnchantment : IItemEnchantment + { + public System.Nullable ID { get; set; } + public System.Nullable Duration { get; set; } + public System.Nullable Charges { get; set; } + public System.Nullable Inactive { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemMod.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemMod.cs new file mode 100644 index 0000000000..4a0ff7b669 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemMod.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 ItemMod : IItemMod + { + public byte Type { get; set; } + public int Value { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemModList.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemModList.cs new file mode 100644 index 0000000000..f42d5057b1 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ItemModList.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 ItemModList : IItemModList + { + public DynamicUpdateField Values { get; } = new DynamicUpdateField(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/LeaverInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/LeaverInfo.cs new file mode 100644 index 0000000000..72adec17da --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/LeaverInfo.cs @@ -0,0 +1,26 @@ +// +// 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 LeaverInfo : ILeaverInfo + { + public WowGuid BnetAccountGUID { get; set; } + public float LeaveScore { get; set; } + public uint SeasonID { get; set; } + public uint TotalLeaves { get; set; } + public uint TotalSuccesses { get; set; } + public int ConsecutiveSuccesses { get; set; } + public long LastPenaltyTime { get; set; } + public long LeaverExpirationTime { get; set; } + public int Unknown_1120 { get; set; } + public uint LeaverStatus { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ObjectData.cs new file mode 100644 index 0000000000..719555acd6 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ObjectData.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 ObjectData : IMutableObjectData + { + public System.Nullable EntryID { get; set; } + public System.Nullable DynamicFlags { get; set; } + public System.Nullable Scale { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PVPInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PVPInfo.cs new file mode 100644 index 0000000000..7dad6bc7b5 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PVPInfo.cs @@ -0,0 +1,34 @@ +// +// 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 PVPInfo : IPVPInfo + { + public System.Nullable Bracket { get; set; } + public System.Nullable PvpRatingID { get; set; } + public System.Nullable WeeklyPlayed { get; set; } + public System.Nullable WeeklyWon { get; set; } + public System.Nullable SeasonPlayed { get; set; } + public System.Nullable SeasonWon { get; set; } + public System.Nullable Rating { get; set; } + public System.Nullable WeeklyBestRating { get; set; } + public System.Nullable SeasonBestRating { get; set; } + public System.Nullable PvpTierID { get; set; } + public System.Nullable WeeklyBestWinPvpTierID { get; set; } + public System.Nullable Field_28 { get; set; } + public System.Nullable Field_2C { get; set; } + public System.Nullable WeeklyRoundsPlayed { get; set; } + public System.Nullable WeeklyRoundsWon { get; set; } + public System.Nullable SeasonRoundsPlayed { get; set; } + public System.Nullable SeasonRoundsWon { get; set; } + public System.Nullable Disqualified { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PassiveSpellHistory.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PassiveSpellHistory.cs new file mode 100644 index 0000000000..f669ef5e84 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PassiveSpellHistory.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 PassiveSpellHistory : IPassiveSpellHistory + { + public int SpellID { get; set; } + public int AuraSpellID { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PetCreatureName.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PetCreatureName.cs new file mode 100644 index 0000000000..5fd7e0f2a5 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PetCreatureName.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 PetCreatureName : IPetCreatureName + { + public System.Nullable CreatureID { get; set; } + public string Name { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PlayerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PlayerData.cs new file mode 100644 index 0000000000..f4f5beac0f --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PlayerData.cs @@ -0,0 +1,62 @@ +// +// 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 PlayerData : IPlayerData + { + public WowGuid DuelArbiter { get; set; } + public WowGuid WowAccount { get; set; } + public WowGuid BnetAccount { get; set; } + public System.Nullable GuildClubMemberID { get; set; } + public WowGuid LootTargetGUID { get; set; } + public System.Nullable PlayerFlags { get; set; } + public System.Nullable PlayerFlagsEx { get; set; } + public System.Nullable GuildRankID { get; set; } + public System.Nullable GuildDeleteDate { get; set; } + public System.Nullable GuildLevel { get; set; } + public System.Nullable[] PartyType { get; } = new System.Nullable[2]; + public System.Nullable NumBankSlots { get; set; } + public System.Nullable NativeSex { get; set; } + public System.Nullable Inebriation { get; set; } + public System.Nullable PvpTitle { get; set; } + public System.Nullable ArenaFaction { get; set; } + public System.Nullable PvpRank { get; set; } + public System.Nullable Field_88 { get; set; } + public System.Nullable DuelTeam { get; set; } + public System.Nullable GuildTimeStamp { get; set; } + public IQuestLog[] QuestLog { get; } = new IQuestLog[25]; + public IVisibleItem[] VisibleItems { get; } = new IVisibleItem[19]; + public System.Nullable PlayerTitle { get; set; } + public System.Nullable FakeInebriation { get; set; } + public System.Nullable VirtualPlayerRealm { get; set; } + public System.Nullable CurrentSpecID { get; set; } + public System.Nullable CurrentCombatTraitConfigSubTreeID { get; set; } + public System.Nullable TaxiMountAnimKitID { get; set; } + public System.Nullable[] AvgItemLevel { get; } = new System.Nullable[6]; + public System.Nullable CurrentBattlePetBreedQuality { get; set; } + public System.Nullable HonorLevel { get; set; } + public System.Nullable LogoutTime { get; set; } + public IZonePlayerForcedReaction[] ForcedReactions { get; } = new IZonePlayerForcedReaction[32]; + public System.Nullable Field_13C { get; set; } + public System.Nullable Field_140 { get; set; } + public System.Nullable CurrentBattlePetSpeciesID { get; set; } + public System.Nullable[] Field_3120 { get; } = new System.Nullable[19]; + public IDeclinedNames DeclinedNames { get; set; } + public ICustomTabardInfo PersonalTabard { get; set; } + public DynamicUpdateField Customizations { get; } = new DynamicUpdateField(); + public DynamicUpdateField ArenaCooldowns { get; } = new DynamicUpdateField(); + public DynamicUpdateField> VisualItemReplacements { get; } = new DynamicUpdateField>(); + public string Name { get; set; } + public ILeaverInfo LeaverInfo { get; set; } + public System.Nullable HasLevelLink { get; set; } + public DynamicUpdateField PetNames { get; } = new DynamicUpdateField(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PlayerDataElement.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PlayerDataElement.cs new file mode 100644 index 0000000000..ec1a49c3f3 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/PlayerDataElement.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 PlayerDataElement : IPlayerDataElement + { + public float FloatValue { get; set; } + public long Int64Value { get; set; } + public uint Type { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/QuestLog.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/QuestLog.cs new file mode 100644 index 0000000000..0614df3146 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/QuestLog.cs @@ -0,0 +1,21 @@ +// +// 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 QuestLog : IQuestLog + { + public System.Nullable EndTime { get; set; } + public System.Nullable QuestID { get; set; } + public System.Nullable StateFlags { get; set; } + public System.Nullable ObjectiveFlags { get; set; } + public System.Nullable[] ObjectiveProgress { get; } = new System.Nullable[24]; + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/Research.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/Research.cs new file mode 100644 index 0000000000..d1f1391787 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/Research.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 Research : IResearch + { + public short ResearchProjectID { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ResearchHistory.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ResearchHistory.cs new file mode 100644 index 0000000000..8d27772536 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ResearchHistory.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 ResearchHistory : IResearchHistory + { + public DynamicUpdateField CompletedProjects { get; } = new DynamicUpdateField(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/RestInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/RestInfo.cs new file mode 100644 index 0000000000..9be3b9d767 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/RestInfo.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 RestInfo : IRestInfo + { + public System.Nullable Threshold { get; set; } + public System.Nullable StateID { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ScaleCurve.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ScaleCurve.cs new file mode 100644 index 0000000000..38e9b14fc7 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ScaleCurve.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 ScaleCurve : IScaleCurve + { + public System.Nullable StartTimeOffset { get; set; } + public Vector2[] Points { get; } = new Vector2[2]; + public System.Nullable ParameterCurve { get; set; } + public System.Nullable OverrideActive { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SceneObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SceneObjectData.cs new file mode 100644 index 0000000000..21a1a01e65 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SceneObjectData.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 SceneObjectData : ISceneObjectData + { + public System.Nullable ScriptPackageID { get; set; } + public System.Nullable RndSeedVal { get; set; } + public WowGuid CreatedBy { get; set; } + public System.Nullable SceneType { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SkillInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SkillInfo.cs new file mode 100644 index 0000000000..6bc91bdeec --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SkillInfo.cs @@ -0,0 +1,23 @@ +// +// 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 SkillInfo : ISkillInfo + { + public System.Nullable[] SkillLineID { get; } = new System.Nullable[256]; + public System.Nullable[] SkillStep { get; } = new System.Nullable[256]; + public System.Nullable[] SkillRank { get; } = new System.Nullable[256]; + public System.Nullable[] SkillStartingRank { get; } = new System.Nullable[256]; + public System.Nullable[] SkillMaxRank { get; } = new System.Nullable[256]; + public System.Nullable[] SkillTempBonus { get; } = new System.Nullable[256]; + public System.Nullable[] SkillPermBonus { get; } = new System.Nullable[256]; + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SocketedGem.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SocketedGem.cs new file mode 100644 index 0000000000..9c26d7ee08 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SocketedGem.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 SocketedGem : ISocketedGem + { + public System.Nullable ItemID { get; set; } + public System.Nullable[] BonusListIDs { get; } = new System.Nullable[16]; + public System.Nullable Context { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SpellFlatModByLabel.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SpellFlatModByLabel.cs new file mode 100644 index 0000000000..caf8945d2d --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SpellFlatModByLabel.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 SpellFlatModByLabel : ISpellFlatModByLabel + { + public int ModIndex { get; set; } + public int ModifierValue { get; set; } + public int LabelID { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SpellPctModByLabel.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SpellPctModByLabel.cs new file mode 100644 index 0000000000..66f7712b90 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/SpellPctModByLabel.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 SpellPctModByLabel : ISpellPctModByLabel + { + public int ModIndex { get; set; } + public float ModifierValue { get; set; } + public int LabelID { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/StableInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/StableInfo.cs new file mode 100644 index 0000000000..62869eebc9 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/StableInfo.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 StableInfo : IStableInfo + { + public WowGuid StableMaster { get; set; } + public DynamicUpdateField Pets { get; } = new DynamicUpdateField(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/StablePetInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/StablePetInfo.cs new file mode 100644 index 0000000000..84389780c1 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/StablePetInfo.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 StablePetInfo : IStablePetInfo + { + public System.Nullable PetSlot { get; set; } + public System.Nullable PetNumber { get; set; } + public System.Nullable CreatureID { get; set; } + public System.Nullable DisplayID { get; set; } + public System.Nullable ExperienceLevel { get; set; } + public System.Nullable PetFlags { get; set; } + public System.Nullable Field_96 { get; set; } + public System.Nullable Specialization { get; set; } + public string Name { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitConfig.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitConfig.cs new file mode 100644 index 0000000000..40253128df --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitConfig.cs @@ -0,0 +1,26 @@ +// +// 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 TraitConfig : ITraitConfig + { + public System.Nullable ID { get; set; } + public System.Nullable Type { get; set; } + public System.Nullable SkillLineID { get; set; } + public System.Nullable ChrSpecializationID { get; set; } + public System.Nullable CombatConfigFlags { get; set; } + public System.Nullable LocalIdentifier { get; set; } + public System.Nullable TraitSystemID { get; set; } + public DynamicUpdateField Entries { get; } = new DynamicUpdateField(); + public string Name { get; set; } + public DynamicUpdateField SubTrees { get; } = new DynamicUpdateField(); + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitEntry.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitEntry.cs new file mode 100644 index 0000000000..c447f4b031 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitEntry.cs @@ -0,0 +1,21 @@ +// +// 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 TraitEntry : ITraitEntry + { + public int TraitNodeID { get; set; } + public int TraitNodeEntryID { get; set; } + public int Rank { get; set; } + public int GrantedRanks { get; set; } + public int BonusRanks { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitSubTreeCache.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitSubTreeCache.cs new file mode 100644 index 0000000000..90883a3c6b --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/TraitSubTreeCache.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 TraitSubTreeCache : ITraitSubTreeCache + { + public int TraitSubTreeID { get; set; } + public ITraitEntry[] Entries { get; set; } + public uint Active { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitAssistActionData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitAssistActionData.cs new file mode 100644 index 0000000000..757361ee3b --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitAssistActionData.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 UnitAssistActionData : IUnitAssistActionData + { + public System.Nullable Type { get; set; } + public string PlayerName { get; set; } + public System.Nullable VirtualRealmAddress { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitChannel.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitChannel.cs new file mode 100644 index 0000000000..930247838b --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitChannel.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 UnitChannel : IUnitChannel + { + public int SpellID { get; set; } + public int SpellXSpellVisualID { get; set; } + public uint StartTimeMs { get; set; } + public uint Duration { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitData.cs new file mode 100644 index 0000000000..f57aae79b6 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/UnitData.cs @@ -0,0 +1,157 @@ +// +// 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 UnitData : IMutableUnitData + { + public System.Nullable Health { get; set; } + public System.Nullable MaxHealth { get; set; } + public System.Nullable DisplayID { get; set; } + public System.Nullable NpcFlags { get; set; } + public System.Nullable NpcFlags2 { get; set; } + public System.Nullable StateSpellVisualID { get; set; } + public System.Nullable StateAnimID { get; set; } + public System.Nullable StateAnimKitID { get; set; } + public System.Nullable StateWorldEffectsQuestObjectiveID { get; set; } = null; + public System.Nullable[] StateWorldEffectIDs { get; set; } + public WowGuid Charm { get; set; } + public WowGuid Summon { get; set; } + public WowGuid Critter { get; set; } + public WowGuid CharmedBy { get; set; } + public WowGuid SummonedBy { get; set; } + public WowGuid CreatedBy { get; set; } + public WowGuid DemonCreator { get; set; } + public WowGuid LookAtControllerTarget { get; set; } + public WowGuid Target { get; set; } + public WowGuid BattlePetCompanionGUID { get; set; } + public System.Nullable BattlePetDBID { get; set; } + public IUnitChannel ChannelData { get; set; } + public System.Nullable SummonedByHomeRealm { get; set; } + public System.Nullable Race { get; set; } + public System.Nullable ClassId { get; set; } + public System.Nullable PlayerClassId { get; set; } + public System.Nullable Sex { get; set; } + public System.Nullable DisplayPower { get; set; } + public System.Nullable OverrideDisplayPowerID { get; set; } + public System.Nullable[] PowerRegenFlatModifier { get; } = new System.Nullable[10]; + public System.Nullable[] PowerRegenInterruptedFlatModifier { get; } = new System.Nullable[10]; + public System.Nullable[] Power { get; } = new System.Nullable[10]; + public System.Nullable[] MaxPower { get; } = new System.Nullable[10]; + public System.Nullable[] ModPowerRegen { get; } = new System.Nullable[10]; + public System.Nullable Level { get; set; } + public System.Nullable EffectiveLevel { get; set; } + public System.Nullable ContentTuningID { get; set; } + public System.Nullable ScalingLevelMin { get; set; } + public System.Nullable ScalingLevelMax { get; set; } + public System.Nullable ScalingLevelDelta { get; set; } + public System.Nullable ScalingFactionGroup { get; set; } + public System.Nullable FactionTemplate { get; set; } + public IVisibleItem[] VirtualItems { get; } = new IVisibleItem[3]; + public System.Nullable Flags { get; set; } + public System.Nullable Flags2 { get; set; } + public System.Nullable Flags3 { get; set; } + public System.Nullable Flags4 { get; set; } + public System.Nullable AuraState { get; set; } + public System.Nullable[] AttackRoundBaseTime { get; } = new System.Nullable[3]; + public System.Nullable RangedAttackRoundBaseTime { get; set; } + public System.Nullable BoundingRadius { get; set; } + public System.Nullable CombatReach { get; set; } + public System.Nullable DisplayScale { get; set; } + public System.Nullable NativeDisplayID { get; set; } + public System.Nullable NativeXDisplayScale { get; set; } + public System.Nullable MountDisplayID { get; set; } + public System.Nullable MinDamage { get; set; } + public System.Nullable MaxDamage { get; set; } + public System.Nullable MinOffHandDamage { get; set; } + public System.Nullable MaxOffHandDamage { get; set; } + public System.Nullable StandState { get; set; } + public System.Nullable PetTalentPoints { get; set; } + public System.Nullable VisFlags { get; set; } + public System.Nullable AnimTier { get; set; } + public System.Nullable PetNumber { get; set; } + public System.Nullable PetNameTimestamp { get; set; } + public System.Nullable PetExperience { get; set; } + public System.Nullable PetNextLevelExperience { get; set; } + public System.Nullable ModCastingSpeed { get; set; } + public System.Nullable ModSpellHaste { get; set; } + public System.Nullable ModHaste { get; set; } + public System.Nullable ModRangedHaste { get; set; } + public System.Nullable ModHasteRegen { get; set; } + public System.Nullable ModTimeRate { get; set; } + public System.Nullable CreatedBySpell { get; set; } + public System.Nullable EmoteState { get; set; } + public System.Nullable TrainingPointsUsed { get; set; } + public System.Nullable TrainingPointsTotal { get; set; } + public System.Nullable[] Stats { get; } = new System.Nullable[5]; + public System.Nullable[] StatPosBuff { get; } = new System.Nullable[5]; + public System.Nullable[] StatNegBuff { get; } = new System.Nullable[5]; + public System.Nullable[] Resistances { get; } = new System.Nullable[7]; + public System.Nullable[] ResistanceBuffModsPositive { get; } = new System.Nullable[7]; + public System.Nullable[] ResistanceBuffModsNegative { get; } = new System.Nullable[7]; + public System.Nullable[] PowerCostModifier { get; } = new System.Nullable[7]; + public System.Nullable[] PowerCostMultiplier { get; } = new System.Nullable[7]; + public System.Nullable BaseMana { get; set; } + public System.Nullable BaseHealth { get; set; } + public System.Nullable SheatheState { get; set; } + public System.Nullable PvpFlags { get; set; } + public System.Nullable PetFlags { get; set; } + public System.Nullable ShapeshiftForm { get; set; } + public System.Nullable AttackPower { get; set; } + public System.Nullable AttackPowerModPos { get; set; } + public System.Nullable AttackPowerModNeg { get; set; } + public System.Nullable AttackPowerMultiplier { get; set; } + public System.Nullable RangedAttackPower { get; set; } + public System.Nullable RangedAttackPowerModPos { get; set; } + public System.Nullable RangedAttackPowerModNeg { get; set; } + public System.Nullable RangedAttackPowerMultiplier { get; set; } + public System.Nullable SetAttackSpeedAura { get; set; } + public System.Nullable Lifesteal { get; set; } + public System.Nullable MinRangedDamage { get; set; } + public System.Nullable MaxRangedDamage { get; set; } + public System.Nullable MaxHealthModifier { get; set; } + public System.Nullable HoverHeight { get; set; } + public System.Nullable MinItemLevelCutoff { get; set; } + public System.Nullable MinItemLevel { get; set; } + public System.Nullable MaxItemLevel { get; set; } + public System.Nullable WildBattlePetLevel { get; set; } + public System.Nullable BattlePetCompanionNameTimestamp { get; set; } + public System.Nullable InteractSpellID { get; set; } + public System.Nullable ScaleDuration { get; set; } + public System.Nullable LooksLikeMountID { get; set; } + public System.Nullable LooksLikeCreatureID { get; set; } + public System.Nullable LookAtControllerID { get; set; } + public System.Nullable PerksVendorItemID { get; set; } + public WowGuid GuildGUID { get; set; } + public WowGuid SkinningOwnerGUID { get; set; } + public System.Nullable FlightCapabilityID { get; set; } + public System.Nullable GlideEventSpeedDivisor { get; set; } + public System.Nullable DriveCapabilityID { get; set; } + public System.Nullable SilencedSchoolMask { get; set; } + public System.Nullable CurrentAreaID { get; set; } + public WowGuid ComboTarget { get; set; } + public System.Nullable Field_2F0 { get; set; } + public System.Nullable Field_2F4 { get; set; } + public System.Nullable Unk553_1 { get; set; } + public System.Nullable Unk553_2 { get; set; } + public System.Nullable Unk553_3 { get; set; } + public System.Nullable Unk553_4 { get; set; } + public IUnitAssistActionData AssistActionData { get; set; } + public DynamicUpdateField PassiveSpells { get; } = new DynamicUpdateField(); + public DynamicUpdateField> WorldEffects { get; } = new DynamicUpdateField>(); + public DynamicUpdateField ChannelObjects { get; } = new DynamicUpdateField(); + + uint?[] IUnitData.NpcFlags => new[] { NpcFlags, NpcFlags2 }; + + // dummies required by interface + public int? CreatureFamily { get; set; } + public int? CreatureType { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VendorData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VendorData.cs new file mode 100644 index 0000000000..e2c7e24028 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VendorData.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 VendorData : IVendorData + { + public System.Nullable Flags { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VisibleItem.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VisibleItem.cs new file mode 100644 index 0000000000..a0fe332abb --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VisibleItem.cs @@ -0,0 +1,21 @@ +// +// 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 VisibleItem : IMutableVisibleItem + { + public System.Nullable ItemID { get; set; } + public System.Nullable SecondaryItemModifiedAppearanceID { get; set; } + public System.Nullable ConditionalItemAppearanceID { get; set; } + public System.Nullable ItemAppearanceModID { get; set; } + public System.Nullable ItemVisual { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VisualAnim.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VisualAnim.cs new file mode 100644 index 0000000000..2fbf880de8 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/VisualAnim.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 VisualAnim : IVisualAnim + { + public System.Nullable AnimationDataID { get; set; } + public System.Nullable AnimKitID { get; set; } + public System.Nullable AnimProgress { get; set; } + public System.Nullable IsDecay { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/WeeklySpellUse.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/WeeklySpellUse.cs new file mode 100644 index 0000000000..1aab5adfca --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/WeeklySpellUse.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 WeeklySpellUse : IWeeklySpellUse + { + public int SpellCategoryID { get; set; } + public byte Uses { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ZonePlayerForcedReaction.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ZonePlayerForcedReaction.cs new file mode 100644 index 0000000000..0f035df412 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V5_5_3_64802/ZonePlayerForcedReaction.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 ZonePlayerForcedReaction : IZonePlayerForcedReaction + { + public System.Nullable FactionID { get; set; } + public System.Nullable Reaction { get; set; } + } +} +