public static void HandleAddCalendarEvent(Packet packet) { packet.ReadCString("Title"); packet.ReadCString("Description"); packet.ReadEnum<CalendarEventType>("Event Type", TypeCode.Byte); packet.ReadEnum<CalendarRepeatType>("Repeat Type", TypeCode.Byte); packet.ReadInt32("Max Invites"); packet.ReadEntryWithName<Int32>(StoreNameType.LFGDungeon, "Dungeon ID"); packet.ReadPackedTime("Event Time"); packet.ReadPackedTime("Unk PackedTime"); var flags = packet.ReadEnum<CalendarFlag>("Event Flags", TypeCode.Int32); if ((flags & CalendarFlag.GuildAnnouncement) != 0) return; var count = packet.ReadInt32("Invite Count"); for (var i = 0; i < count; i++) { packet.ReadPackedGuid("Creator GUID"); packet.ReadEnum<CalendarEventStatus>("Status", TypeCode.Byte); packet.ReadEnum<CalendarModerationRank>("Moderation Rank", TypeCode.Byte); } }
public static void HandleGuildFinderBrowse(Packet packet) { packet.ReadEnum<GuildFinderOptionsRoles>("Class Roles", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsAvailability>("Availability", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsInterest>("Guild Interests", TypeCode.UInt32); packet.ReadUInt32("Player Level"); }
public static void HandleCalendarCommandResult(Packet packet) { packet.ReadInt32("UnkInt1"); packet.ReadCString("UnkString1"); packet.ReadCString("Param 1"); // if %s is used in the error message packet.ReadEnum<CalendarError>("Error", TypeCode.Int32); }
public static void HandleAuthResponse434(Packet packet) { var isQueued = packet.ReadBit(); var hasAccountInfo = packet.ReadBit(); if (isQueued) { var unkByte = packet.ReadByte(); packet.WriteLine("Unk Byte: " + unkByte); var position = packet.ReadInt32(); packet.WriteLine("Queue Position: " + position); } if (hasAccountInfo) { packet.ReadInt32("Billing Time Remaining"); packet.ReadEnum<ClientType>("Account Expansion", TypeCode.Byte); packet.ReadInt32("Unknown UInt32"); packet.ReadEnum<ClientType>("Player Expansion", TypeCode.Byte); packet.ReadInt32("Billing Time Rested"); packet.ReadEnum<BillingFlag>("Billing Flags", TypeCode.Byte); } var code = (ResponseCode)packet.ReadByte(); packet.WriteLine("Auth Code: " + code); }
public static void HandleContactList(Packet packet) { packet.ReadEnum<ContactListFlag>("List Flags", TypeCode.Int32); var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) { packet.ReadGuid("GUID"); packet.ReadInt32("Unk int1"); packet.ReadInt32("Unk int2"); var flag = packet.ReadEnum<ContactEntryFlag>("Flags", TypeCode.Int32); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadEnum<ContactStatus>("Status", TypeCode.Byte); if (status == 0) // required any flag continue; packet.ReadEntry<Int32>(StoreNameType.Area, "Area"); packet.ReadInt32("Level"); packet.ReadEnum<Class>("Class", TypeCode.Int32); } // still needed? if (packet.CanRead()) CoreParsers.WardenHandler.ReadCheatCheckDecryptionBlock(ref packet); }
public static void HandleContactList(Packet packet) { packet.ReadEnum<ContactListFlag>("List Flags", TypeCode.Int32); var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) { packet.ReadGuid("GUID"); packet.ReadInt32("Realm Id"); packet.ReadInt32("Realm Id"); var flag = packet.ReadEnum<ContactEntryFlag>("Flags", TypeCode.Int32); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadEnum<ContactStatus>("Status", TypeCode.Byte); if (status == 0) // required any flag continue; packet.ReadEntry<Int32>(StoreNameType.Area, "Area"); packet.ReadInt32("Level"); packet.ReadEnum<Class>("Class", TypeCode.Int32); } }
public static void HandleLFGuildAddRecruit(Packet packet) { var guid = new byte[8]; packet.ReadEnum<GuildFinderOptionsRoles>("Class Roles", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsInterest>("Guild Interests", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsAvailability>("Availability", TypeCode.UInt32); guid[3] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[1] = packet.ReadBit(); var comment = packet.ReadBits(11); guid[5] = packet.ReadBit(); guid[4] = packet.ReadBit(); guid[7] = packet.ReadBit(); var player = packet.ReadBits(7); guid[2] = packet.ReadBit(); packet.ReadXORByte(guid, 4); packet.ReadXORByte(guid, 5); packet.ReadWoWString("Comment", comment); packet.ReadWoWString("Player name", player); packet.ReadXORByte(guid, 7); packet.ReadXORByte(guid, 2); packet.ReadXORByte(guid, 0); packet.ReadXORByte(guid, 6); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 3); packet.WriteGuid("Guild GUID", guid); }
public static void HandleAuraCastLog(Packet packet) { packet.ReadPackedGuid("Target GUID"); packet.ReadPackedGuid("Caster GUID"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); packet.ReadUInt32("Count"); var aura = packet.ReadEnum<AuraType>("Aura Type", TypeCode.UInt32); switch (aura) { case AuraType.PeriodicDamage: case AuraType.PeriodicDamagePercent: { packet.ReadUInt32("Damage"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadUInt32("Over damage"); packet.ReadUInt32("Spell Proto"); packet.ReadUInt32("Absorb"); packet.ReadUInt32("Resist"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_2_9901)) packet.ReadByte("Critical"); break; } case AuraType.PeriodicHeal: case AuraType.ObsModHealth: { packet.ReadUInt32("Damage"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadUInt32("Over damage"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3_11685)) // no idea when this was added exactly packet.ReadUInt32("Absorb"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_2_9901)) packet.ReadByte("Critical"); break; } case AuraType.ObsModPower: case AuraType.PeriodicEnergize: { packet.ReadEnum<PowerType>("Power type", TypeCode.Int32); packet.ReadUInt32("Amount"); break; } case AuraType.PeriodicManaLeech: { packet.ReadEnum<PowerType>("Power type", TypeCode.Int32); packet.ReadUInt32("Amount"); packet.ReadSingle("Gain multiplier"); break; } } }
public static void HandleGossipPoi(Packet packet) { packet.ReadEnum<UnknownFlags>("Flags", TypeCode.Int32); packet.ReadVector2("Coordinates"); packet.ReadEnum<GossipPoiIcon>("Icon", TypeCode.UInt32); packet.ReadInt32("Data"); packet.ReadCString("Icon Name"); }
public static void HandleAddCalendarEventInvite(Packet packet) { packet.ReadInt64("Event ID"); packet.ReadInt64("Invite ID"); packet.ReadCString("Name"); packet.ReadEnum<CalendarEventStatus>("Status", TypeCode.Byte); packet.ReadEnum<CalendarModerationRank>("Moderation Rank", TypeCode.Byte); }
public static void HandleAuctionCommandResult(Packet packet) { packet.ReadUInt32("Auction ID"); var action = packet.ReadEnum<AuctionHouseAction>("Action", TypeCode.UInt32); var error = packet.ReadEnum<AuctionHouseAction>("Error", TypeCode.UInt32); if (error == 0 && action > 0) packet.ReadUInt32("Bid Error"); }
public static void HandleAttackerStateUpdate(Packet packet) { var hitInfo = packet.ReadEnum<SpellHitInfo>("HitInfo", TypeCode.Int32); packet.ReadPackedGuid("AttackerGUID"); packet.ReadPackedGuid("TargetGUID"); packet.ReadInt32("Damage"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_3_9183)) packet.ReadInt32("OverDamage"); var subDmgCount = packet.ReadByte(); for (var i = 0; i < subDmgCount; ++i) { packet.ReadInt32("SchoolMask", i); packet.ReadSingle("Float Damage", i); packet.ReadInt32("Int Damage", i); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_3_9183) || hitInfo.HasAnyFlag(SpellHitInfo.HITINFO_PARTIAL_ABSORB | SpellHitInfo.HITINFO_FULL_ABSORB)) packet.ReadInt32("Damage Absorbed", i); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_3_9183) || hitInfo.HasAnyFlag(SpellHitInfo.HITINFO_PARTIAL_RESIST | SpellHitInfo.HITINFO_FULL_RESIST)) packet.ReadInt32("Damage Resisted", i); } var victimStateTypeCode = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_3_9183) ? TypeCode.Byte : TypeCode.Int32; packet.ReadEnum<VictimStates>("VictimState", victimStateTypeCode); packet.ReadInt32("Unk Attacker State 0"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Melee Spell ID "); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_3_9183) || hitInfo.HasAnyFlag(SpellHitInfo.HITINFO_BLOCK)) packet.ReadInt32("Block Amount"); if (hitInfo.HasAnyFlag(SpellHitInfo.HITINFO_RAGE_GAIN)) packet.ReadInt32("Rage Gained"); if (hitInfo.HasAnyFlag(SpellHitInfo.HITINFO_UNK0)) { packet.ReadInt32("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadSingle("Unk Attacker State 3"); packet.ReadInt32("Unk Attacker State 3"); packet.ReadInt32("Unk Attacker State 3"); packet.ReadInt32("Unk Attacker State 3"); } }
public static void HandleGuildFinderSetGuildPost422(Packet packet) { packet.ReadBit("Join"); packet.ReadEnum<GuildFinderOptionsAvailability>("Availability", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsRoles>("Class Roles", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsInterest>("Guild Interests", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsLevel>("Level", TypeCode.UInt32); packet.ReadCString("Comment"); }
public static void HandleInitializeFactions(Packet packet) { var count = packet.ReadInt32("Count"); for (var i = 0; i < count; i++) { packet.ReadEnum<FactionFlag>("Faction Flags", TypeCode.Byte, i); packet.ReadEnum<ReputationRank>("Faction Standing", TypeCode.UInt32, i); } }
public static void HandleGuildFinderSetGuildPost434(Packet packet) { packet.ReadEnum<GuildFinderOptionsLevel>("Level", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsAvailability>("Availability", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsInterest>("Guild Interests", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsRoles>("Class Roles", TypeCode.UInt32); var length = packet.ReadBits(11); packet.ReadBit("Listed"); packet.ReadWoWString("Comment", length); }
public static void HandleInitializeFactions(Packet packet) { for (var i = 0; i < 256; i++) { packet.ReadEnum<ReputationRank>("Faction Standing", TypeCode.UInt32, i); packet.ReadEnum<FactionFlag>("Faction Flags", TypeCode.Byte, i); } for (var i = 0; i < 256; i++) packet.ReadBit("Count", i); }
public static void ReadSingleContactBlock(ref Packet packet, bool onlineCheck) { var status = packet.ReadEnum<ContactStatus>("Status", TypeCode.Byte); if (onlineCheck && status == ContactStatus.Offline) return; packet.ReadEntry<Int32>(StoreNameType.Area, "Area"); packet.ReadInt32("Level"); packet.ReadEnum<Class>("Class", TypeCode.Int32); }
public static void HandleRaidInstanceMessage(Packet packet) { var type = packet.ReadEnum<RaidInstanceResetWarning>("Warning Type", TypeCode.Int32); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id"); packet.ReadEnum<MapDifficulty>("Difficulty", TypeCode.Int32); packet.ReadInt32("Reset time"); if (type == RaidInstanceResetWarning.Welcome) { packet.ReadBoolean("Unk bool"); packet.ReadBoolean("Is Extended"); } }
public static void HandleNpcGossip(Packet packet) { var gossip = new Gossip(); var guid = packet.ReadGuid("GUID"); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); var menuId = packet.ReadUInt32("Menu Id"); if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria)) packet.ReadUInt32("Unk int32"); var textId = packet.ReadUInt32("Text Id"); if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit) Storage.Objects[guid].Item1).GossipId = menuId; var count = packet.ReadUInt32("Amount of Options"); gossip.GossipOptions = new List<GossipOption>((int) count); for (var i = 0; i < count; i++) { var gossipOption = new GossipOption { Index = packet.ReadUInt32("Index", i), OptionIcon = packet.ReadEnum<GossipOptionIcon>("Icon", TypeCode.Byte, i), Box = packet.ReadBoolean("Box", i), RequiredMoney = packet.ReadUInt32("Required money", i), OptionText = packet.ReadCString("Text", i), BoxText = packet.ReadCString("Box Text", i) }; gossip.GossipOptions.Add(gossipOption); } Storage.Gossips.Add(Tuple.Create(menuId, textId), gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); var questgossips = packet.ReadUInt32("Amount of Quest gossips"); for (var i = 0; i < questgossips; i++) { packet.ReadEntryWithName<UInt32>(StoreNameType.Quest, "Quest ID", i); packet.ReadUInt32("Icon", i); packet.ReadInt32("Level", i); packet.ReadEnum<QuestFlags>("Flags", TypeCode.UInt32, i); packet.ReadBoolean("Unk Bool", i); packet.ReadCString("Title", i); } }
public static void HandleGameObjectQueryResponse(Packet packet) { var gameObject = new GameObjectTemplate(); packet.ReadByte("Unk1 Byte"); var entry = packet.ReadEntry("Entry"); if (entry.Value) // entry is masked return; var unk1 = packet.ReadInt32("Unk1 UInt32"); if (unk1 == 0) { //packet.ReadByte("Unk1 Byte"); return; } gameObject.Type = packet.ReadEnum<GameObjectType>("Type", TypeCode.Int32); gameObject.DisplayId = packet.ReadUInt32("Display ID"); var name = new string[4]; for (var i = 0; i < 4; i++) name[i] = packet.ReadCString("Name", i); gameObject.Name = name[0]; gameObject.IconName = packet.ReadCString("Icon Name"); gameObject.CastCaption = packet.ReadCString("Cast Caption"); gameObject.UnkString = packet.ReadCString("Unk String"); gameObject.Data = new int[32]; for (var i = 0; i < gameObject.Data.Length; i++) gameObject.Data[i] = packet.ReadInt32("Data", i); gameObject.Size = packet.ReadSingle("Size"); gameObject.QuestItems = new uint[packet.ReadByte("QuestItems Length")]; for (var i = 0; i < gameObject.QuestItems.Length; i++) gameObject.QuestItems[i] = (uint)packet.ReadEntry<Int32>(StoreNameType.Item, "Quest Item", i); packet.ReadEnum<ClientType>("Expansion", TypeCode.UInt32); Storage.GameObjectTemplates.Add((uint)entry.Key, gameObject, packet.TimeSpan); var objectName = new ObjectName { ObjectType = ObjectType.GameObject, Name = gameObject.Name, }; Storage.ObjectNames.Add((uint)entry.Key, objectName, packet.TimeSpan); }
public static void HandleCalendarEventInviteAlert(Packet packet) { packet.ReadInt64("Event ID"); packet.ReadCString("Title"); packet.ReadPackedTime("Time"); packet.ReadEnum<CalendarFlag>("Event Flags", TypeCode.Int32); packet.ReadEnum<CalendarEventType>("Type", TypeCode.Int32); packet.ReadEntryWithName<Int32>(StoreNameType.LFGDungeon, "Dungeon ID"); packet.ReadInt64("Invite ID"); packet.ReadEnum<CalendarEventStatus>("Status", TypeCode.Byte); packet.ReadEnum<CalendarModerationRank>("Moderation Rank", TypeCode.Byte); packet.ReadPackedGuid("Creator GUID"); packet.ReadPackedGuid("Sender GUID"); }
public static void HandleComplain(Packet packet) { bool fromChat = packet.ReadBoolean("From Chat"); // false = from mail packet.ReadGuid("Guid"); packet.ReadEnum<Language>("Language", TypeCode.Int32); packet.ReadEnum<ChatMessageType>("Type", TypeCode.Int32); packet.ReadInt32("Channel ID"); if (fromChat) { packet.ReadTime("Time ago"); packet.ReadCString("Complain"); } }
public static void HandleCharEnum(Packet packet) { var count = packet.ReadByte("Count"); for (var i = 0; i < count; i++) { var guid = packet.ReadGuid("GUID"); var name = packet.ReadCString("Name"); var race = packet.ReadEnum<Race>("Race", TypeCode.Byte); var clss = packet.ReadEnum<Class>("Class", TypeCode.Byte); packet.ReadEnum<Gender>("Gender", TypeCode.Byte); packet.ReadByte("Skin"); packet.ReadByte("Face"); packet.ReadByte("Hair Style"); packet.ReadByte("Hair Color"); packet.ReadByte("Facial Hair"); var level = packet.ReadByte("Level"); var zone = packet.ReadEntryWithName<UInt32>(StoreNameType.Zone, "Zone Id"); var mapId = packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id"); var pos = packet.ReadVector3("Position"); packet.ReadInt32("Guild Id"); packet.ReadEnum<CharacterFlag>("Character Flags", TypeCode.Int32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadEnum<CustomizationFlag>("Customization Flags", TypeCode.Int32); var firstLogin = packet.ReadBoolean("First Login"); packet.ReadInt32("Pet Display Id"); packet.ReadInt32("Pet Level"); packet.ReadEnum<CreatureFamily>("Pet Family", TypeCode.Int32); for (var j = 0; j < 19; j++) { packet.ReadInt32("Equip Display Id"); packet.ReadEnum<InventoryType>("Equip Inventory Type", TypeCode.Byte); packet.ReadInt32("Equip Aura Id"); } int bagCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3_11685) ? 4 : 1; for (var j = 0; j < bagCount; j++) { packet.ReadInt32("Bag Display Id"); packet.ReadEnum<InventoryType>("Bag Inventory Type", TypeCode.Byte); packet.ReadInt32("Bag Aura Id"); } if (firstLogin) { var startPos = new StartPosition {Map = mapId, Position = pos, Zone = zone}; packet.SniffFileInfo.Storage.StartPositions.TryAdd(new Tuple<Race, Class>(race, clss), startPos); } var playerInfo = new Player {Race = race, Class = clss, Name = name, FirstLogin = firstLogin, Level = level}; packet.SniffFileInfo.Storage.Objects.AddOrUpdate(guid, playerInfo); } }
public static void HandleGuildFinderBrowse(Packet packet) { if (packet.Direction == Direction.ClientToServer) { packet.ReadEnum<GuildFinderOptionsRoles>("Class Roles", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsAvailability>("Availability", TypeCode.UInt32); packet.ReadEnum<GuildFinderOptionsInterest>("Guild Interests", TypeCode.UInt32); packet.ReadUInt32("Player Level"); } else { packet.WriteLine(" : SMSG_???"); packet.ReadToEnd(); } }
public static void HandleAuthResponse(Packet packet) { var code = packet.ReadEnum<ResponseCode>("Auth Code", TypeCode.Byte); switch (code) { case ResponseCode.AUTH_OK: { ReadAuthResponseInfo(ref packet); break; } case ResponseCode.AUTH_WAIT_QUEUE: { if (packet.Length <= 6) { ReadQueuePositionInfo(ref packet); break; } ReadAuthResponseInfo(ref packet); ReadQueuePositionInfo(ref packet); break; } } }
public static void HandleInstanceDifficulty(Packet packet) { packet.ReadEnum<MapDifficulty>("Difficulty", TypeCode.Int32); if (ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing) && ClientVersion.RemovedInVersion(ClientType.Cataclysm)) packet.ReadInt32("Player Difficulty"); }
public static void HandleClientWardenData(Packet packet) { var opcode = packet.ReadEnum<WardenClientOpcode>("Warden Client Opcode", TypeCode.Byte); switch (opcode) { case WardenClientOpcode.CheatCheckResults: { var length = packet.ReadUInt16("Check Result Length"); packet.ReadInt32("Check Result Checksum"); var result = packet.ReadBytes(length); packet.WriteLine("Check Results: " + Utilities.ByteArrayToHexString(result)); break; } case WardenClientOpcode.TransformedSeed: { var sha1 = packet.ReadBytes(20); packet.WriteLine("SHA1 Seed: " + Utilities.ByteArrayToHexString(sha1)); break; } } }
public static void HandleServerUpdateAccountData(Packet packet) { var guid = new byte[8]; packet.ReadEnum<AccountDataType>("Data Type", 3); packet.StartBitStream(guid, 5, 1, 3, 7, 0, 4, 2, 6); packet.ReadXORBytes(guid, 3, 1, 5); var decompCount = packet.ReadInt32(); var compCount = packet.ReadInt32(); var pkt = packet.Inflate(compCount, decompCount, false); var data = pkt.ReadWoWString(decompCount); pkt.ClosePacket(false); packet.AddValue("Account Data", data); packet.ReadXORBytes(guid, 7, 4, 0, 6, 2); packet.ReadTime("Login Time"); packet.WriteGuid("GUID", guid); }
public static void HandleInstanceDifficulty(Packet packet) { if (ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing)) // don't know when this was added, doesn't exist in 2.4.1 packet.ReadEnum<MapDifficulty>("Difficulty", TypeCode.Int32); packet.ReadInt32("Player Difficulty"); }
public static void HandleLootResponse(Packet packet) { var loot = new Loot(); var guid = packet.ReadGuid("GUID"); var lootType = packet.ReadEnum<LootType>("Loot Type", TypeCode.Byte); if (lootType == LootType.Unk0) { packet.ReadByte("Slot"); return; } loot.Gold = packet.ReadUInt32("Gold"); var count = packet.ReadByte("Drop Count"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_0_14333)) packet.ReadByte("unk"); loot.LootItems = new List<LootItem>(count); for (var i = 0; i < count; ++i) { var lootItem = new LootItem(); packet.ReadByte("Slot", i); lootItem.ItemId = (uint) packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry", i); lootItem.Count = packet.ReadUInt32("Count", i); packet.ReadUInt32("Display ID", i); packet.ReadInt32("Random Suffix", i); packet.ReadInt32("Random Property Id", i); lootItem.SlotType = packet.ReadEnum<LootSlotType>("Slot Type", TypeCode.Byte, i); loot.LootItems.Add(lootItem); } Stuffing.Loots.TryAdd(new Tuple<uint, LootType>(guid.GetEntry(), lootType), loot); }