public static void HandleAuctionListItems(Packet packet) { packet.ReadInt32("Offset"); packet.ReadPackedGuid128("Auctioneer"); packet.ReadByte("MinLevel"); packet.ReadByte("MaxLevel"); packet.ReadInt32("InvType"); packet.ReadInt32("ItemClass"); packet.ReadInt32("ItemSubclass"); packet.ReadInt32("Quality"); var sort = packet.ReadByte("SortCount"); packet.ResetBitReader(); var len = packet.ReadBits(8); packet.ReadWoWString("Name", len); packet.ReadBit("OnlyUsable"); packet.ReadBit("ExactMatch"); var size = packet.ReadInt32("DataSize"); var data = packet.ReadBytes(size); var sorts = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); for (var i = 0; i < sort; ++i) { sorts.ReadByte("UnkByte1", i); sorts.ReadByte("UnkByte2", i); } }
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 HandleServerWardenData(Packet packet) { var opcode = packet.ReadEnum<WardenServerOpcode>("Warden Server Opcode", TypeCode.Byte); packet.SetPosition(0); switch (opcode) { case WardenServerOpcode.ModuleInfo: { packet.ReadByte(); packet.ReadBytes("Module MD5", 16); packet.ReadBytes("Module RC4", 16); packet.ReadUInt32("Module Length"); break; } case WardenServerOpcode.ModuleChunk: { packet.ReadByte(); var length = packet.ReadUInt16("Chunk Length"); packet.ReadBytes("Module Chunk", length); break; } case WardenServerOpcode.CheatChecks: { packet.ReadByte(); byte length; while ((length = packet.ReadByte()) != 0) { packet.ReadBytes("String", length); } // var rest = (int)(packet.GetLength() - packet.GetPosition()); break; } case WardenServerOpcode.Data: { while (packet.CanRead()) { packet.ReadByte(); var length = packet.ReadUInt16("Data Length"); packet.ReadInt32("Data Checksum"); packet.ReadBytes("Data", length); } break; } case WardenServerOpcode.Seed: { packet.ReadByte(); packet.ReadBytes("Seed", 16); break; } } }
public static void HandleServerAddonsList(Packet packet) { // This packet requires _addonCount from CMSG_AUTH_SESSION to be parsed. if (_addonCount == -1) { packet.WriteLine("CMSG_AUTH_SESSION was not received - cannot successfully parse this packet."); packet.ReadToEnd(); return; } for (var i = 0; i < _addonCount; i++) { packet.ReadByte("Addon State", i); var sendCrc = packet.ReadBoolean("Use CRC", i); if (sendCrc) { var usePublicKey = packet.ReadBoolean("Use Public Key", i); if (usePublicKey) { var pubKey = packet.ReadChars(256); packet.Write("[{0}] Public Key: ", i); foreach (var t in pubKey) packet.Write(t.ToString(CultureInfo.InvariantCulture)); } packet.ReadInt32("Unk Int32", i); } if (packet.ReadBoolean("Use URL File", i)) packet.ReadCString("Addon URL File", i); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464)) { var bannedCount = packet.ReadInt32("Banned Addons Count"); for (var i = 0; i < bannedCount; i++) { packet.ReadInt32("ID", i); var unkStr2 = packet.ReadBytes(16); packet.WriteLine("[{0}] Unk Hash 1: {1}", i, Utilities.ByteArrayToHexString(unkStr2)); var unkStr3 = packet.ReadBytes(16); packet.WriteLine("[{0}] Unk Hash 2: {1}", i, Utilities.ByteArrayToHexString(unkStr3)); packet.ReadInt32("Unk Int32 3", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3a_11723)) packet.ReadInt32("Unk Int32 4", i); } } }
public static void HandleServerAddonsList(Packet packet) { for (var i = 0; i < _addonCount; i++) { packet.ReadByte("Addon State"); var sendCrc = packet.ReadBoolean("Use CRC"); if (sendCrc) { var usePublicKey = packet.ReadBoolean("Use Public Key"); if (usePublicKey) { var pubKey = packet.ReadChars(256); packet.Writer.Write("Public Key: "); foreach (var t in pubKey) packet.Writer.Write(t); } packet.ReadInt32("Unk Int32"); } var unkByte2 = packet.ReadBoolean("Use URL File"); if (!unkByte2) continue; packet.ReadCString("Addon URL File"); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464)) { var bannedCount = packet.ReadInt32("Banned Addons Count"); for (var i = 0; i < bannedCount; i++) { packet.ReadInt32("ID"); var unkStr2 = packet.ReadBytes(16); packet.Writer.WriteLine("Unk Hash 1: " + Utilities.ByteArrayToHexString(unkStr2)); var unkStr3 = packet.ReadBytes(16); packet.Writer.WriteLine("Unk Hash 2: " + Utilities.ByteArrayToHexString(unkStr3)); packet.ReadInt32("Unk Int32 3"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3a_11723)) packet.ReadInt32("Unk Int32 4"); } } }
public static void HandleServerAddonInfo(Packet packet) { var AddonsCount = packet.ReadBits("Addons Count", 23); uint[,] AddonsInfo = new uint[AddonsCount, 4]; for (var i = 0; i < AddonsCount; ++i) { AddonsInfo[i, 0] = packet.ReadBit("Use CRC", i); AddonsInfo[i, 2] = packet.ReadBit("Has URL", i); AddonsInfo[i, 1] = packet.ReadBit("Has Public Key", i); if (AddonsInfo[i, 2] == 1) AddonsInfo[i, 3] = packet.ReadBits(8); else AddonsInfo[i, 3] = 0; } var BannedAddonsCount = packet.ReadBits("Banned Addons Count",18); for (var i = 0; i < AddonsCount; ++i) { if (AddonsInfo[i, 1] == 1) packet.ReadBytes(256); // the bytes order isn't 1,2,3,4.. they are mangled. if (AddonsInfo[i, 0] == 1) { packet.ReadUInt32("CRC Summ", i); packet.ReadByte("Unk Byte1", i); } packet.ReadByte("Addon State", i); if (AddonsInfo[i, 2] == 1 && AddonsInfo[i, 3] > 0) packet.ReadWoWString("URL path", AddonsInfo[i, 3], i); } for (var i = 0; i < BannedAddonsCount; ++i) { var NameMD5 = new byte[16]; var VersionMD5 = new byte[16]; for (uint j = 0; j < 16; j += 4) { Array.Copy(packet.ReadBytes(4), 0, NameMD5, j, 4); Array.Copy(packet.ReadBytes(4), 0, VersionMD5, j, 4); } packet.ReadUInt32("ID", i); packet.ReadUInt32("Timestamp", i); packet.ReadUInt32("Banned", i); } }
public static void HandleDBReply(Packet packet) { var type = packet.ReadUInt32E<DB2Hash>("TableHash"); var entry = packet.ReadInt32("RecordID"); var timeStamp = packet.ReadUInt32(); packet.AddValue("Timestamp", Utilities.GetDateTimeFromUnixTime(timeStamp)); var allow = packet.ReadBit("Allow"); var size = packet.ReadInt32("Size"); var data = packet.ReadBytes(size); var db2File = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); if (entry < 0 || !allow) { packet.WriteLine("Row {0} has been removed.", -entry); HotfixStoreMgr.RemoveRecord(type, entry); Storage.AddHotfixData(entry, type, true, timeStamp); } else { packet.AddSniffData(StoreNameType.None, entry, type.ToString()); HotfixStoreMgr.AddRecord(type, entry, db2File); Storage.AddHotfixData(entry, type, false, timeStamp); db2File.ClosePacket(false); } }
public static void HandleBotDetected(Packet packet) { packet.ReadBoolean("Glider 1 Detected"); packet.ReadBoolean("Glider 2 Detected"); packet.ReadBoolean("Inner Space Detected"); packet.ReadBytes(20); // Hash }
public static void HandleVoiceRosterUpdate(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadInt16("Channel ID"); packet.ReadByte("Channel Type"); // 0: channel, 2: party packet.ReadCString("Channel Name"); packet.WriteLine("Encryption Key: " + Utilities.ByteArrayToHexString(packet.ReadBytes(16))); packet.WriteLine("IP: " + packet.ReadIPAddress()); packet.ReadInt16("Voice Server Port"); var count = packet.ReadByte("Player Count"); packet.ReadGuid("Leader GUID"); var leaderFlags1 = packet.ReadByte(); packet.WriteLine("Leader Flags 1: 0x" + leaderFlags1.ToString("X2")); var leaderFlags2 = packet.ReadByte(); packet.WriteLine("Leader Flags 2: 0x" + leaderFlags2.ToString("X2")); for (var i = 0; i < count - 1; i++) { packet.ReadGuid("Player GUID"); packet.ReadByte("Index"); var flags1 = packet.ReadByte(); packet.WriteLine("Flags 1: 0x" + flags1.ToString("X2")); var flags2 = packet.ReadByte(); packet.WriteLine("Flags 2: 0x" + flags2.ToString("X2")); } }
public static void HandleVoiceRosterUpdate(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadInt16("Channel ID"); packet.ReadByte("Channel Type"); // 0: channel, 2: party packet.ReadCString("Channel Name"); packet.ReadBytes("Encryption Key", 16); packet.ReadIPAddress("IP"); packet.ReadInt16("Voice Server Port"); var count = packet.ReadByte("Player Count"); packet.ReadGuid("Leader GUID"); var leaderFlags1 = packet.ReadByte(); packet.AddValue("Leader Flags 1", "0x" + leaderFlags1.ToString("X2")); var leaderFlags2 = packet.ReadByte(); packet.AddValue("Leader Flags 2", "0x" + leaderFlags2.ToString("X2")); for (var i = 0; i < count - 1; i++) { packet.ReadGuid("Player GUID"); packet.ReadByte("Index"); var flags1 = packet.ReadByte(); packet.AddValue("Flags 1", "0x" + flags1.ToString("X2")); var flags2 = packet.ReadByte(); packet.AddValue("Flags 2", "0x" + flags2.ToString("X2")); } }
public static void HandleServerAddonsList(Packet packet) { // This packet requires _addonCount from CMSG_AUTH_SESSION to be parsed. if (_addonCount == -1) { packet.AddValue("Error", "CMSG_AUTH_SESSION was not received - cannot successfully parse this packet."); packet.ReadToEnd(); return; } for (var i = 0; i < _addonCount; i++) { packet.ReadByte("Addon State", i); var sendCrc = packet.ReadBool("Use CRC", i); if (sendCrc) { var usePublicKey = packet.ReadBool("Use Public Key", i); if (usePublicKey) packet.ReadBytes("Name MD5", 256); packet.ReadInt32("Unk Int32", i); } if (packet.ReadBool("Use URL File", i)) packet.ReadCString("Addon URL File", i); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464)) { var bannedCount = packet.ReadInt32("Banned Addons Count"); for (var i = 0; i < bannedCount; i++) { packet.ReadInt32("ID", i); packet.ReadBytes("Name MD5", 16); packet.ReadBytes("Version MD5", 16); packet.ReadTime("Time", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3a_11723)) packet.ReadInt32("Is banned", i); } } }
public static void HandleServerWardenData(Packet packet) { var Size = packet.ReadInt32(); byte[] WardenDataBuffer = packet.ReadBytes(Size); Packet WardenData = new Packet(WardenDataBuffer, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); CoreParsers.WardenHandler.HandleServerWardenData(WardenData); }
public static void HandleClientWardenData547(Packet packet) { var Size = packet.ReadInt32(); byte[] WardenDataBuffer = packet.ReadBytes(Size); Packet WardenData = new Packet(WardenDataBuffer, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); HandleClientWardenData(WardenData); }
public static void HandleAuthSession434(Packet packet) { var sha = new byte[20]; packet.ReadUInt32("UInt32 1"); packet.ReadUInt32("UInt32 2"); packet.ReadByte("Unk Byte"); sha[10] = packet.ReadByte(); sha[18] = packet.ReadByte(); sha[12] = packet.ReadByte(); sha[5] = packet.ReadByte(); packet.ReadInt64("Int64"); sha[15] = packet.ReadByte(); sha[9] = packet.ReadByte(); sha[19] = packet.ReadByte(); sha[4] = packet.ReadByte(); sha[7] = packet.ReadByte(); sha[16] = packet.ReadByte(); sha[3] = packet.ReadByte(); packet.ReadEnum<ClientVersionBuild>("Client Build", TypeCode.Int16); sha[8] = packet.ReadByte(); packet.ReadUInt32("UInt32 3"); packet.ReadByte("Unk Byte"); sha[17] = packet.ReadByte(); sha[6] = packet.ReadByte(); sha[0] = packet.ReadByte(); sha[1] = packet.ReadByte(); sha[11] = packet.ReadByte(); packet.ReadUInt32("Client seed"); sha[2] = packet.ReadByte(); packet.ReadUInt32("UInt32 4"); sha[14] = packet.ReadByte(); sha[13] = packet.ReadByte(); using (var addons = new Packet(packet.ReadBytes(packet.ReadInt32()), packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName)) { var pkt2 = addons; CoreParsers.AddonHandler.ReadClientAddonsList(ref pkt2); } packet.ReadBit("Unk bit"); var size = (int)packet.ReadBits(12); packet.WriteLine("Account name: {0}", Encoding.UTF8.GetString(packet.ReadBytes(size))); packet.WriteLine("Proof SHA-1 Hash: " + Utilities.ByteArrayToHexString(sha)); }
public static void HandleServerAddonsList(Packet packet) { var bits20 = (int)packet.ReadBits(23); var bit3 = new bool[bits20]; var usePublicKey = new bool[bits20]; var bits0 = new uint[bits20]; var bit1 = new bool[bits20]; for (var i = 0; i < bits20; i++) { bit3[i] = packet.ReadBit(); usePublicKey[i] = packet.ReadBit(); if (bit3[i]) bits0[i] = packet.ReadBits(8); bit1[i] = packet.ReadBit(); } var bits10 = (int)packet.ReadBits(18); for (var i = 0; i < bits20; i++) { if (bit3[i]) packet.ReadWoWString("Addon URL File", bits0[i], i); if (usePublicKey[i]) { var pubKey = packet.ReadBytes(256); packet.WriteLine("[{0}] Name MD5: {1}", i, Utilities.ByteArrayToHexString(pubKey)); } if (bit1[i]) { packet.ReadByte("Byte24", i); packet.ReadInt32("Int24", i); } packet.ReadByte("Addon State", i); } for (var i = 0; i < bits10; i++) { packet.ReadInt32("Int14", i); packet.ReadInt32("IntED", i); for (var j = 0; j < 4; j++) { packet.ReadInt32("IntED", i, j); packet.ReadInt32("Int14", i, j); } packet.ReadInt32("IntED", i); } }
public static void HandleServerAddonsList(Packet packet) { var bits20 = packet.ReadBits(23); var usePublicKey = new bool[bits20]; var bit3 = new bool[bits20]; var bit1 = new bool[bits20]; var bits0 = new uint[bits20]; for (var i = 0; i < bits20; i++) { usePublicKey[i] = packet.ReadBit(); bit3[i] = packet.ReadBit(); bit1[i] = packet.ReadBit(); if (bit3[i]) bits0[i] = packet.ReadBits(8); } var bits10 = (int)packet.ReadBits(18); for (var i = 0; i < bits20; i++) { if (usePublicKey[i]) { packet.ReadBytes("Name MD5", 256); } if (bit1[i]) { packet.ReadByte("Byte24", i); packet.ReadInt32("Int24", i); } if (bit3[i]) packet.ReadWoWString("Addon URL File", bits0[i], i); packet.ReadByte("Addon State", i); } for (var i = 0; i < bits10; i++) { packet.ReadInt32("Int14", i); for (var j = 0; j < 4; j++) { packet.ReadInt32("IntED", i, j); packet.ReadInt32("Int14", i, j); } packet.ReadInt32("IntED", i); packet.ReadInt32("IntED", i); } }
public static void HandleQuestCompletedResponse(Packet packet) { packet.ReadInt32("Count"); // Prints ~4k lines of quest IDs, should be DEBUG only or something... /* for (var i = 0; i < count; i++) packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Rewarded Quest"); */ packet.WriteLine("Packet is currently not printed"); packet.ReadBytes((int)packet.Length); }
public static void HandleLfgJoin(Packet packet) { packet.ReadEnum<LfgRoleFlag>("Roles", TypeCode.Int32); packet.ReadBytes(2); // always 0 var numFields = packet.ReadByte("Join Dungeon Count"); for (var i = 0; i < numFields; i++) packet.ReadLfgEntry("Dungeon Entry", i); packet.ReadUInt32(); // always 0 (for 1..3) 0 packet.ReadCString("Comment"); }
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"); packet.ReadBytes("Check Results", length); break; } case WardenClientOpcode.TransformedSeed: { packet.ReadBytes("SHA1 Seed", 20); break; } } }
public static void ReadUpdateAccountDataBlock(ref Packet packet) { packet.ReadEnum<AccountDataType>("Data Type", TypeCode.Int32); packet.ReadTime("Login Time"); var decompCount = packet.ReadInt32(); packet = packet.Inflate(decompCount); var data = packet.ReadBytes(decompCount); packet.Writer.WriteLine("Account Data: "); foreach (var b in data) packet.Writer.Write((char)b); packet.Writer.WriteLine(); }
public static void HandleAuctionListItems(Packet packet) { packet.ReadInt32("Offset"); packet.ReadPackedGuid128("Auctioneer"); packet.ReadByte("MinLevel"); packet.ReadByte("MaxLevel"); packet.ReadInt32E<ItemQuality>("Quality"); var sort = packet.ReadByte("SortCount"); var knownPetsCount = packet.ReadUInt32("KnownPetsCount"); packet.ReadByte("MaxPetLevel"); for (int i = 0; i < knownPetsCount; ++i) packet.ReadByte("KnownPets", i); var nameLength = packet.ReadBits(8); packet.ReadWoWString("Name", nameLength); var classFiltersCount = packet.ReadBits("ClassFiltersCount", 3); packet.ReadBit("OnlyUsable"); packet.ReadBit("ExactMatch"); packet.ResetBitReader(); for (int i = 0; i < classFiltersCount; ++i) { packet.ReadInt32E<ItemClass>("ItemClass", "ClassFilters", i); var subClassFiltersCount = packet.ReadBits("SubClassFiltersCount", 5, "ClassFilters", i); for (int j = 0; j < subClassFiltersCount; ++j) { packet.ReadInt32("ItemSubclass", "ClassFilters", i, "SubClassFilters", j); packet.ReadUInt32("InvTypeMask", "ClassFilters", i, "SubClassFilters", j); } } var size = packet.ReadInt32("DataSize"); var data = packet.ReadBytes(size); var sorts = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); for (var i = 0; i < sort; ++i) { sorts.ReadByte("Type", i); sorts.ReadByte("Direction", i); } }
public static void HandleServerAddonsList(Packet packet) { var int4 = packet.ReadInt32("AddonInfo"); var int8 = packet.ReadInt32("BannedAddonInfo"); for (var i = 0; i < int4; i++) { packet.ReadByte("Status", i); var bit1 = packet.ReadBit("InfoProvided", i); var bit2 = packet.ReadBit("KeyProvided", i); var bit3 = packet.ReadBit("UrlProvided", i); packet.ResetBitReader(); if (bit3) { var urlLang = packet.ReadBits(8); packet.ReadWoWString("Url", urlLang, i); } if (bit1) { packet.ReadByte("KeyVersion", i); packet.ReadInt32("Revision", i); } if (bit2) packet.ReadBytes("KeyData", 256, i); } for (var i = 0; i < int8; i++) { packet.ReadInt32("Id", i); for (var j = 0; j < 4; j++) { packet.ReadInt32("NameMD5", i, j); packet.ReadInt32("VersionMD5", i, j); } packet.ReadPackedTime("LastModified", i); packet.ReadInt32("Flags", i); } }
public static void HandlePetNameQueryResponse(Packet packet) { packet.ReadInt32("Pet number"); var petName = packet.ReadCString("Pet name"); if (petName == string.Empty) { packet.ReadBytes(7); // 0s return; } packet.ReadTime("Time"); var declined = packet.ReadBoolean("Declined"); if (declined) for (var i = 0; i < (int)MiscConstants.MaxDeclinedNameCases; i++) packet.ReadCString("Declined name", i); }
public static void HandleAuthSession(Packet packet) { var sha = new byte[20]; packet.ReadUInt32("UInt32 1"); packet.ReadUInt32("UInt32 2"); packet.ReadByte("Unk Byte"); sha[10] = packet.ReadByte(); sha[18] = packet.ReadByte(); sha[12] = packet.ReadByte(); sha[5] = packet.ReadByte(); packet.ReadInt64("Int64"); sha[15] = packet.ReadByte(); sha[9] = packet.ReadByte(); sha[19] = packet.ReadByte(); sha[4] = packet.ReadByte(); sha[7] = packet.ReadByte(); sha[16] = packet.ReadByte(); sha[3] = packet.ReadByte(); packet.ReadInt16E<ClientVersionBuild>("Client Build"); sha[8] = packet.ReadByte(); packet.ReadUInt32("UInt32 3"); packet.ReadByte("Unk Byte"); sha[17] = packet.ReadByte(); sha[6] = packet.ReadByte(); sha[0] = packet.ReadByte(); sha[1] = packet.ReadByte(); sha[11] = packet.ReadByte(); packet.ReadUInt32("Client seed"); sha[2] = packet.ReadByte(); packet.ReadUInt32("UInt32 4"); sha[14] = packet.ReadByte(); sha[13] = packet.ReadByte(); var addons = new Packet(packet.ReadBytes(packet.ReadInt32()), packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); CoreParsers.AddonHandler.ReadClientAddonsList(addons); addons.ClosePacket(false); packet.ReadBit("Unk bit"); var size = (int)packet.ReadBits(12); packet.ReadBytesString("Account name", size); packet.AddValue("Proof SHA-1 Hash", Utilities.ByteArrayToHexString(sha)); }
public static void HandleAuthSession(Packet packet) { // Do not overwrite version after Handler was initialized packet.ReadEnum<ClientVersionBuild>("Client Build", TypeCode.Int32); packet.ReadInt32("Unk Int32 1"); packet.ReadCString("Account"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadInt32("Unk Int32 2"); packet.ReadInt32("Client Seed"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192)) packet.ReadInt64("Unk Int64"); packet.WriteLine("Proof SHA-1 Hash: " + Utilities.ByteArrayToHexString(packet.ReadBytes(20))); AddonHandler.ReadClientAddonsList(ref packet); }
public static void HandleVoiceRosterUpdate(Packet packet) { packet.ReadInt64("Voice Channel ID"); packet.ReadInt16("Channel ID"); packet.ReadByte("Channel Type"); // 0: channel, 2: party packet.ReadCString("Channel Name"); var key = Encoding.UTF8.GetString(packet.ReadBytes(16)); packet.Writer.WriteLine("Encryption Key: " + key); packet.ReadUInt32("Voice Server IP"); packet.ReadByte("Voice Server Port"); var count = packet.ReadByte("Player Count"); packet.ReadGuid("Leader GUID"); var leaderFlags1 = packet.ReadByte(); packet.Writer.WriteLine("Leader Flags 1: 0x" + leaderFlags1.ToString("X2")); var leaderFlags2 = packet.ReadByte(); packet.Writer.WriteLine("Leader Flags 2: 0x" + leaderFlags2.ToString("X2")); for (var i = 0; i < count - 1; i++) { packet.ReadGuid("Player GUID"); packet.ReadByte("Index"); var flags1 = packet.ReadByte(); packet.Writer.WriteLine("Flags 1: 0x" + flags1.ToString("X2")); var flags2 = packet.ReadByte(); packet.Writer.WriteLine("Flags 2: 0x" + flags2.ToString("X2")); } }
public static void HandleDBReply434(Packet packet) { var id = packet.ReadInt32("Entry"); var type = packet.ReadUInt32("Type"); packet.ReadTime("Hotfix date"); var size = packet.ReadUInt32("Size"); if (size == 0) return; if (id < 0) return; var itemId = (uint)id; switch (type) { case 0x50238EC2: // Item { var item = Storage.ItemTemplates.ContainsKey(itemId) ? Storage.ItemTemplates[itemId].Item1 : new ItemTemplate(); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); item.Class = packet.ReadEnum<ItemClass>("Class", TypeCode.Int32); item.SubClass = packet.ReadUInt32("Sub Class"); item.SoundOverrideSubclass = packet.ReadInt32("Sound Override Subclass"); item.Material = packet.ReadEnum<Material>("Material", TypeCode.Int32); item.DisplayId = packet.ReadUInt32("Display ID"); item.InventoryType = packet.ReadEnum<InventoryType>("Inventory Type", TypeCode.UInt32); item.SheathType = packet.ReadEnum<SheathType>("Sheath Type", TypeCode.Int32); Storage.ItemTemplates.Add(itemId, item, packet.TimeSpan); break; } case 0x919BE54E: // Item-sparse { var item = Storage.ItemTemplates.ContainsKey(itemId) ? Storage.ItemTemplates[itemId].Item1 : new ItemTemplate(); packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); item.Quality = packet.ReadEnum<ItemQuality>("Quality", TypeCode.Int32); item.Flags = packet.ReadEnum<ItemProtoFlags>("Flags", TypeCode.UInt32); item.ExtraFlags = packet.ReadEnum<ItemFlagExtra>("Extra Flags", TypeCode.Int32); item.Unk430_1 = packet.ReadSingle("Unk430_1"); item.Unk430_2 = packet.ReadSingle("Unk430_2"); item.BuyCount = packet.ReadUInt32("Buy count"); item.BuyPrice = packet.ReadUInt32("Buy Price"); item.SellPrice = packet.ReadUInt32("Sell Price"); item.InventoryType = packet.ReadEnum<InventoryType>("Inventory Type", TypeCode.Int32); item.AllowedClasses = packet.ReadEnum<ClassMask>("Allowed Classes", TypeCode.Int32); item.AllowedRaces = packet.ReadEnum<RaceMask>("Allowed Races", TypeCode.Int32); item.ItemLevel = packet.ReadUInt32("Item Level"); item.RequiredLevel = packet.ReadUInt32("Required Level"); item.RequiredSkillId = packet.ReadUInt32("Required Skill ID"); item.RequiredSkillLevel = packet.ReadUInt32("Required Skill Level"); item.RequiredSpell = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Required Spell"); item.RequiredHonorRank = packet.ReadUInt32("Required Honor Rank"); item.RequiredCityRank = packet.ReadUInt32("Required City Rank"); item.RequiredRepFaction = packet.ReadUInt32("Required Rep Faction"); item.RequiredRepValue = packet.ReadUInt32("Required Rep Value"); item.MaxCount = packet.ReadInt32("Max Count"); item.MaxStackSize = packet.ReadInt32("Max Stack Size"); item.ContainerSlots = packet.ReadUInt32("Container Slots"); item.StatTypes = new ItemModType[10]; for (var i = 0; i < 10; i++) { var statType = packet.ReadEnum<ItemModType>("Stat Type", TypeCode.Int32, i); item.StatTypes[i] = statType == ItemModType.None ? ItemModType.Mana : statType; // TDB } item.StatValues = new int[10]; for (var i = 0; i < 10; i++) item.StatValues[i] = packet.ReadInt32("Stat Value", i); item.StatUnk1 = new int[10]; for (var i = 0; i < 10; i++) item.StatUnk1[i] = packet.ReadInt32("Unk UInt32 1", i); item.StatUnk2 = new int[10]; for (var i = 0; i < 10; i++) item.StatUnk2[i] = packet.ReadInt32("Unk UInt32 2", i); item.ScalingStatDistribution = packet.ReadInt32("Scaling Stat Distribution"); item.DamageType = packet.ReadEnum<DamageType>("Damage Type", TypeCode.Int32); item.Delay = packet.ReadUInt32("Delay"); item.RangedMod = packet.ReadSingle("Ranged Mod"); item.TriggeredSpellIds = new int[5]; for (var i = 0; i < 5; i++) item.TriggeredSpellIds[i] = packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Triggered Spell ID", i); item.TriggeredSpellTypes = new ItemSpellTriggerType[5]; for (var i = 0; i < 5; i++) item.TriggeredSpellTypes[i] = packet.ReadEnum<ItemSpellTriggerType>("Trigger Spell Type", TypeCode.Int32, i); item.TriggeredSpellCharges = new int[5]; for (var i = 0; i < 5; i++) item.TriggeredSpellCharges[i] = packet.ReadInt32("Triggered Spell Charges", i); item.TriggeredSpellCooldowns = new int[5]; for (var i = 0; i < 5; i++) item.TriggeredSpellCooldowns[i] = packet.ReadInt32("Triggered Spell Cooldown", i); item.TriggeredSpellCategories = new uint[5]; for (var i = 0; i < 5; i++) item.TriggeredSpellCategories[i] = packet.ReadUInt32("Triggered Spell Category", i); item.TriggeredSpellCategoryCooldowns = new int[5]; for (var i = 0; i < 5; i++) item.TriggeredSpellCategoryCooldowns[i] = packet.ReadInt32("Triggered Spell Category Cooldown", i); item.Bonding = packet.ReadEnum<ItemBonding>("Bonding", TypeCode.Int32); if (packet.ReadUInt16() > 0) item.Name = packet.ReadCString("Name", 0); for (var i = 1; i < 4; ++i) if (packet.ReadUInt16() > 0) packet.ReadCString("Name", i); if (packet.ReadUInt16() > 0) item.Description = packet.ReadCString("Description"); item.PageText = packet.ReadUInt32("Page Text"); item.Language = packet.ReadEnum<Language>("Language", TypeCode.Int32); item.PageMaterial = packet.ReadEnum<PageMaterial>("Page Material", TypeCode.Int32); item.StartQuestId = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Start Quest"); item.LockId = packet.ReadUInt32("Lock ID"); item.Material = packet.ReadEnum<Material>("Material", TypeCode.Int32); item.SheathType = packet.ReadEnum<SheathType>("Sheath Type", TypeCode.Int32); item.RandomPropery = packet.ReadInt32("Random Property"); item.RandomSuffix = packet.ReadUInt32("Random Suffix"); item.ItemSet = packet.ReadUInt32("Item Set"); item.AreaId = (uint)packet.ReadEntryWithName<UInt32>(StoreNameType.Area, "Area"); // In this single (?) case, map 0 means no map var map = packet.ReadInt32(); item.MapId = map; packet.WriteLine("Map ID: " + (map != 0 ? StoreGetters.GetName(StoreNameType.Map, map) : map + " (No map)")); item.BagFamily = packet.ReadEnum<BagFamilyMask>("Bag Family", TypeCode.Int32); item.TotemCategory = packet.ReadEnum<TotemCategory>("Totem Category", TypeCode.Int32); item.ItemSocketColors = new ItemSocketColor[3]; for (var i = 0; i < 3; i++) item.ItemSocketColors[i] = packet.ReadEnum<ItemSocketColor>("Socket Color", TypeCode.Int32, i); item.SocketContent = new uint[3]; for (var i = 0; i < 3; i++) item.SocketContent[i] = packet.ReadUInt32("Socket Item", i); item.SocketBonus = packet.ReadInt32("Socket Bonus"); item.GemProperties = packet.ReadInt32("Gem Properties"); item.ArmorDamageModifier = packet.ReadSingle("Armor Damage Modifier"); item.Duration = packet.ReadUInt32("Duration"); item.ItemLimitCategory = packet.ReadInt32("Limit Category"); item.HolidayId = packet.ReadEnum<Holiday>("Holiday", TypeCode.Int32); item.StatScalingFactor = packet.ReadSingle("Stat Scaling Factor"); item.CurrencySubstitutionId = packet.ReadUInt32("Currency Substitution Id"); item.CurrencySubstitutionCount = packet.ReadUInt32("Currency Substitution Count"); Storage.ObjectNames.Add(itemId, new ObjectName { ObjectType = ObjectType.Item, Name = item.Name }, packet.TimeSpan); break; } case 0x6D8A2694: // KeyChain { packet.ReadUInt32("Key Chain Id"); packet.WriteLine("Key: {0}", Utilities.ByteArrayToHexString(packet.ReadBytes(32))); break; } } packet.AddSniffData(StoreNameType.Item, (int)itemId, "DB_REPLY"); }
public static void HandleUseItem2(Packet packet) { packet.ReadSByte("Bag"); packet.ReadByte("Slot"); packet.ReadByte("Cast Count"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); packet.ReadGuid("GUID"); packet.ReadUInt32("Glyph Index"); var castflag = packet.ReadEnum<CastFlag>("Cast Flags", TypeCode.Byte); SpellHandler.ReadSpellCastTargets(ref packet); if (!castflag.HasAnyFlag(CastFlag.HasTrajectory)) return; packet.ReadSingle("Elevation"); packet.ReadSingle("Missile speed"); // Boolean if it will send MSG_MOVE_STOP if (!packet.ReadBoolean()) return; var opcode = packet.ReadInt32(); var remainingLength = packet.Length - packet.Position; var bytes = packet.ReadBytes((int)remainingLength); using (var newpacket = new Packet(bytes, opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName)) Handler.Parse(newpacket, true); }
public static void HandleUpdateMissileTrajectory(Packet packet) { packet.ReadGuid("GUID"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Spell ID"); packet.ReadSingle("Elevation"); packet.ReadSingle("Missile speed"); packet.ReadVector3("Current Position"); packet.ReadVector3("Targeted Position"); // Boolean if it will send MSG_MOVE_STOP if (!packet.ReadBoolean()) return; var opcode = packet.ReadInt32(); // None length is recieved, so we have to calculate the remaining bytes. var remainingLength = packet.Length - packet.Position; var bytes = packet.ReadBytes((int)remainingLength); using (var newpacket = new Packet(bytes, opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName)) Handler.Parse(newpacket, true); }
public static void HandleNpcTextUpdate(Packet packet) { var npcText = new NpcTextMop(); var size = packet.ReadInt32("Size"); var data = packet.ReadBytes(size); var pkt = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); npcText.Probabilities = new float[8]; npcText.BroadcastTextId = new uint[8]; for (var i = 0; i < 8; ++i) npcText.Probabilities[i] = pkt.ReadSingle("Probability", i); for (var i = 0; i < 8; ++i) npcText.BroadcastTextId[i] = pkt.ReadUInt32("Broadcast Text Id", i); pkt.ClosePacket(false); var entry = packet.ReadEntry("Entry"); if (entry.Value) // Can be masked return; var hasData = packet.ReadBit(); if (!hasData) return; // nothing to do packet.AddSniffData(StoreNameType.NpcText, entry.Key, "QUERY_RESPONSE"); Storage.NpcTextsMop.Add((uint)entry.Key, npcText, packet.TimeSpan); }