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 HandleAttackerStateUpdate(Packet packet) { var hitInfo = packet.ReadInt32E<SpellHitInfo>("HitInfo"); 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); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_3_9183)) packet.ReadByteE<VictimStates>("VictimState"); else packet.ReadInt32E<VictimStates>("VictimState"); packet.ReadInt32("Unk Attacker State 0"); packet.ReadInt32<SpellId>("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 1"); packet.ReadSingle("Unk Attacker State 3 2"); packet.ReadSingle("Unk Attacker State 3 3"); packet.ReadSingle("Unk Attacker State 3 4"); packet.ReadSingle("Unk Attacker State 3 5"); packet.ReadSingle("Unk Attacker State 3 6"); packet.ReadSingle("Unk Attacker State 3 7"); packet.ReadSingle("Unk Attacker State 3 8"); packet.ReadSingle("Unk Attacker State 3 9"); packet.ReadSingle("Unk Attacker State 3 10"); packet.ReadSingle("Unk Attacker State 3 11"); packet.ReadInt32("Unk Attacker State 3 12"); packet.ReadInt32("Unk Attacker State 3 13"); packet.ReadInt32("Unk Attacker State 3 14"); } }
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 HandleComplain(Packet packet) { bool fromChat = packet.ReadBool("From Chat"); // false = from mail packet.ReadGuid("Guid"); packet.ReadInt32E<Language>("Language"); packet.ReadInt32E<ChatMessageType>("Type"); packet.ReadInt32("Channel ID"); if (fromChat) { packet.ReadTime("Time ago"); packet.ReadCString("Complain"); } }
public static void HandleInstanceDifficulty(Packet packet) { packet.ReadInt32E<MapDifficulty>("Difficulty"); if (ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing) && ClientVersion.RemovedInVersion(ClientType.Cataclysm)) packet.ReadInt32("Player Difficulty"); }
public static void HandleLootMethod(Packet packet) { packet.ReadByte("PartyIndex"); packet.ReadByteE<LootMethod>("Method"); packet.ReadPackedGuid128("Master"); packet.ReadInt32E<ItemQuality>("Threshold"); }
public static void HandleAddCalendarEvent(Packet packet) { packet.ReadCString("Title"); packet.ReadCString("Description"); packet.ReadByteE<CalendarEventType>("Event Type"); packet.ReadByteE<CalendarRepeatType>("Repeat Type"); packet.ReadInt32("Max Invites"); packet.ReadInt32<LFGDungeonId>("Dungeon ID"); packet.ReadPackedTime("Event Time"); packet.ReadPackedTime("Unk PackedTime"); var flags = packet.ReadInt32E<CalendarFlag>("Event Flags"); if ((flags & CalendarFlag.GuildAnnouncement) != 0) return; var count = packet.ReadInt32("Invite Count"); for (var i = 0; i < count; i++) { packet.ReadPackedGuid("Creator GUID"); packet.ReadByteE<CalendarEventStatus>("Status"); packet.ReadByteE<CalendarModerationRank>("Moderation Rank"); } }
public static void HandleCalendarEventInviteAlert(Packet packet) { // TODO: find unks packet.ReadUInt64("EventID"); packet.ReadPackedTime("Date"); packet.ReadInt32E<CalendarFlag>("Flags"); packet.ReadByteE<CalendarEventType>("EventType"); packet.ReadInt32("TextureID"); packet.ReadPackedGuid128("EventGuildID"); packet.ReadUInt64("InviteID"); packet.ReadByteE<CalendarEventStatus>("Status"); packet.ReadByteE<CalendarModerationRank>("ModeratorStatus"); packet.ReadPackedGuid128("OwnerGUID | InvitedByGUID"); packet.ReadPackedGuid128("OwnerGUID | InvitedByGUID"); var eventNameLength = packet.ReadBits("EventNameLength", 8); packet.ResetBitReader(); packet.ReadWoWString("EventName", eventNameLength); }
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.ReadInt32E<CalendarError>("Error"); }
public static void HandleContactList(Packet packet) { packet.ReadInt32E<ContactListFlag>("List Flags"); var bits6 = packet.ReadBits("ContactInfoCount", 8); for (var i = 0; i < bits6; i++) { packet.ReadPackedGuid128("Guid", i); packet.ReadPackedGuid128("WowAccount", i); packet.ReadInt32("VirtualRealmAddr", i); packet.ReadInt32("NativeRealmAddr", i); packet.ReadInt32("TypeFlags", i); packet.ReadByte("Status", i); packet.ReadInt32("AreaID", i); packet.ReadInt32("Level", i); packet.ReadInt32("ClassID", i); packet.ResetBitReader(); var bits44 = packet.ReadBits(10); packet.ReadWoWString("Notes", bits44, i); } }
public static void HandleClientChatMessageChannel434(Packet packet) { packet.ReadInt32E<Language>("Language"); var channelNameLen = packet.ReadBits(9); var msgLen = packet.ReadBits(8); packet.ReadWoWString("Message", msgLen); packet.ReadWoWString("Channel Name", channelNameLen); }
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 HandleAIReaction(Packet packet) { var guid = packet.StartBitStream(5, 7, 0, 4, 6, 2, 3, 1); packet.ParseBitStream(guid, 4, 6, 5); packet.ReadInt32E<AIReaction>("Reaction"); packet.ParseBitStream(guid, 7, 1, 2, 0, 3); packet.WriteGuid("Guid", guid); }
public static void HandleHotfixNotify(Packet packet) { var tableHash = packet.ReadInt32E<DB2Hash>("TableHash"); var recordID = packet.ReadInt32("RecordID"); var timestamp = packet.ReadUInt32("Timestamp"); Storage.AddHotfixData(recordID, tableHash, false, timestamp); }
public static void HandleClientChatMessageWhisper(Packet packet) { packet.ReadInt32E<Language>("Language"); var msgLen = packet.ReadBits(8); var recvName = packet.ReadBits(9); packet.ReadWoWString("Message", msgLen); packet.ReadWoWString("Receivers Name", recvName); }
public static void HandleCalendarEventInviteAlert(Packet packet) { packet.ReadInt64("Event ID"); packet.ReadCString("Title"); packet.ReadPackedTime("Time"); packet.ReadInt32E<CalendarFlag>("Event Flags"); packet.ReadInt32E<CalendarEventType>("Type"); packet.ReadInt32<LFGDungeonId>("Dungeon ID"); packet.ReadInt64("Invite ID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_3_0a_15050)) { packet.ReadGuid("Guild GUID"); } packet.ReadByteE<CalendarEventStatus>("Status"); packet.ReadByteE<CalendarModerationRank>("Moderation Rank"); packet.ReadPackedGuid("Creator GUID"); packet.ReadPackedGuid("Sender GUID"); }
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 ReadUpdateAccountDataBlock(Packet packet) { packet.ReadInt32E<AccountDataType>("Data Type"); packet.ReadTime("Login Time"); var decompCount = packet.ReadInt32(); var pkt = packet.Inflate(decompCount, false); pkt.ReadWoWString("Account Data", decompCount); pkt.ClosePacket(false); }
public static void HandleLfgJoin(Packet packet) { packet.ReadInt32E<LfgRoleFlag>("Roles"); 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 HandleHotfixInfo(Packet packet) { var count = packet.ReadBits("Count", 20); for (var i = 0; i < count; ++i) { packet.ReadInt32E<DB2Hash>("Hotfix DB2 File", i); packet.ReadTime("Hotfix date", i); packet.ReadInt32("Hotfixed entry", i); } }
public static void ReadSingleContactBlock(Packet packet, bool onlineCheck) { var status = packet.ReadByteE<ContactStatus>("Status"); if (onlineCheck && status == ContactStatus.Offline) return; packet.ReadInt32<AreaId>("Area"); packet.ReadInt32("Level"); packet.ReadInt32E<Class>("Class"); }
public static void HandleDbQueryBulk(Packet packet) { packet.ReadInt32E<DB2Hash>("DB2 File"); var count = ClientVersion.AddedInVersion(ClientVersionBuild.V6_0_3_19103) ? packet.ReadBits("Count", 13) : packet.ReadUInt32("Count"); for (var i = 0; i < count; ++i) { packet.ReadPackedGuid128("Guid", i); packet.ReadInt32("Entry", i); } }
public static void HandleClientChatMessage(Packet packet) { var type = packet.ReadInt32E<ChatMessageType>("Type"); packet.ReadInt32E<Language>("Language"); switch (type) { case ChatMessageType.Whisper: { packet.ReadCString("Recipient"); break; } case ChatMessageType.Channel: { packet.ReadCString("Channel"); break; } } packet.ReadCString("Message"); }
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"); var flag = packet.ReadInt32E<ContactEntryFlag>("Flags"); packet.ReadCString("Note"); if (!flag.HasAnyFlag(ContactEntryFlag.Friend)) continue; ReadSingleContactBlock(packet, true); } if (packet.CanRead()) WardenHandler.ReadCheatCheckDecryptionBlock(packet); }
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 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 HandleWeatherStatus(Packet packet) { var unk = packet.ReadBit("Unk Bit"); // Type var grade = packet.ReadSingle("Grade"); var state = packet.ReadInt32E<WeatherState>("State"); Storage.WeatherUpdates.Add(new WeatherUpdate { MapId = CoreParsers.MovementHandler.CurrentMapId, ZoneId = 0, // fixme State = state, Grade = grade, Unk = unk }, packet.TimeSpan); }
public static void HandleGossipPoi(Packet packet) { PointsOfInterest gossipPOI = new PointsOfInterest(); gossipPOI.ID = ++LastGossipPOIEntry; gossipPOI.Flags = (uint)packet.ReadInt32E<UnknownFlags>("Flags"); var pos = packet.ReadVector2("Coordinates"); gossipPOI.Icon = packet.ReadUInt32E<GossipPOIIcon>("Icon"); gossipPOI.Importance = packet.ReadUInt32("Importance"); gossipPOI.Name = packet.ReadCString("Icon Name"); gossipPOI.PositionX = pos.X; gossipPOI.PositionY = pos.Y; Storage.GossipPOIs.Add(gossipPOI, packet.TimeSpan); }
public static void HandleAIReaction(Packet packet) { var guid = new byte[8]; packet.StartBitStream(guid, 5, 7, 0, 4, 6, 2, 3, 1); packet.ReadXORByte(guid, 4); packet.ReadXORByte(guid, 6); packet.ReadXORByte(guid, 5); packet.ReadInt32E<AIReaction>("Reaction"); packet.ReadXORByte(guid, 7); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 2); packet.ReadXORByte(guid, 0); packet.ReadXORByte(guid, 3); packet.WriteGuid("Guid", guid); }
public static void HandleFeatureSystemStatusGlueScreen(Packet packet) { packet.ReadBit("BpayStoreEnabled"); packet.ReadBit("BpayStoreAvailable"); packet.ReadBit("BpayStoreDisabledByParentalControls"); packet.ReadBit("CharUndeleteEnabled"); packet.ReadBit("CommerceSystemEnabled"); packet.ReadBit("Unk14"); packet.ReadBit("WillKickFromWorld"); packet.ReadBit("IsExpansionPreorderInStore"); packet.ReadBit("KioskModeEnabled"); packet.ReadBit("NoHandler"); // not accessed in handler packet.ReadBit("TrialBoostEnabled"); packet.ReadInt32("TokenPollTimeSeconds"); packet.ReadInt32E<ConsumableTokenRedeem>("TokenRedeemIndex"); }