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 HandleCorpseQueryResponse(Packet packet) { var pos = new Vector3(); var guid = new byte[8]; guid[4] = packet.ReadBit(); guid[2] = packet.ReadBit(); guid[5] = packet.ReadBit(); guid[3] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[0] = packet.ReadBit(); packet.ReadBit("Corpse Found"); guid[7] = packet.ReadBit(); packet.ReadXORByte(guid, 3); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 2); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); pos.X = packet.ReadSingle(); packet.ReadXORByte(guid, 6); packet.ReadXORByte(guid, 4); packet.ReadXORByte(guid, 5); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Corpse Map ID"); packet.ReadXORByte(guid, 7); pos.Z = packet.ReadSingle(); packet.ReadXORByte(guid, 0); pos.Y = packet.ReadSingle(); packet.WriteLine("Position: {0}", pos); packet.WriteGuid("Corpse Low GUID", guid); }
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 HandleBindPointUpdate(Packet packet) { packet.ReadSingle("Position Z"); packet.ReadSingle("Position Y"); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id"); packet.ReadEntryWithName<Int32>(StoreNameType.Zone, "Zone Id"); packet.ReadSingle("Position X"); }
public static void HandleInitWorldStates(Packet packet) { packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadEntryWithName<Int32>(StoreNameType.Zone, "Zone Id"); CurrentAreaId = packet.ReadEntryWithName<Int32>(StoreNameType.Area, "Area Id"); var numFields = packet.ReadInt16("Field Count"); for (var i = 0; i < numFields; i++) ReadWorldStateBlock(ref packet); }
public static void HandleBindPointUpdate(Packet packet) { var pos = new Vector3(); CoreParsers.MovementHandler.CurrentMapId = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map"); pos.X = packet.ReadSingle(); pos.Z = packet.ReadSingle(); pos.Y = packet.ReadSingle(); packet.ReadEntryWithName<Int32>(StoreNameType.Area, "Area Id"); packet.WriteLine("Position: {0}", pos); }
public static void HandleInitWorldStates(Packet packet) { packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadEntryWithName<Int32>(StoreNameType.Zone, "Zone Id"); CurrentAreaId = packet.ReadEntryWithName<Int32>(StoreNameType.Area, "Area Id"); var numFields = packet.ReadBits("Field Count", 21); //packet.ReadByte("UnkB"); /*for (var i = 0; i < numFields; i++) { var val = packet.ReadByte(); packet.WriteLine("Field: {0} - Value: {1}", i, val); }*/ packet.ReadToEnd(); }
public static void HandleInitWorldStates(Packet packet) { packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadEntryWithName<Int32>(StoreNameType.Zone, "Zone Id"); CoreParsers.WorldStateHandler.CurrentAreaId = packet.ReadEntryWithName<Int32>(StoreNameType.Area, "Area Id"); var numFields = packet.ReadBits("Field Count", 21); for (var i = 0; i < numFields; i++) { var val = packet.ReadInt32(); var field = packet.ReadInt32(); packet.WriteLine("[{0}] - Field: {1} - Value: {2}", i, field, val); } }
public static void HandleCompletionNPCResponse(Packet packet) { var count = packet.ReadBits("Count", 23); var counts = new uint[count]; for (int i = 0; i < count; ++i) counts[i] = packet.ReadBits("Count", 24, i); for (int i = 0; i < count; ++i) { packet.ReadEntryWithName<UInt32>(StoreNameType.Quest, "Quest", i); for (int j = 0; j < counts[i]; ++j) packet.ReadEntryWithName<UInt32>(StoreNameType.Unit, "Unit", i, j); } }
public static void HandleCorpseQuery(Packet packet) { if (packet.Direction == Direction.ClientToServer) return; if (!packet.ReadBoolean("Corpse Found")) return; packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadVector3("Corpse Position"); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Corpse Map ID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_2_10482)) packet.ReadInt32("Corpse Low GUID"); }
public static void HandlePetActionFeedback(Packet packet) { var state = packet.ReadEnum<PetFeedback>("Pet state", TypeCode.Byte); switch (state) { case PetFeedback.NothingToAttack: if (ClientVersion.AddedInVersion(ClientType.Cataclysm) || packet.CanRead()) packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); break; case PetFeedback.CantAttackTarget: if (ClientVersion.AddedInVersion(ClientType.Cataclysm)) packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); // sub_8ADA60 2nd parameter is SpellID, check sub_8B22C0 break; } }
public static void HandleEnchantmentLog(Packet packet) { packet.ReadPackedGuid("Target"); packet.ReadPackedGuid("Caster"); packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Item Entry"); packet.ReadUInt32("Enchantment ID?"); }
public static void HandleAuctionListBidderResult(Packet packet) { var count = packet.ReadUInt32("Count"); for (var i = 0; i < count; ++i) { packet.ReadUInt32("Auction Id", i); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Item Entry", i); int enchantmentCount = ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing) ? 7 : 6; for (var j = 0; j < enchantmentCount; ++j) { packet.ReadUInt32("Item Enchantment ID", i, j); packet.ReadUInt32("Item Enchantment Duration", i, j); packet.ReadUInt32("Item Enchantment Charges", i, j); } packet.ReadInt32("Item Random Property ID", i); packet.ReadUInt32("Item Suffix", i); packet.ReadUInt32("Item Count", i); packet.ReadInt32("Item Spell Charges", i); //packet.ReadEnum<ItemFlag>("Item Flags", TypeCode.UInt32, i); packet.ReadUInt32("Unk UInt32 1", i); packet.ReadGuid("Owner", i); packet.ReadUInt32("Start Bid", i); packet.ReadUInt32("Out Bid", i); packet.ReadUInt32("Buyout ", i); packet.ReadUInt32("Time Left", i); packet.ReadGuid("Bidder", i); packet.ReadUInt32("Bid", i); } packet.ReadUInt32("Own Count"); packet.ReadUInt32("Unk UInt32 1"); }
public static void HandleQuestNpcQuery(Packet packet) { var count = packet.ReadBits("Count", 22); for (var i = 0; i < count; i++) packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Quest ID", i); }
public static void HandleQuestgiverAcceptQuest(Packet packet) { var guid = new byte[8]; packet.ReadEntryWithName<UInt32>(StoreNameType.Quest, "Quest ID"); guid[3] = packet.ReadBit(); guid[2] = packet.ReadBit(); guid[7] = packet.ReadBit(); packet.ReadBit("bit18"); guid[5] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[4] = packet.ReadBit(); packet.ReadXORByte(guid, 3); packet.ReadXORByte(guid, 4); packet.ReadXORByte(guid, 7); packet.ReadXORByte(guid, 2); packet.ReadXORByte(guid, 5); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 6); packet.ReadXORByte(guid, 0); packet.WriteGuid("Guid", guid); }
public static void HandleQuestPoiQueryResponse(Packet packet) { packet.ReadInt32("Count?"); var count = packet.ReadBits("Count", 20); var POIcounter = new uint[count]; var pointsSize = new uint[count][]; for (var i = 0; i < count; ++i) { POIcounter[i] = packet.ReadBits("POI Counter", 18, i); pointsSize[i] = new uint[POIcounter[i]]; for (var j = 0; j < POIcounter[i]; ++j) pointsSize[i][j] = packet.ReadBits("Points Counter", 21, i, j); } for (var i = 0; i < count; ++i) { var questPOIs = new List<QuestPOI>(); for (var j = 0; j < POIcounter[i]; ++j) { var questPoi = new QuestPOI(); questPoi.Points = new List<QuestPOIPoint>((int)pointsSize[i][j]); for (var k = 0u; k < pointsSize[i][j]; ++k) { var questPoiPoint = new QuestPOIPoint { Index = k, X = packet.ReadInt32("Point X", i, j, (int)k), Y = packet.ReadInt32("Point Y", i, j, (int)k) }; questPoi.Points.Add(questPoiPoint); } packet.ReadInt32("Unk Int32 1", i, j); packet.ReadInt32("Unk Int32 2", i, j); packet.ReadInt32("Unk Int32 3", i, j); questPoi.Map = (uint)packet.ReadEntryWithName<UInt32>(StoreNameType.Map, "Map Id", i, j); questPoi.ObjectiveIndex = packet.ReadInt32("Objective Index", i, j); questPoi.WorldMapAreaId = packet.ReadUInt32("World Map Area", i, j); packet.ReadInt32("Unk Int32 4", i, j); packet.ReadInt32("Unk Int32 5", i, j); questPoi.Idx = (uint)packet.ReadInt32("POI Index", i, j); packet.ReadInt32("Unk Int32 6", i, j); questPoi.FloorId = packet.ReadUInt32("Floor Id", i, j); questPOIs.Add(questPoi); } var questId = packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Quest ID", i); packet.ReadInt32("POI Counter?", i); foreach (var questpoi in questPOIs) Storage.QuestPOIs.Add(new Tuple<uint, uint>((uint)questId, questpoi.Idx), questpoi, packet.TimeSpan); } }
public static void HandleEnterWorld(Packet packet) { CurrentMapId = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadVector4("Position"); packet.AddSniffData(StoreNameType.Map, (int) CurrentMapId, "NEW_WORLD"); }
public static void HandleTradeStatusExtended(Packet packet) { packet.ReadByte("Trader"); packet.ReadUInt32("Trade Id"); packet.ReadUInt32("Unk Slot 1"); packet.ReadUInt32("Unk Slot 2"); packet.ReadUInt32("Gold"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); while (packet.CanRead()) { var slot = packet.ReadByte("Slot Index"); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Item Entry", slot); packet.ReadUInt32("Item Display ID", slot); packet.ReadUInt32("Item Count", slot); packet.ReadUInt32("Item Wrapped", slot); packet.ReadUInt64("Item Gift Creator GUID", slot); packet.ReadUInt32("Item Perm Enchantment Id", slot); for (var i = 0; i < 3; ++i) packet.ReadUInt32("Item Enchantment Id", slot, i); packet.ReadGuid("Item Creator GUID", slot); packet.ReadInt32("Item Spell Charges", slot); packet.ReadInt32("Item Suffix Factor", slot); packet.ReadInt32("Item Random Property ID", slot); packet.ReadUInt32("Item Lock ID", slot); packet.ReadUInt32("Item Max Durability", slot); packet.ReadUInt32("Item Durability", slot); } }
public static void HandleLearnedSpell(Packet packet) { var count = packet.ReadBits("Count", 22); packet.ReadBit("Byte16"); for (var i = 0; i < count; i++) packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); }
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.ReadEntryWithName<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 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 HandleAuraCastLog(Packet packet) { packet.ReadGuid("Caster GUID"); packet.ReadGuid("Target GUID"); packet.ReadEntryWithName<UInt32>(StoreNameType.Spell, "Spell ID"); packet.ReadSingle("Unk 1"); packet.ReadSingle("Unk 2"); }
public static void HandleDestructibleBuildingDamage(Packet packet) { packet.ReadPackedGuid("GO GUID"); packet.ReadPackedGuid("Vehicle GUID:"); packet.ReadPackedGuid("Player GUID"); packet.ReadInt32("Damage"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); }
public static void HandleBuyFailed(Packet packet) { packet.ReadGuid("Vendor GUID"); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V4_2_2_14545)) packet.ReadInt32("Param"); packet.ReadEnum<BuyResult>("Result", TypeCode.Byte); }
public static void HandleBindPointUpdate(Packet packet) { packet.ReadVector3("Position"); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadInt32("Zone ID"); }
public static void HandleLootAllPassed(Packet packet) { packet.ReadGuid("GUID"); packet.ReadUInt32("Slot"); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); packet.ReadInt32("Random Property Id"); packet.ReadInt32("Random Suffix"); }
public static void HandleMailListResult(Packet packet) { packet.ReadUInt32("Total Mails"); var count = packet.ReadByte("Shown Mails"); for (var i = 0; i < count; ++i) { packet.ReadUInt16("Message Size", i); packet.ReadUInt32("Mail Id", i); var mailType = packet.ReadEnum<MailType>("Message Type", TypeCode.Byte, i); switch (mailType) // Read GUID if MailType.Normal, int32 (entry) if not { case MailType.Normal: packet.ReadGuid("Player GUID", i); break; case MailType.Creature: packet.Writer.WriteLine("[" + i + "] Entry: " + StoreGetters.GetExistingDatabaseString(StoreNameType.Unit, packet.ReadInt32())); break; case MailType.GameObject: packet.Writer.WriteLine("[" + i + "] Entry: " + StoreGetters.GetExistingDatabaseString(StoreNameType.GameObject, packet.ReadInt32())); break; case MailType.Item: packet.Writer.WriteLine("[" + i + "] Entry: " + StoreGetters.GetExistingDatabaseString(StoreNameType.Item, packet.ReadInt32())); break; default: packet.ReadInt32("Entry", i); break; } packet.ReadUInt32("COD", i); packet.ReadUInt32("Unk uint32", i); packet.ReadUInt32("Stationery", i); packet.ReadUInt32("Money", i); packet.ReadUInt32("Flags", i); packet.ReadSingle("Time?", i); packet.ReadUInt32("Template Id", i); packet.ReadCString("Subject", i); packet.ReadCString("Body", i); var items = packet.ReadByte("Item Count", i); for (var j = 0; j < items; ++j) { packet.ReadByte("Item Index", i, j); packet.ReadUInt32("Item GuidLow", i, j); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Item Id", i, j); for (var k = 0; k < 7; ++k) { packet.ReadUInt32("Item Enchantment Id", i, j, k); packet.ReadUInt32("Item Enchantment Duration", i, j, k); packet.ReadUInt32("Item Enchantment Charges", i, j, k); } packet.ReadInt32("Item Random Property Id", i, j); packet.ReadUInt32("Item Suffix Factor", i, j); packet.ReadUInt32("Item Count", i, j); packet.ReadUInt32("Item SpellCharges", i, j); packet.ReadUInt32("Item Max Durability", i, j); packet.ReadUInt32("Item Durability", i, j); packet.ReadByte("Unk byte", i, j); } } }
public static void HandleQuestCompleted(Packet packet) { packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Quest ID"); packet.ReadInt32("Reward"); packet.ReadInt32("Money"); packet.ReadInt32("Honor"); packet.ReadInt32("Talents"); packet.ReadInt32("Arena Points"); }
public static void HandleClientEnterWorld(Packet packet) { var mapId = packet.ReadEntryWithName<UInt32>(StoreNameType.Map, "Map Id"); packet.ReadBit("Loading"); CoreParsers.MovementHandler.CurrentMapId = (uint)mapId; packet.AddSniffData(StoreNameType.Map, mapId, "LOAD_SCREEN"); }
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"); } }