diff --git a/WowPacketParser/Enums/ClientVersionBuild.cs b/WowPacketParser/Enums/ClientVersionBuild.cs index cf58d1e64f..7b87777047 100644 --- a/WowPacketParser/Enums/ClientVersionBuild.cs +++ b/WowPacketParser/Enums/ClientVersionBuild.cs @@ -967,6 +967,13 @@ public enum ClientVersionBuild V2_5_5_67852 = 67852, // live V2_5_5_68101 = 68101, // live + V2_5_6_68502 = 68502, // live + V2_5_6_68575 = 68575, // live + V2_5_6_68749 = 68749, // live + V2_5_6_68775 = 68775, // live + V2_5_6_68941 = 68941, // live + V2_5_6_69110 = 69110, // live and ptr + V3_4_0_44832 = 44832, // ptr / beta V3_4_0_45166 = 45166, // ptr / beta V3_4_0_45189 = 45189, // ptr / beta diff --git a/WowPacketParser/Enums/Version/Opcodes.cs b/WowPacketParser/Enums/Version/Opcodes.cs index c09bb1b961..05498f6260 100644 --- a/WowPacketParser/Enums/Version/Opcodes.cs +++ b/WowPacketParser/Enums/Version/Opcodes.cs @@ -109,6 +109,7 @@ using WowPacketParser.Enums.Version.V12_0_7_67808; using WowPacketParser.Enums.Version.V12_1_0_69214; using WowPacketParser.Misc; +using WowPacketParser.Enums.Version.V2_5_6_68502; namespace WowPacketParser.Enums.Version { @@ -1311,6 +1312,13 @@ public static ClientVersionBuild GetOpcodeDefiningBuild(ClientVersionBuild build case ClientVersionBuild.V2_5_5_67852: case ClientVersionBuild.V2_5_5_68101: return ClientVersionBuild.V2_5_5_64796; + case ClientVersionBuild.V2_5_6_68502: + case ClientVersionBuild.V2_5_6_68575: + case ClientVersionBuild.V2_5_6_68749: + case ClientVersionBuild.V2_5_6_68775: + case ClientVersionBuild.V2_5_6_68941: + case ClientVersionBuild.V2_5_6_69110: + return ClientVersionBuild.V2_5_6_68502; default: return ClientVersionBuild.V3_3_5a_12340; } @@ -1518,6 +1526,8 @@ public static BiDictionary GetOpcodeDictionary(ClientVersionBuild b return Opcodes_2_5_4.Opcodes(direction); case ClientVersionBuild.V2_5_5_64796: return Opcodes_2_5_5.Opcodes(direction); + case ClientVersionBuild.V2_5_6_68502: + return Opcodes_2_5_6.Opcodes(direction); case ClientVersionBuild.V3_4_0_45166: return Opcodes_3_4_0.Opcodes(direction); case ClientVersionBuild.V3_4_1_47014: diff --git a/WowPacketParser/Enums/Version/UpdateFields.cs b/WowPacketParser/Enums/Version/UpdateFields.cs index d600a840f8..7d6375e76f 100644 --- a/WowPacketParser/Enums/Version/UpdateFields.cs +++ b/WowPacketParser/Enums/Version/UpdateFields.cs @@ -1357,6 +1357,15 @@ private static ClientVersionBuild GetUpdateFieldDictionaryBuild(ClientVersionBui { return ClientVersionBuild.V2_5_5_64796; } + case ClientVersionBuild.V2_5_6_68502: + case ClientVersionBuild.V2_5_6_68575: + case ClientVersionBuild.V2_5_6_68749: + case ClientVersionBuild.V2_5_6_68775: + case ClientVersionBuild.V2_5_6_68941: + case ClientVersionBuild.V2_5_6_69110: + { + return ClientVersionBuild.V2_5_6_68502; + } case ClientVersionBuild.V3_4_0_45166: case ClientVersionBuild.V3_4_0_44832: case ClientVersionBuild.V3_4_0_45189: diff --git a/WowPacketParser/Enums/Version/V2_5_6_68502/Opcodes.cs b/WowPacketParser/Enums/Version/V2_5_6_68502/Opcodes.cs new file mode 100644 index 0000000000..a33a42da8a --- /dev/null +++ b/WowPacketParser/Enums/Version/V2_5_6_68502/Opcodes.cs @@ -0,0 +1,69 @@ +using WowPacketParser.Misc; + +namespace WowPacketParser.Enums.Version.V2_5_6_68502 +{ + public static class Opcodes_2_5_6 + { + public static BiDictionary Opcodes(Direction direction) + { + switch (direction) + { + case Direction.ClientToServer: + return ClientOpcodes; + case Direction.ServerToClient: + return ServerOpcodes; + default: + return MiscOpcodes; + } + } + + private static readonly BiDictionary ClientOpcodes = new() + { + { Opcode.CMSG_CAST_SPELL, 0x3E0160 }, + { Opcode.CMSG_CHAT_MESSAGE_SAY, 0x2F0023 }, + { Opcode.CMSG_CHAT_MESSAGE_EMOTE, 0x2F0024 }, + { Opcode.CMSG_AREA_TRIGGER, 0x3E0088 }, + { Opcode.CMSG_SEND_TEXT_EMOTE, 0x3F0014 }, + { Opcode.CMSG_USE_ITEM, 0x3E015C }, + }; + + private static readonly BiDictionary ServerOpcodes = new() + { + { Opcode.SMSG_QUERY_QUEST_INFO_RESPONSE, 0x640016 }, + { Opcode.SMSG_QUERY_CREATURE_RESPONSE, 0x4A0006 }, + { Opcode.SMSG_QUERY_GAME_OBJECT_RESPONSE, 0x4A0007 }, + + { Opcode.SMSG_GOSSIP_COMPLETE, 0x640017 }, + { Opcode.SMSG_GOSSIP_MESSAGE, 0x640018 }, + { Opcode.SMSG_GOSSIP_QUEST_UPDATE, 0x640019 }, + { Opcode.SMSG_GOSSIP_REFRESH_OPTIONS, 0x640027 }, + { Opcode.SMSG_GOSSIP_OPTION_NPC_INTERACTION, 0x640028 }, + + { Opcode.SMSG_SET_TIME_ZONE_INFORMATION, 0x460124 }, + { Opcode.SMSG_HIGHEST_THREAT_UPDATE, 0x460187 }, + { Opcode.SMSG_THREAT_CLEAR, 0x46018A }, + { Opcode.SMSG_THREAT_REMOVE, 0x460189 }, + { Opcode.SMSG_THREAT_UPDATE, 0x460188 }, + { Opcode.SMSG_ATTACKER_STATE_UPDATE, 0x4C0030 }, + { Opcode.SMSG_ATTACK_START, 0x4C001B }, + { Opcode.SMSG_ATTACK_STOP, 0x4C001C }, + { Opcode.SMSG_AI_REACTION, 0x460163 }, + { Opcode.SMSG_TEXT_EMOTE, 0x460127 }, + { Opcode.SMSG_EMOTE, 0x46027D }, + { Opcode.SMSG_CHAT, 0x4B0001 }, + { Opcode.SMSG_ON_MONSTER_MOVE, 0x5E0002 }, + { Opcode.SMSG_UPDATE_OBJECT, 0x5C0000 }, + { Opcode.SMSG_AURA_UPDATE, 0x660011 }, + { Opcode.SMSG_CAST_FAILED, 0x660048 }, + { Opcode.SMSG_SPELL_GO, 0x66002A }, + { Opcode.SMSG_SPELL_START, 0x66002B }, + { Opcode.SMSG_SPELL_COOLDOWN, 0x660005 }, + { Opcode.SMSG_SPELL_CATEGORY_COOLDOWN, 0x660006 }, + { Opcode.SMSG_PET_SPELLS_MESSAGE, 0x660014 }, + { Opcode.SMSG_SPELL_NON_MELEE_DAMAGE_LOG, 0x660021 }, + { Opcode.SMSG_SPELL_INSTAKILL_LOG, 0x660022 }, + }; + + private static readonly BiDictionary MiscOpcodes = new(); + } +} diff --git a/WowPacketParser/Misc/ClientVersion.cs b/WowPacketParser/Misc/ClientVersion.cs index 34d5b47f28..5dcdc8d76f 100644 --- a/WowPacketParser/Misc/ClientVersion.cs +++ b/WowPacketParser/Misc/ClientVersion.cs @@ -1799,6 +1799,12 @@ public static ClientVersionBuild GetVersionDefiningBuild(ClientVersionBuild buil case ClientVersionBuild.V2_5_5_67511: case ClientVersionBuild.V2_5_5_67852: case ClientVersionBuild.V2_5_5_68101: + case ClientVersionBuild.V2_5_6_68502: + case ClientVersionBuild.V2_5_6_68575: + case ClientVersionBuild.V2_5_6_68749: + case ClientVersionBuild.V2_5_6_68775: + case ClientVersionBuild.V2_5_6_68941: + case ClientVersionBuild.V2_5_6_69110: return ClientVersionBuild.V5_5_0_61735; case ClientVersionBuild.BattleNetV37165: return ClientVersionBuild.BattleNetV37165; @@ -2312,6 +2318,12 @@ public static bool IsBurningCrusadeClassicClientVersionBuild(ClientVersionBuild case ClientVersionBuild.V2_5_5_67511: case ClientVersionBuild.V2_5_5_67852: case ClientVersionBuild.V2_5_5_68101: + case ClientVersionBuild.V2_5_6_68502: + case ClientVersionBuild.V2_5_6_68575: + case ClientVersionBuild.V2_5_6_68749: + case ClientVersionBuild.V2_5_6_68775: + case ClientVersionBuild.V2_5_6_68941: + case ClientVersionBuild.V2_5_6_69110: return true; default: return false; diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/CombatLogHandler.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/CombatLogHandler.cs index e26378a1fb..8dce218b1a 100644 --- a/WowPacketParserModule.V5_5_0_61735/Parsers/CombatLogHandler.cs +++ b/WowPacketParserModule.V5_5_0_61735/Parsers/CombatLogHandler.cs @@ -1,4 +1,5 @@ -using WowPacketParser.Enums; +using System; +using WowPacketParser.Enums; using WowPacketParser.Misc; using WowPacketParser.Parsing; @@ -394,6 +395,9 @@ public static void HandleSpellNonMeleeDmgLog255(Packet packet) packet.ReadInt32("SpellID"); packet.ReadInt32("SpellXSpellVisual"); + if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502)) + packet.ReadInt32("ScriptVisualID"); + packet.ReadInt32("Damage"); packet.ReadInt32("OriginalDamage"); packet.ReadInt32("OverKill"); diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/MovementHandler.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/MovementHandler.cs index ba50f24b93..d04d719f64 100644 --- a/WowPacketParserModule.V5_5_0_61735/Parsers/MovementHandler.cs +++ b/WowPacketParserModule.V5_5_0_61735/Parsers/MovementHandler.cs @@ -1,4 +1,5 @@ using Google.Protobuf.WellKnownTypes; +using System; using System.Linq; using WowPacketParser.DBC; using WowPacketParser.Enums; @@ -421,6 +422,8 @@ public static MovementInfo ReadMovementStats(Packet packet, params object[] idx) var int152 = packet.ReadInt32("RemoveForcesCount", idx); packet.ReadInt32("MoveIndex", idx); + if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502)) + packet.ReadSingle("GravityModifier", idx); for (var i = 0; i < int152; i++) packet.ReadPackedGuid128("RemoveForcesIDs", idx, i); diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler1158.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler1158.cs index 55f875f390..f51c0b9f1d 100644 --- a/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler1158.cs +++ b/WowPacketParserModule.V5_5_0_61735/Parsers/SpellHandler1158.cs @@ -266,7 +266,7 @@ public static void ReadSpellTargetData(Packet packet, PacketSpellData packetSpel var hasSrcLoc = packet.ReadBit("HasSrcLocation", idx); var hasDstLoc = packet.ReadBit("HasDstLocation", idx); var hasOrient = packet.ReadBit("HasOrientation", idx); - var hasMapID = packet.ReadBit("hasMapID ", idx); + var hasMapID = packet.ReadBit("HasMapID", idx); var nameLength = packet.ReadBits(7); if (hasSrcLoc) @@ -443,11 +443,14 @@ public static uint ReadSpellCastRequest(Packet packet, params object[] idx) if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796)) packet.ReadByte("SendCastFlags", idx); - for (var i = 0; i < 2; i++) + uint miscCount = ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502) ? 3u : 2u; + for (var i = 0; i < miscCount; i++) packet.ReadInt32("Misc", idx, i); var spellId = packet.ReadUInt32("SpellID", idx); packet.ReadInt32("SpellXSpellVisual", idx); + //if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502)) + // packet.ReadInt32("ScriptVisualID", idx); ReadMissileTrajectoryRequest(packet, idx, "MissileTrajectory"); @@ -455,6 +458,7 @@ public static uint ReadSpellCastRequest(Packet packet, params object[] idx) var optionalCurrenciesCount = packet.ReadUInt32("OptionalCurrenciesCount", idx); var optionalReagentsCount = packet.ReadUInt32("OptionalReagentsCount", idx); + var removedModificationsCount = packet.ReadUInt32("RemovedModificationsCount", idx); packet.ReadByte("CraftingFlags", idx); @@ -462,20 +466,26 @@ public static uint ReadSpellCastRequest(Packet packet, params object[] idx) for (var j = 0; j < optionalCurrenciesCount; ++j) ReadOptionalCurrency(packet, idx, "OptionalCurrency", j); - if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796)) + if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796) && ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502)) ReadSpellTargetData(packet, null, spellId, idx, "Target"); packet.ResetBitReader(); if (ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796)) packet.ReadBits("SendCastFlags", 6, idx); + var hasReceiveTime = false; + if (ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502)) + packet.ReadBit("HasReceiveTime", idx); var hasMoveUpdate = packet.ReadBit("HasMoveUpdate", idx); var weightCount = packet.ReadBits("WeightCount", 2, idx); var hasCraftingOrderID = packet.ReadBit("HasCrafingOrderID", idx); - if (ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796)) + if (ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796) || ClientVersion.AddedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_6_68502)) ReadSpellTargetData(packet, null, spellId, idx, "Target"); + if (hasReceiveTime) + packet.ReadUInt32("ReceiveTime", idx); + if (hasCraftingOrderID && ClientVersion.RemovedInVersion(ClientBranch.TBC, ClientVersionBuild.V2_5_5_64796)) packet.ReadUInt64("CraftingOrderID", idx); diff --git a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateFieldsHandler256.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateFieldsHandler256.cs new file mode 100644 index 0000000000..d0e94c5537 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateFieldsHandler256.cs @@ -0,0 +1,5231 @@ +// +// 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.V2_5_6_68502 +{ + [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); + data.ItemModifiedAppearanceID = packet.ReadUInt32("ItemModifiedAppearanceID", indexes); + data.TransmogSlotOption = packet.ReadByte("TransmogSlotOption", indexes); + data.SheatheCategory = packet.ReadByte("SheatheCategory", indexes); + packet.ResetBitReader(); + data.HasTransmog = packet.ReadBit("HasTransmog", indexes); + data.HasIllusion = packet.ReadBit("HasIllusion", 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(11); + var changesMask = new BitArray(rawChangesMask); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.HasTransmog = packet.ReadBit("HasTransmog", indexes); + } + if (changesMask[2]) + { + data.HasIllusion = packet.ReadBit("HasIllusion", indexes); + } + } + packet.ResetBitReader(); + if (changesMask[0]) + { + if (changesMask[3]) + { + data.ItemID = packet.ReadInt32("ItemID", indexes); + } + if (changesMask[4]) + { + data.SecondaryItemModifiedAppearanceID = packet.ReadInt32("SecondaryItemModifiedAppearanceID", indexes); + } + if (changesMask[5]) + { + data.ConditionalItemAppearanceID = packet.ReadInt32("ConditionalItemAppearanceID", indexes); + } + if (changesMask[6]) + { + data.ItemAppearanceModID = packet.ReadUInt16("ItemAppearanceModID", indexes); + } + if (changesMask[7]) + { + data.ItemVisual = packet.ReadUInt16("ItemVisual", indexes); + } + if (changesMask[8]) + { + data.ItemModifiedAppearanceID = packet.ReadUInt32("ItemModifiedAppearanceID", indexes); + } + if (changesMask[9]) + { + data.TransmogSlotOption = packet.ReadByte("TransmogSlotOption", indexes); + } + if (changesMask[10]) + { + data.SheatheCategory = packet.ReadByte("SheatheCategory", 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 override IUnitData ReadCreateUnitData(Packet packet, UpdateFieldFlag flags, params object[] indexes) + { + var data = new UnitData(); + packet.ResetBitReader(); + 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); + data.Flags = (uint)packet.ReadUInt32E("Flags", indexes); + data.Flags2 = (uint)packet.ReadUInt32E("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.TaxiNodesID = packet.ReadInt32("TaxiNodesID", 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); + data.NameplateAttach = packet.ReadPackedGuid128("NameplateAttach", 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); + } + for (var i = 0; i < 3; ++i) + { + data.VirtualItems[i] = ReadCreateVisibleItem(packet, indexes, "VirtualItems", i); + } + packet.ResetBitReader(); + bool hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes); + if (hasAssistActionData) + { + data.AssistActionData = ReadCreateUnitAssistActionData(packet, indexes, "AssistActionData"); + } + 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 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); + } + } // 1F + 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 = (uint)packet.ReadUInt32E("Flags", indexes); + } + if (changesMask[42]) + { + data.Flags2 = (uint)packet.ReadUInt32E("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); + } + } // 1F + 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); + } + } // 1F + 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.TaxiNodesID = packet.ReadInt32("TaxiNodesID", 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); + } + if (changesMask[118]) + { + data.NameplateAttach = packet.ReadPackedGuid128("NameplateAttach", indexes); + } + packet.ResetBitReader(); + hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes); + if (changesMask[119]) + { + if (hasAssistActionData) + { + data.AssistActionData = ReadUpdateUnitAssistActionData(packet, indexes, "AssistActionData"); + } + } + } // 17 + if (changesMask[120]) + { + for (var i = 0; i < 10; ++i) + { + if (changesMask[121 + i]) + { + data.PowerRegenFlatModifier[i] = packet.ReadSingle("PowerRegenFlatModifier", indexes, i); + } + if (changesMask[131 + i]) + { + data.PowerRegenInterruptedFlatModifier[i] = packet.ReadSingle("PowerRegenInterruptedFlatModifier", indexes, i); + } + if (changesMask[141 + i]) + { + data.Power[i] = packet.ReadInt32("Power", indexes, i); + } + if (changesMask[151 + i]) + { + data.MaxPower[i] = packet.ReadInt32("MaxPower", indexes, i); + } + if (changesMask[161 + i]) + { + data.ModPowerRegen[i] = packet.ReadSingle("ModPowerRegen", indexes, i); + } + } + } + if (changesMask[175]) + { + for (var i = 0; i < 3; ++i) + { + if (changesMask[176 + i]) + { + data.AttackRoundBaseTime[i] = packet.ReadUInt32("AttackRoundBaseTime", indexes, i); + } + } + } + if (changesMask[179]) + { + for (var i = 0; i < 5; ++i) + { + if (changesMask[180 + i]) + { + data.Stats[i] = packet.ReadInt32("Stats", indexes, i); + } + if (changesMask[185 + i]) + { + data.StatPosBuff[i] = packet.ReadInt32("StatPosBuff", indexes, i); + } + if (changesMask[190 + i]) + { + data.StatNegBuff[i] = packet.ReadInt32("StatNegBuff", indexes, i); + } + } + } + if (changesMask[195]) + { + for (var i = 0; i < 7; ++i) + { + if (changesMask[196 + i]) + { + data.Resistances[i] = packet.ReadInt32("Resistances", indexes, i); + } + if (changesMask[203 + i]) + { + data.ResistanceBuffModsPositive[i] = packet.ReadInt32("ResistanceBuffModsPositive", indexes, i); + } + if (changesMask[210 + i]) + { + data.ResistanceBuffModsNegative[i] = packet.ReadInt32("ResistanceBuffModsNegative", indexes, i); + } + if (changesMask[217 + i]) + { + data.PowerCostModifier[i] = packet.ReadInt32("PowerCostModifier", indexes, i); + } + if (changesMask[224 + i]) + { + data.PowerCostMultiplier[i] = packet.ReadSingle("PowerCostMultiplier", indexes, i); + } + } + } + if (changesMask[171]) + { + for (var i = 0; i < 3; ++i) + { + if (changesMask[172 + i]) + { + data.VirtualItems[i] = ReadUpdateVisibleItem(packet, indexes, "VirtualItems", i); + } + } + } + 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 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.ReadUInt16("ObjectiveProgress", indexes, i); + } + data.EndTime = packet.ReadInt64("EndTime", 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.ReadUInt16("StateFlags", indexes); + } + } + if (changesMask[4]) + { + for (var i = 0; i < 24; ++i) + { + if (changesMask[5 + i]) + { + data.ObjectiveProgress[i] = packet.ReadUInt16("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 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.TaxiMountAnimKitID = packet.ReadInt32("TaxiMountAnimKitID", indexes); + packet.ReadInt32("Unk", 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); + 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 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 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 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.VisualItemReplacements.ReadUpdateMask(packet); + } + if (changesMask[5]) + { + data.PetNames.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[4]) + { + for (var i = 0; i < data.VisualItemReplacements.Count; ++i) + { + if (data.VisualItemReplacements.UpdateMask[i]) + { + data.VisualItemReplacements[i] = packet.ReadInt32("VisualItemReplacements", indexes, i); + } + } + } + if (changesMask[5]) + { + 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.TaxiMountAnimKitID = packet.ReadInt32("TaxiMountAnimKitID", indexes); + } + if (changesMask[30]) + { + packet.ReadInt32("Unk", 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[39]) + { + data.PersonalTabard = ReadUpdateCustomTabardInfo(packet, indexes, "PersonalTabard"); + } + if (changesMask[35]) + { + data.Name = new string('*', (int)packet.ReadBits(6)); + } + packet.ResetBitReader(); + hasDeclinedNames = packet.ReadBit("HasDeclinedNames", indexes); + if (changesMask[40]) + { + Substructures.MythicPlusHandler.ReadDungeonScoreSummary(packet, indexes, "DungeonScore"); + } + if (changesMask[35]) + { + data.Name = packet.ReadWoWString("Name", data.Name.Length, indexes); + } + if (changesMask[41]) + { + data.LeaverInfo = ReadUpdateLeaverInfo(packet, indexes, "LeaverInfo"); + } + if (changesMask[42]) + { + 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[91]) + { + for (var i = 0; i < 6; ++i) + { + if (changesMask[92 + i]) + { + data.AvgItemLevel[i] = packet.ReadSingle("AvgItemLevel", indexes, i); + } + } + } + if (changesMask[98]) + { + for (var i = 0; i < 32; ++i) + { + if (changesMask[99 + i]) + { + data.ForcedReactions[i] = ReadUpdateZonePlayerForcedReaction(packet, indexes, "ForcedReactions", i); + } + } + } + if (changesMask[131]) + { + for (var i = 0; i < 19; ++i) + { + if (changesMask[132 + 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.ReadBits("Type", 1, 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); + 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); + 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 < 6; ++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.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 < 9; ++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"); + var mapSizeTraitConfigs = packet.ReadUInt32(); + for (var m = 0u; m < mapSizeTraitConfigs; ++m) + { + var key = packet.ReadInt32("Key", indexes, m); + data.TraitConfigs[key] = ReadCreateTraitConfig(packet, indexes, "Value", m); + } + for (var i = 0; i < data.CharacterRestrictions.Count; ++i) + { + data.CharacterRestrictions[i] = ReadCreateCharacterRestriction(packet, indexes, "CharacterRestrictions", 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 override IGameObjectData ReadCreateGameObjectData(Packet packet, UpdateFieldFlag flags, params object[] indexes) + { + var data = new GameObjectData(); + packet.ResetBitReader(); + 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.Flags2 = packet.ReadUInt32("Flags2", 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); + } + bool hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes); + packet.ResetBitReader(); + if (hasAssistActionData) + { + data.AssistActionData = ReadCreateGameObjectAssistActionData(packet, indexes, "AssistActionData"); + } + 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); + data.MonsterName = packet.ReadDynamicString("MonsterName", data.MonsterName.Length, indexes); + 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 ReadUpdateGameObjectData(Packet packet, params object[] indexes) + { + var data = new GameObjectData(); + packet.ResetBitReader(); + var rawChangesMask = new int[1]; + rawChangesMask[0] = (int)packet.ReadBits(22); + var changesMask = new BitArray(rawChangesMask); + + 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.Flags = packet.ReadUInt32("Flags2", indexes); + } + if (changesMask[13]) + { + data.ParentRotation = packet.ReadQuaternion("ParentRotation", indexes); + } + if (changesMask[14]) + { + data.FactionTemplate = packet.ReadInt32("FactionTemplate", indexes); + } + if (changesMask[15]) + { + data.Level = packet.ReadInt32("Level", indexes); + } + if (changesMask[16]) + { + data.State = packet.ReadSByte("State", indexes); + } + if (changesMask[17]) + { + data.TypeID = packet.ReadSByte("TypeID", indexes); + } + if (changesMask[18]) + { + data.PercentHealth = packet.ReadByte("PercentHealth", indexes); + } + if (changesMask[19]) + { + data.ArtKit = packet.ReadUInt32("ArtKit", indexes); + } + if (changesMask[20]) + { + data.CustomParam = packet.ReadUInt32("CustomParam", indexes); + } + bool hasAssistActionData = packet.ReadBit("HasAssistActionData", indexes); + packet.ResetBitReader(); + if (changesMask[21]) + { + 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 override IAreaTriggerData ReadCreateAreaTriggerData(Packet packet, UpdateFieldFlag flags, params object[] indexes) + { + var data = new AreaTriggerData(); + packet.ResetBitReader(); + 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.ExtraScaleCurve = ReadCreateScaleCurve(packet, indexes, "ExtraScaleCurve"); + data.OverrideMoveCurveX = ReadCreateScaleCurve(packet, indexes, "OverrideMoveCurveX"); + data.OverrideMoveCurveY = ReadCreateScaleCurve(packet, indexes, "OverrideMoveCurveY"); + data.OverrideMoveCurveZ = ReadCreateScaleCurve(packet, indexes, "OverrideMoveCurveZ"); + data.VisualAnim = ReadCreateVisualAnim(packet, indexes, "VisualAnim"); + 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/UpdateHandler255.cs b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler255.cs index 5322f5102d..0abb24fe1a 100644 --- a/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler255.cs +++ b/WowPacketParserModule.V5_5_0_61735/Parsers/UpdateHandler255.cs @@ -549,6 +549,9 @@ private static MovementInfo ReadMovementUpdateBlock(Packet packet, CreateObject var removeForcesIDsCount = packet.ReadInt32(); movementUpdate.MoveIndex = packet.ReadInt32("MoveIndex", index); + if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_5_6_68502)) + packet.ReadSingle("GravityModifier", index); + for (var i = 0; i < removeForcesIDsCount; i++) packet.ReadPackedGuid128("RemoveForcesIDs", index, i); diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ActivePlayerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ActivePlayerData.cs new file mode 100644 index 0000000000..682149ae3b --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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[9]; + public System.Nullable[] Glyphs { get; } = new System.Nullable[9]; + 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/V2_5_6_68502/AreaTriggerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/AreaTriggerData.cs new file mode 100644 index 0000000000..5ad05b28c3 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/AreaTriggerData.cs @@ -0,0 +1,35 @@ +// +// DO NOT EDIT +// + +using System.CodeDom.Compiler; +using WowPacketParser.Misc; +using WowPacketParser.Store.Objects.UpdateFields; + +namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V2_5_6_68502 +{ + [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 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; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ArenaCooldown.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ArenaCooldown.cs new file mode 100644 index 0000000000..d2bb6eb1ac --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ArtifactPower.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ArtifactPower.cs new file mode 100644 index 0000000000..01481f0fa0 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/BankTabSettings.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/BankTabSettings.cs new file mode 100644 index 0000000000..5bfc3676c2 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/BitVector.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/BitVector.cs new file mode 100644 index 0000000000..42434b9ea1 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/BitVectors.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/BitVectors.cs new file mode 100644 index 0000000000..1f0102cfd8 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/CategoryCooldownMod.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/CategoryCooldownMod.cs new file mode 100644 index 0000000000..fdedba0976 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/CharacterRestriction.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/CharacterRestriction.cs new file mode 100644 index 0000000000..a2fcc8bddf --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ChrCustomizationChoice.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ChrCustomizationChoice.cs new file mode 100644 index 0000000000..c3122249da --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/CompletedProject.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/CompletedProject.cs new file mode 100644 index 0000000000..5e2946ffc7 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ContainerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ContainerData.cs new file mode 100644 index 0000000000..316937eb95 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ConversationActor.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ConversationActor.cs new file mode 100644 index 0000000000..58e858728d --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ConversationData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ConversationData.cs new file mode 100644 index 0000000000..1097835da4 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ConversationLine.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ConversationLine.cs new file mode 100644 index 0000000000..e104350e81 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/CorpseData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/CorpseData.cs new file mode 100644 index 0000000000..8499ec4841 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/CustomTabardInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/CustomTabardInfo.cs new file mode 100644 index 0000000000..40aad12692 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/DeclinedNames.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/DeclinedNames.cs new file mode 100644 index 0000000000..f6335e30dc --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/DynamicObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/DynamicObjectData.cs new file mode 100644 index 0000000000..4bc9ceeca9 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/GameObjectAssistActionData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/GameObjectAssistActionData.cs new file mode 100644 index 0000000000..0673690610 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/GameObjectAssistActionData.cs @@ -0,0 +1,16 @@ +using System.CodeDom.Compiler; +using WowPacketParser.Store.Objects.UpdateFields; + +namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V2_5_6_68502 +{ + [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/V2_5_6_68502/GameObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/GameObjectData.cs new file mode 100644 index 0000000000..1eaed4bcc4 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/GameObjectData.cs @@ -0,0 +1,38 @@ +// +// DO NOT EDIT +// + +using System.CodeDom.Compiler; +using WowPacketParser.Misc; +using WowPacketParser.Store.Objects.UpdateFields; + +namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V2_5_6_68502 +{ + [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 System.Nullable Flags2 { 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 DynamicUpdateField> EnableDoodadSets { get; } = new DynamicUpdateField>(); + public DynamicUpdateField> WorldEffects { get; } = new DynamicUpdateField>(); + public IGameObjectAssistActionData AssistActionData { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ItemData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ItemData.cs new file mode 100644 index 0000000000..667771a4bf --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ItemEnchantment.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ItemEnchantment.cs new file mode 100644 index 0000000000..97e0b0acf5 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ItemMod.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ItemMod.cs new file mode 100644 index 0000000000..5b26baab1e --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ItemModList.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ItemModList.cs new file mode 100644 index 0000000000..81ac68de42 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/LeaverInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/LeaverInfo.cs new file mode 100644 index 0000000000..e23bb89178 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ObjectData.cs new file mode 100644 index 0000000000..925c8f7a18 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/PVPInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/PVPInfo.cs new file mode 100644 index 0000000000..035131fc53 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/PassiveSpellHistory.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/PassiveSpellHistory.cs new file mode 100644 index 0000000000..670d68dffa --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/PetCreatureName.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/PetCreatureName.cs new file mode 100644 index 0000000000..3aedd1714c --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/PlayerData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/PlayerData.cs new file mode 100644 index 0000000000..2ad36fd8a6 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/PlayerData.cs @@ -0,0 +1,61 @@ +// +// DO NOT EDIT +// + +using System.CodeDom.Compiler; +using WowPacketParser.Misc; +using WowPacketParser.Store.Objects.UpdateFields; + +namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V2_5_6_68502 +{ + [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 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/V2_5_6_68502/PlayerDataElement.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/PlayerDataElement.cs new file mode 100644 index 0000000000..d305580acc --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/QuestLog.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/QuestLog.cs new file mode 100644 index 0000000000..225b71ca1a --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/QuestLog.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.V2_5_6_68502 +{ + [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[] ObjectiveProgress { get; } = new System.Nullable[24]; + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/Research.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/Research.cs new file mode 100644 index 0000000000..bc512e843b --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ResearchHistory.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ResearchHistory.cs new file mode 100644 index 0000000000..83d9e31c57 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/RestInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/RestInfo.cs new file mode 100644 index 0000000000..3b04f856d4 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ScaleCurve.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ScaleCurve.cs new file mode 100644 index 0000000000..441242eaa3 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/SceneObjectData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/SceneObjectData.cs new file mode 100644 index 0000000000..6b5b560efe --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/SkillInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/SkillInfo.cs new file mode 100644 index 0000000000..4724912543 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/SocketedGem.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/SocketedGem.cs new file mode 100644 index 0000000000..55675fff40 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/SpellFlatModByLabel.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/SpellFlatModByLabel.cs new file mode 100644 index 0000000000..f4160afb64 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/SpellPctModByLabel.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/SpellPctModByLabel.cs new file mode 100644 index 0000000000..579a18728a --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/StableInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/StableInfo.cs new file mode 100644 index 0000000000..3e81052590 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/StablePetInfo.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/StablePetInfo.cs new file mode 100644 index 0000000000..ea078fdd52 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/TraitConfig.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/TraitConfig.cs new file mode 100644 index 0000000000..4274b992c7 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/TraitEntry.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/TraitEntry.cs new file mode 100644 index 0000000000..9512d0dfb7 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/TraitEntry.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.V2_5_6_68502 +{ + [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; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/TraitSubTreeCache.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/TraitSubTreeCache.cs new file mode 100644 index 0000000000..5186ec11a7 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/UnitAssistActionData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/UnitAssistActionData.cs new file mode 100644 index 0000000000..fda88c5836 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/UnitChannel.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/UnitChannel.cs new file mode 100644 index 0000000000..221ac33aa2 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/UnitData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/UnitData.cs new file mode 100644 index 0000000000..95218e2352 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/UnitData.cs @@ -0,0 +1,155 @@ +// +// DO NOT EDIT +// + +using System.CodeDom.Compiler; +using WowPacketParser.Misc; +using WowPacketParser.Store.Objects.UpdateFields; + +namespace WowPacketParserModule.V5_5_0_61735.UpdateFields.V2_5_6_68502 +{ + [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 TaxiNodesID { 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 WowGuid NameplateAttach { get; set; } + public System.Nullable Field_2F0 { get; set; } + public System.Nullable Field_2F4 { 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(); + public System.Nullable Field_314 { get; set; } + + 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/V2_5_6_68502/VendorData.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/VendorData.cs new file mode 100644 index 0000000000..ad025f1973 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/VisibleItem.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/VisibleItem.cs new file mode 100644 index 0000000000..32b80e8df9 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/VisibleItem.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.V2_5_6_68502 +{ + [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; } + public System.Nullable ItemModifiedAppearanceID { get; set; } + public System.Nullable TransmogSlotOption { get; set; } + public System.Nullable SheatheCategory { get; set; } + public System.Nullable HasTransmog { get; set; } + public System.Nullable HasIllusion { get; set; } + } +} + diff --git a/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/VisualAnim.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/VisualAnim.cs new file mode 100644 index 0000000000..6f6a3dd1ba --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/WeeklySpellUse.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/WeeklySpellUse.cs new file mode 100644 index 0000000000..173c80542f --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [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/V2_5_6_68502/ZonePlayerForcedReaction.cs b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/ZonePlayerForcedReaction.cs new file mode 100644 index 0000000000..605e6e6859 --- /dev/null +++ b/WowPacketParserModule.V5_5_0_61735/UpdateFields/V2_5_6_68502/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.V2_5_6_68502 +{ + [GeneratedCode("UpdateFieldCodeGenerator.Formats.WowPacketParserHandler", "1.0.0.0")] + public class ZonePlayerForcedReaction : IZonePlayerForcedReaction + { + public System.Nullable FactionID { get; set; } + public System.Nullable Reaction { get; set; } + } +} +