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 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 HandleArenaTeamCommandResult(Packet packet) { packet.ReadUInt32("Action"); // FIXME: Use enum packet.ReadCString("Team Name"); packet.ReadCString("Player Name"); packet.ReadUInt32("ErrorId"); // FIXME: Use enum }
public static void HandleAvailableVoiceChannel(Packet packet) { packet.ReadInt64("Unk Int64 1"); packet.ReadByte("Channel Type"); packet.ReadCString("Channel Name"); packet.ReadInt64("Unk Int64 2"); }
public static void HandleFriendStatus(Packet packet) { var result = packet.ReadByteE<ContactResult>("Result"); packet.ReadGuid("GUID"); switch (result) { case ContactResult.FriendAddedOffline: packet.ReadCString("Note"); break; case ContactResult.FriendAddedOnline: { packet.ReadCString("Note"); ReadSingleContactBlock(packet, false); break; } case ContactResult.Online: ReadSingleContactBlock(packet, false); break; case ContactResult.Unknown2: packet.ReadByte("Unk byte 1"); break; case ContactResult.Unknown3: packet.ReadInt32("Unk int"); break; } }
public static void HandleGroupInvite422(Packet packet) { // note: this handler is different in 4.3.0, it got a bit fancy. var guidBytes = new byte[8]; guidBytes[6] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[5] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[0] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[3] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[4] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[7] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[1] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[2] = (byte)(packet.ReadBit() ? 1 : 0); packet.ReadInt32("Unk0"); // Always 0 packet.ReadInt32("Unk1"); // Non-zero in cross realm parties (1383) packet.ReadCString("Name"); if (guidBytes[0] != 0) guidBytes[0] ^= packet.ReadByte(); if (guidBytes[7] != 0) guidBytes[7] ^= packet.ReadByte(); if (guidBytes[4] != 0) guidBytes[4] ^= packet.ReadByte(); if (guidBytes[1] != 0) guidBytes[1] ^= packet.ReadByte(); if (guidBytes[2] != 0) guidBytes[2] ^= packet.ReadByte(); if (guidBytes[6] != 0) guidBytes[6] ^= packet.ReadByte(); if (guidBytes[5] != 0) guidBytes[5] ^= packet.ReadByte(); packet.ReadCString("Realm Name"); // Non-empty in cross realm parties if (guidBytes[3] != 0) guidBytes[3] ^= packet.ReadByte(); // Non-zero in cross realm parties packet.WriteLine("GUID: {0}", new Guid(BitConverter.ToUInt64(guidBytes, 0))); }
public static void HandleGMResponseReceived(Packet packet) { packet.ReadUInt32("Unk 1"); packet.ReadUInt32("Unk 2"); packet.ReadCString("Text"); for (var i = 1; i <= 4; i++) packet.ReadCString("Response", i); }
public static void HandleBug(Packet packet) { packet.ReadUInt32("Suggestion"); packet.ReadUInt32("Content Lenght"); packet.ReadCString("Content"); packet.ReadUInt32("Text Lenght"); packet.ReadCString("Text"); }
public static void HandleGMResponseReceived(Packet packet) { packet.ReadUInt32("Response ID"); packet.ReadUInt32("Ticket ID"); packet.ReadCString("Description"); for (var i = 1; i <= 4; i++) packet.ReadCString("Response", i); }
public static void HandleNpcGossip(Packet packet) { GossipMenu gossip = new GossipMenu(); WowGuid guid = packet.ReadGuid("GUID"); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); uint menuId = packet.ReadUInt32("Menu Id"); gossip.Entry = menuId; if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria)) packet.ReadUInt32("Friendship Faction"); gossip.TextID = packet.ReadUInt32("Text Id"); uint count = packet.ReadUInt32("Amount of Options"); for (int i = 0; i < count; i++) { GossipMenuOption gossipOption = new GossipMenuOption { MenuID = menuId, ID = packet.ReadUInt32("Index", i), OptionIcon = packet.ReadByteE<GossipOptionIcon>("Icon", i), BoxCoded = packet.ReadBool("Box", i), BoxMoney = packet.ReadUInt32("Required money", i), OptionText = packet.ReadCString("Text", i), BoxText = packet.ReadCString("Box Text", i) }; Storage.GossipMenuOptions.Add(gossipOption, packet.TimeSpan); } uint questgossips = packet.ReadUInt32("Amount of Quest gossips"); for (int i = 0; i < questgossips; i++) { packet.ReadUInt32<QuestId>("Quest ID", i); packet.ReadUInt32("Icon", i); packet.ReadInt32("Level", i); packet.ReadUInt32E<QuestFlags>("Flags", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_1_0_16309)) packet.ReadUInt32E<QuestFlags2>("Flags 2", i); packet.ReadBool("Change Icon", i); packet.ReadCString("Title", i); } if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit)Storage.Objects[guid].Item1).GossipId = menuId; Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); }
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 ReadSetInfo(Packet packet) { packet.ReadPackedGuid("Set ID"); packet.ReadInt32("Index"); packet.ReadCString("Set Name"); packet.ReadCString("Set Icon"); for (var j = 0; j < NumSlots; j++) packet.ReadPackedGuid("Item GUID " + j); }
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("Friendship Faction"); 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); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_1_0_16309)) packet.ReadEnum<QuestFlags2>("Flags 2", TypeCode.UInt32, i); packet.ReadBoolean("Change Icon", i); packet.ReadCString("Title", i); } }
public static void HandleGameObjectQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); if (entry.Value) // entry is masked return; GameObjectTemplate gameObject = new GameObjectTemplate { Entry = (uint)entry.Key }; int unk1 = packet.ReadInt32("Unk1 UInt32"); if (unk1 == 0) { packet.ReadByte("Unk1 Byte"); return; } gameObject.Type = packet.ReadInt32E<GameObjectType>("Type"); gameObject.DisplayID = packet.ReadUInt32("Display ID"); var name = new string[4]; for (int 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 (int 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 (int i = 0; i < gameObject.QuestItems.Length; i++) gameObject.QuestItems[i] = (uint)packet.ReadInt32<ItemId>("Quest Item", i); packet.ReadUInt32E<ClientType>("Expansion"); packet.ReadByte("Unk1 Byte"); Storage.GameObjectTemplates.Add(gameObject, packet.TimeSpan); ObjectName objectName = new ObjectName { ObjectType = ObjectType.GameObject, ID = entry.Key, Name = gameObject.Name }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }
public static void HandleGMSurveySubmit(Packet packet) { var count = packet.ReadUInt32("Survey Question Count"); for (var i = 0; i < count; ++i) { var gmsurveyid = packet.ReadUInt32("GM Survey Id", i); if (gmsurveyid == 0) break; packet.ReadByte("Question Number", i); packet.ReadCString("Answer", i); } packet.ReadCString("Comment"); }
public static void HandleGMResponseReceived(Packet packet) { packet.ReadUInt32("Unk 1"); packet.ReadUInt32("Unk 2"); packet.ReadCString("Text"); for (var i = 1; i <= 4; i++) // Last 3 strings are usually empty { packet.ReadCString("Response " + 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 HandleGameObjectQueryResponse(Packet packet) { var gameObject = new GameObjectTemplate(); var entry = packet.ReadEntry("Entry"); if (entry.Value) // entry is masked return; packet.ReadBit("Allow"); var dataSize = packet.ReadInt32("DataSize"); if (dataSize == 0) return; gameObject.Type = packet.ReadInt32E<GameObjectType>("Type"); 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[33]; 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[6]; var length = packet.ReadByte("QuestItems Length"); for (var i = 0; i < length; i++) gameObject.QuestItems[i] = (uint)packet.ReadInt32<ItemId>("Quest Item", i); packet.ReadUInt32E<ClientType>("Expansion"); 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 HandleNpcGossip(Packet packet) { var guid = packet.ReadGuid("GUID"); var menuid = packet.ReadUInt32("Menu id"); var textid = packet.ReadUInt32("Text id"); GossipMenu gossip = new GossipMenu { MenuId = menuid, GossipOptions = new List<GossipOption>(), NpcTextId = textid }; gossip = Stuffing.Gossips.GetOrAdd(Tuple.Create<uint,uint>(guid.GetEntry(),menuid), gossip); var count = packet.ReadUInt32("Amount of Options"); for (var i = 0; i < count; i++) { GossipOption opt = new GossipOption { Index = packet.ReadUInt32("Index", i), OptionIcon = packet.ReadByte("Icon", 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(opt); } Stuffing.Gossips.AddOrUpdate(Tuple.Create<uint,uint>(guid.GetEntry(),menuid), gossip, (a,b) => { b.GossipOptions = gossip.GossipOptions; b.NpcTextId = gossip.NpcTextId; return b; }); 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 entry = packet.ReadEntry("Entry"); if (entry.Value) // entry is masked return; GameObjectTemplate gameObject = new GameObjectTemplate { Entry = (uint)entry.Key, Type = packet.ReadInt32E<GameObjectType>("Type"), DisplayID = packet.ReadUInt32("Display ID") }; var name = new string[4]; for (int 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?[ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_6_13596) ? 32 : 24]; for (int i = 0; i < gameObject.Data.Length; i++) gameObject.Data[i] = packet.ReadInt32("Data", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) // not sure when it was added exactly - did not exist in 2.4.1 sniff gameObject.Size = packet.ReadSingle("Size"); gameObject.QuestItems = new uint?[ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192) ? 6 : 4]; if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) for (int i = 0; i < gameObject.QuestItems.Length; i++) gameObject.QuestItems[i] = (uint)packet.ReadInt32<ItemId>("Quest Item", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_6_13596)) gameObject.RequiredLevel = packet.ReadInt32("RequiredLevel"); packet.AddSniffData(StoreNameType.GameObject, entry.Key, "QUERY_RESPONSE"); Storage.GameObjectTemplates.Add(gameObject, packet.TimeSpan); ObjectName objectName = new ObjectName { ObjectType = ObjectType.GameObject, ID = entry.Key, Name = gameObject.Name }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }
public static void HandleArenaTeamRoster(Packet packet) { packet.ReadUInt32("Team Id"); var unk = packet.ReadByte("Unk Byte"); var count = packet.ReadUInt32("Member count"); packet.ReadUInt32("Type"); for (var i = 0; i < count; i++) { packet.ReadGuid("[" + i + "] GUID"); packet.ReadBoolean("[" + i + "] Online"); packet.ReadCString("[" + i + "] Name"); packet.ReadUInt32("[" + i + "] Captain"); packet.ReadByte("[" + i + "] Level"); packet.ReadByte("[" + i + "] Class"); packet.ReadUInt32("[" + i + "] Week Games"); packet.ReadUInt32("[" + i + "] Week Win"); packet.ReadUInt32("[" + i + "] Seasonal Games"); packet.ReadUInt32("[" + i + "] Seasonal Wins"); packet.ReadUInt32("[" + i + "] Personal Rating"); if (unk > 0) { packet.ReadSingle("[" + i + "] Unk float 1"); packet.ReadSingle("[" + i + "] Unk float 2"); } } }
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.ReadUInt32("Client Seed"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_5a_12340)) { // Some numbers about selected realm packet.ReadInt32("Unk Int32 3"); packet.ReadInt32("Unk Int32 4"); packet.ReadInt32("Unk Int32 5"); } 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 HandleAvailableVoiceChannel(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadByte("Channel Type"); packet.ReadCString("Channel Name"); packet.ReadGuid("Player GUID"); }
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 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.ReadInt32E<ContactListFlag>("List Flags"); 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.ReadInt32E<ContactEntryFlag>("Flags"); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadByteE<ContactStatus>("Status"); if (status == 0) // required any flag continue; packet.ReadInt32<AreaId>("Area"); packet.ReadInt32("Level"); packet.ReadInt32E<Class>("Class"); } // still needed? if (packet.CanRead()) CoreParsers.WardenHandler.ReadCheatCheckDecryptionBlock(packet); }
public static void HandleServerFirstAchievement(Packet packet) { packet.ReadCString("Player Name"); packet.ReadGuid("Player GUID"); packet.ReadInt32("Achievement"); packet.ReadInt32("Linked Name"); }
public static void HandleArenaTeamRoster(Packet packet) { packet.ReadUInt32("Team Id"); var unk = packet.ReadByte("Unk Byte"); var count = packet.ReadUInt32("Member count"); packet.ReadUInt32("Type"); for (var i = 0; i < count; i++) { packet.ReadGuid(" GUID", i); packet.ReadBoolean("Online", i); packet.ReadCString("Name", i); packet.ReadUInt32("Captain", i); packet.ReadByte("Level", i); packet.ReadByte("Class", i); packet.ReadUInt32("Week Games", i); packet.ReadUInt32("Week Win", i); packet.ReadUInt32("Seasonal Games", i); packet.ReadUInt32("Seasonal Wins", i); packet.ReadUInt32("Personal Rating", i); if (unk > 0) { packet.ReadSingle("Unk float 1", i); packet.ReadSingle("Unk float 2", i); } } }
public static void HandleContactList(Packet packet) { packet.ReadInt32E<ContactListFlag>("List Flags"); 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.ReadInt32E<ContactEntryFlag>("Flags"); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; var status = packet.ReadByteE<ContactStatus>("Status"); if (status == 0) // required any flag continue; packet.ReadInt32<AreaId>("Area"); packet.ReadInt32("Level"); packet.ReadInt32E<Class>("Class"); } }
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")); } }