public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); // +5 var creature = new UnitTemplate(); var hasData = packet.ReadBit(); //+16 if (!hasData) return; // nothing to do creature.DisplayIds = new uint[4]; creature.KillCredits = new uint[2]; var bits24 = packet.ReadBits(11); //+7 var qItemCount = packet.ReadBits(22); //+72 var bits1C = (int)packet.ReadBits(11); //+9 var stringLens = new int[4][]; for (var i = 0; i < 4; i++) { stringLens[i] = new int[2]; stringLens[i][0] = (int)packet.ReadBits(11); stringLens[i][1] = (int)packet.ReadBits(11); } creature.RacialLeader = packet.ReadBit("Racial Leader"); //+68 var bits2C = packet.ReadBits(6); //+136 if (bits1C > 1) packet.ReadCString("String1C"); creature.KillCredits[0] = packet.ReadUInt32(); //+27 creature.DisplayIds[3] = packet.ReadUInt32(); //+32 creature.DisplayIds[2] = packet.ReadUInt32(); //+31 creature.Expansion = packet.ReadEnum<ClientType>("Expansion", TypeCode.UInt32); //+24 creature.Type = packet.ReadEnum<CreatureType>("Type", TypeCode.Int32); //+12 creature.Modifier1 = packet.ReadSingle("Modifier 1"); //+15 //for (var i = 0; i < 2; ++i) //{ creature.TypeFlags = packet.ReadEnum<CreatureTypeFlag>("Type Flags", TypeCode.UInt32); creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum //} creature.Rank = packet.ReadEnum<CreatureRank>("Rank", TypeCode.Int32); //+14 creature.MovementId = packet.ReadUInt32("Movement ID"); //+23 var name = new string[4]; var femaleName = new string[4]; for (var i = 0; i < 4; ++i) { if (stringLens[i][1] > 1) femaleName[i] = packet.ReadCString("Female Name", i); if (stringLens[i][0] > 1) name[i] = packet.ReadCString("Name", i); } creature.Name = name[0]; creature.femaleName = femaleName[0]; if (bits24 > 1) creature.SubName = packet.ReadCString("Sub Name"); creature.DisplayIds[0] = packet.ReadUInt32(); //+29 creature.DisplayIds[1] = packet.ReadUInt32(); //+30 if (bits2C > 1) creature.IconName = packet.ReadCString("Icon Name"); //+100 creature.QuestItems = new uint[qItemCount]; for (var i = 0; i < qItemCount; ++i) creature.QuestItems[i] = (uint)packet.ReadEntry<Int32>(StoreNameType.Item, "Quest Item", i); //+72 creature.KillCredits[1] = packet.ReadUInt32(); //+28 creature.Modifier2 = packet.ReadSingle("Modifier 2"); //+16 creature.Family = packet.ReadEnum<CreatureFamily>("Family", TypeCode.Int32); //+13 for (var i = 0; i < 4; ++i) packet.AddValue("Display ID", creature.DisplayIds[i], i); for (var i = 0; i < 2; ++i) packet.AddValue("Kill Credit", creature.KillCredits[i], i); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.UnitTemplates.Add((uint)entry.Key, creature, packet.TimeSpan); var objectName = new ObjectName { ObjectType = ObjectType.Unit, Name = creature.Name, }; Storage.ObjectNames.Add((uint)entry.Key, objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); var hasData = packet.ReadBit("hasData"); if (!hasData) return; // nothing to do var creature = new UnitTemplate(); creature.RacialLeader = packet.ReadBit("Racial Leader"); uint lengthIconName = packet.ReadBits(6) ^ 1; var lengthName = new int[4][]; for (var i = 0; i < 4; i++) { lengthName[i] = new int[2]; lengthName[i][0] = (int)packet.ReadBits("Name length female", 11); lengthName[i][1] = (int)packet.ReadBits("Name length male", 11); } uint qItemCount = packet.ReadBits("itemCount", 22); uint lengthSubname = packet.ReadBits("Subname length", 11); packet.ReadBits(11); // Unk String length. Needs reading somewhere? creature.Modifier1 = packet.ReadSingle("Modifier Mana"); var name = new string[8]; for (var i = 0; i < 4; ++i) { if (lengthName[i][1] > 1) packet.ReadCString("Male Name", i); if (lengthName[i][0] > 1) name[i] = packet.ReadCString("Female name", i); } creature.Name = name[0]; creature.Modifier2 = packet.ReadSingle("Modifier Health"); creature.KillCredits = new uint[2]; creature.KillCredits[1] = packet.ReadUInt32("Kill Credit 2"); creature.DisplayIds = new uint[4]; creature.DisplayIds[1] = packet.ReadUInt32("Display Id 2"); creature.QuestItems = new uint[qItemCount]; for (var i = 0; i < qItemCount; ++i) creature.QuestItems[i] = (uint)packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Quest Item", i); creature.Type = packet.ReadEnum<CreatureType>("Type", TypeCode.Int32); if (lengthIconName > 1) creature.IconName = packet.ReadCString("Icon Name"); creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); creature.TypeFlags = packet.ReadEnum<CreatureTypeFlag>("Type Flags", TypeCode.UInt32); creature.KillCredits[0] = packet.ReadUInt32("Kill Credit 1"); creature.Family = packet.ReadEnum<CreatureFamily>("Family", TypeCode.Int32); creature.MovementId = packet.ReadUInt32("Movement Id"); creature.Expansion = packet.ReadEnum<ClientType>("Expansion", TypeCode.UInt32); creature.DisplayIds[0] = packet.ReadUInt32("Display Id 1"); creature.DisplayIds[2] = packet.ReadUInt32("Display Id 3"); creature.Rank = packet.ReadEnum<CreatureRank>("Rank", TypeCode.Int32); if (lengthSubname > 1) creature.SubName = packet.ReadCString("Sub Name"); creature.DisplayIds[3] = packet.ReadUInt32("Display Id 4"); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.UnitTemplates.Add((uint)entry.Key, creature, packet.TimeSpan); var objectName = new ObjectName { ObjectType = ObjectType.Unit, Name = creature.Name, }; Storage.ObjectNames.Add((uint)entry.Key, objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); if (entry.Value) return; var creature = new UnitTemplate(); var nameCount = ClientVersion.AddedInVersion(ClientVersionBuild.V4_1_0_13914) ? 8 : 4; // Might be earlier or later var name = new string[nameCount]; for (var i = 0; i < name.Length; i++) name[i] = packet.ReadCString("Name", i); creature.Name = name[0]; creature.SubName = packet.ReadCString("Sub Name"); creature.IconName = packet.ReadCString("Icon Name"); creature.TypeFlags = packet.ReadEnum<CreatureTypeFlag>("Type Flags", TypeCode.UInt32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_1_0_13914)) // Might be earlier or later creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum creature.Type = packet.ReadEnum<CreatureType>("Type", TypeCode.Int32); creature.Family = packet.ReadEnum<CreatureFamily>("Family", TypeCode.Int32); creature.Rank = packet.ReadEnum<CreatureRank>("Rank", TypeCode.Int32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) { creature.KillCredit1 = packet.ReadUInt32("Kill Credit 1"); creature.KillCredit2 = packet.ReadUInt32("Kill Credit 2"); } else // Did they stop sending pet spell data after 3.1? { creature.UnkInt = packet.ReadInt32("Unk Int"); creature.PetSpellData = packet.ReadUInt32("Pet Spell Data Id"); } creature.DisplayIds = new uint[4]; for (var i = 0; i < 4; i++) creature.DisplayIds[i] = packet.ReadUInt32("Display ID", i); creature.Modifier1 = packet.ReadSingle("Modifier 1"); creature.Modifier2 = packet.ReadSingle("Modifier 2"); creature.RacialLeader = packet.ReadBoolean("Racial Leader"); var qItemCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192) ? 6 : 4; creature.QuestItems = new uint[qItemCount]; if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) { for (var i = 0; i < qItemCount; i++) creature.QuestItems[i] = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Quest Item", i); creature.MovementId = packet.ReadUInt32("Movement ID"); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) creature.Expansion = packet.ReadEnum<ClientType>("Expansion", TypeCode.UInt32); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.UnitTemplates.TryAdd((uint)entry.Key, creature); var objectName = new ObjectName { ObjectType = ObjectType.Unit, Name = creature.Name, }; Storage.ObjectNames.TryAdd((uint)entry.Key, objectName); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); var hasData = packet.ReadBit(); if (!hasData) return; // nothing to do var creature = new UnitTemplate(); var lenS3 = (int)packet.ReadBits(11); var qItemCount = packet.ReadBits(22); var lenS4 = (int)packet.ReadBits(6); creature.RacialLeader = packet.ReadBit("Racial Leader"); var stringLens = new int[4][]; for (var i = 0; i < 4; i++) { stringLens[i] = new int[2]; stringLens[i][0] = (int)packet.ReadBits(11); stringLens[i][1] = (int)packet.ReadBits(11); } var lenS5 = (int)packet.ReadBits(11); packet.ResetBitReader(); creature.Family = packet.ReadInt32E<CreatureFamily>("Family"); creature.Expansion = packet.ReadUInt32E<ClientType>("Expansion"); //packet.ReadCString("string5"); creature.Type = packet.ReadInt32E<CreatureType>("Type"); if (lenS5 > 1) creature.SubName = packet.ReadCString("Sub Name"); creature.DisplayIds = new uint[4]; creature.DisplayIds[0] = packet.ReadUInt32("Display ID 0"); creature.DisplayIds[3] = packet.ReadUInt32("Display ID 3"); /*creature.QuestItems = new uint[qItemCount]; for (var i = 0; i < qItemCount; ++i) creature.QuestItems[i] = (uint)packet.ReadInt32<ItemId>("Quest Item", i); */ var name = new string[4]; var femaleName = new string[4]; for (var i = 0; i < 4; ++i) { if (stringLens[i][0] > 1) name[i] = packet.ReadCString("Name", i); if (stringLens[i][1] > 1) femaleName[i] = packet.ReadCString("Female Name", i); } creature.Name = name[0]; creature.FemaleName = femaleName[0]; if (lenS4 > 1) creature.IconName = packet.ReadCString("Icon Name"); creature.TypeFlags = packet.ReadUInt32E<CreatureTypeFlag>("Type Flags"); creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum creature.Modifier1 = packet.ReadSingle("Modifier 1"); creature.Rank = packet.ReadInt32E<CreatureRank>("Rank"); creature.KillCredits = new uint[2]; for (var i = 0; i < 2; ++i) creature.KillCredits[i] = packet.ReadUInt32("Kill Credit", i); creature.Modifier2 = packet.ReadSingle("Modifier 2"); creature.MovementId = packet.ReadUInt32("Movement ID"); creature.DisplayIds[1] = packet.ReadUInt32("Display ID 1"); creature.DisplayIds[2] = packet.ReadUInt32("Display ID 2"); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.UnitTemplates.Add((uint)entry.Key, creature, packet.TimeSpan); var objectName = new ObjectName { ObjectType = ObjectType.Unit, Name = creature.Name }; Storage.ObjectNames.Add((uint)entry.Key, objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); var creature = new UnitTemplate(); var hasData = packet.ReadBit(); if (!hasData) return; // nothing to do packet.ResetBitReader(); var bits4 = packet.ReadBits(11); var bits16 = packet.ReadBits(11); var bits28 = packet.ReadBits(6); creature.RacialLeader = packet.ReadBit("Leader"); var stringLens = new int[4][]; for (var i = 0; i < 4; i++) { stringLens[i] = new int[2]; stringLens[i][0] = (int)packet.ReadBits(11); stringLens[i][1] = (int)packet.ReadBits(11); } for (var i = 0; i < 4; ++i) { if (stringLens[i][0] > 1) creature.Name = packet.ReadCString("Name"); if (stringLens[i][1] > 1) creature.FemaleName = packet.ReadCString("NameAlt"); } //for (var i = 0; i < 2; ++i) //{ creature.TypeFlags = packet.ReadUInt32E<CreatureTypeFlag>("Type Flags"); creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); //} creature.Type = packet.ReadInt32E<CreatureType>("CreatureType"); creature.Family = packet.ReadInt32E<CreatureFamily>("CreatureFamily"); creature.Rank = packet.ReadInt32E<CreatureRank>("Classification"); creature.KillCredits = new uint[2]; for (var i = 0; i < 2; ++i) creature.KillCredits[i] = packet.ReadUInt32("ProxyCreatureID", i); creature.DisplayIds = new uint[4]; for (var i = 0; i < 4; ++i) creature.DisplayIds[i] = packet.ReadUInt32("CreatureDisplayID", i); creature.Modifier1 = packet.ReadSingle("HpMulti"); creature.Modifier2 = packet.ReadSingle("EnergyMulti"); creature.QuestItems = new uint[6]; var questItems = packet.ReadInt32("QuestItems"); creature.MovementId = packet.ReadUInt32("CreatureMovementInfoID"); creature.Expansion = packet.ReadUInt32E<ClientType>("RequiredExpansion"); packet.ReadInt32("FlagQuest"); if (bits4 > 1) creature.SubName = packet.ReadCString("Title"); if (bits16 > 1) packet.ReadCString("TitleAlt"); if (bits28 > 1) creature.IconName = packet.ReadCString("CursorName"); for (var i = 0; i < questItems; ++i) creature.QuestItems[i] = (uint)packet.ReadInt32<ItemId>("Quest Item", i); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.UnitTemplates.Add((uint)entry.Key, creature, packet.TimeSpan); var objectName = new ObjectName { ObjectType = ObjectType.Unit, Name = creature.Name }; Storage.ObjectNames.Add((uint)entry.Key, objectName, packet.TimeSpan); }