public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); CreatureTemplate creature = new CreatureTemplate { Entry = (uint)entry.Key }; Bit hasData = packet.ReadBit(); if (!hasData) return; // nothing to do packet.ResetBitReader(); uint titleLen = packet.ReadBits(11); uint titleAltLen = packet.ReadBits(11); uint cursorNameLen = packet.ReadBits(6); creature.RacialLeader = packet.ReadBit("Leader"); var stringLens = new int[4][]; for (int 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"); } 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 (int i = 0; i < 2; ++i) creature.KillCredits[i] = packet.ReadUInt32("ProxyCreatureID", i); creature.ModelIDs = new uint?[4]; for (int i = 0; i < 4; ++i) creature.ModelIDs[i] = packet.ReadUInt32("CreatureDisplayID", i); creature.HealthModifier = packet.ReadSingle("HpMulti"); creature.ManaModifier = packet.ReadSingle("EnergyMulti"); //TODO: move to creature_questitems //creature.QuestItems = new uint[6]; int questItems = packet.ReadInt32("QuestItems"); creature.MovementID = packet.ReadUInt32("CreatureMovementInfoID"); creature.HealthScalingExpansion = packet.ReadUInt32E<ClientType>("HealthScalingExpansion"); creature.RequiredExpansion = packet.ReadUInt32E<ClientType>("RequiredExpansion"); if (titleLen > 1) creature.SubName = packet.ReadCString("Title"); if (titleAltLen > 1) packet.ReadCString("TitleAlt"); if (cursorNameLen > 1) creature.IconName = packet.ReadCString("CursorName"); for (int i = 0; i < questItems; ++i) /*creature.QuestItems[i] = (uint)*/packet.ReadInt32<ItemId>("Quest Item", i); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.CreatureTemplates.Add(creature, packet.TimeSpan); ObjectName objectName = new ObjectName { ObjectType = ObjectType.Unit, ID = entry.Key, Name = creature.Name }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); Bit hasData = packet.ReadBit(); if (!hasData) return; // nothing to do CreatureTemplate creature = new CreatureTemplate { Entry = (uint)entry.Key }; packet.ReadBits(11); uint qItemCount = packet.ReadBits(22); int lenS4 = (int)packet.ReadBits(6); creature.RacialLeader = packet.ReadBit("Racial Leader"); var stringLens = new int[4][]; for (int i = 0; i < 4; i++) { stringLens[i] = new int[2]; stringLens[i][0] = (int)packet.ReadBits(11); stringLens[i][1] = (int)packet.ReadBits(11); } int lenS5 = (int)packet.ReadBits(11); packet.ResetBitReader(); creature.Family = packet.ReadInt32E<CreatureFamily>("Family"); creature.ExpUnk = packet.ReadUInt32E<ClientType>("Expansion"); creature.Type = packet.ReadInt32E<CreatureType>("Type"); if (lenS5 > 1) creature.SubName = packet.ReadCString("Sub Name"); creature.ModelIDs = new uint?[4]; creature.ModelIDs[0] = packet.ReadUInt32("Display ID 0"); creature.ModelIDs[3] = packet.ReadUInt32("Display ID 3"); //TODO: move to creature_questitems //creature.QuestItems = new uint[qItemCount]; for (int 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 (int 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.HealthModifier = packet.ReadSingle("Modifier 1"); creature.Rank = packet.ReadInt32E<CreatureRank>("Rank"); creature.KillCredits = new uint?[2]; for (int i = 0; i < 2; ++i) creature.KillCredits[i] = packet.ReadUInt32("Kill Credit", i); creature.ManaModifier = packet.ReadSingle("Modifier 2"); creature.MovementID = packet.ReadUInt32("Movement ID"); creature.ModelIDs[1] = packet.ReadUInt32("Display ID 1"); creature.ModelIDs[2] = packet.ReadUInt32("Display ID 2"); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.CreatureTemplates.Add(creature, packet.TimeSpan); ObjectName objectName = new ObjectName { ObjectType = ObjectType.Unit, ID = entry.Key, Name = creature.Name }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); // +5 CreatureTemplate creature = new CreatureTemplate { Entry = (uint)entry.Key }; Bit hasData = packet.ReadBit(); //+16 if (!hasData) return; // nothing to do creature.ModelIDs = new uint?[4]; creature.KillCredits = new uint?[2]; uint bits24 = packet.ReadBits(11); //+7 uint qItemCount = packet.ReadBits(22); //+72 int bits1C = (int)packet.ReadBits(11); //+9 var stringLens = new int[4][]; for (int 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 uint bits2C = packet.ReadBits(6); //+136 if (bits1C > 1) packet.ReadCString("String1C"); creature.KillCredits[0] = packet.ReadUInt32(); //+27 creature.ModelIDs[3] = packet.ReadUInt32(); //+32 creature.ModelIDs[2] = packet.ReadUInt32(); //+31 creature.RequiredExpansion = packet.ReadUInt32E<ClientType>("Expansion"); //+24 creature.Type = packet.ReadInt32E<CreatureType>("Type"); //+12 creature.HealthModifier = packet.ReadSingle("Modifier 1"); //+15 creature.TypeFlags = packet.ReadUInt32E<CreatureTypeFlag>("Type Flags"); creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum creature.Rank = packet.ReadInt32E<CreatureRank>("Rank"); //+14 creature.MovementID = packet.ReadUInt32("Movement ID"); //+23 var name = new string[4]; var femaleName = new string[4]; for (int 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.ModelIDs[0] = packet.ReadUInt32(); //+29 creature.ModelIDs[1] = packet.ReadUInt32(); //+30 if (bits2C > 1) creature.IconName = packet.ReadCString("Icon Name"); //+100 //creature.QuestItems = new uint[qItemCount]; for (int i = 0; i < qItemCount; ++i) /*creature.QuestItems[i] = (uint)*/packet.ReadInt32<ItemId>("Quest Item", i); //+72 creature.KillCredits[1] = packet.ReadUInt32(); //+28 creature.ManaModifier = packet.ReadSingle("Modifier 2"); //+16 creature.Family = packet.ReadInt32E<CreatureFamily>("Family"); //+13 for (int i = 0; i < 4; ++i) packet.AddValue("Display ID", creature.ModelIDs[i], i); for (int i = 0; i < 2; ++i) packet.AddValue("Kill Credit", creature.KillCredits[i], i); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.CreatureTemplates.Add(creature, packet.TimeSpan); ObjectName objectName = new ObjectName { ObjectType = ObjectType.Unit, ID = entry.Key, Name = creature.Name }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); if (entry.Value) return; CreatureTemplate creature = new CreatureTemplate { Entry = (uint)entry.Key }; var name = new string[4]; for (int i = 0; i < name.Length; i++) name[i] = packet.ReadCString("Name", i); creature.Name = name[0]; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_1_0_13914)) { var femaleName = new string[4]; for (int i = 0; i < femaleName.Length; i++) femaleName[i] = packet.ReadCString("Female Name", i); creature.FemaleName = femaleName[0]; } creature.SubName = packet.ReadCString("Sub Name"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_0_5_16048)) packet.ReadCString("Unk String"); creature.IconName = packet.ReadCString("Icon Name"); creature.TypeFlags = packet.ReadUInt32E<CreatureTypeFlag>("Type Flags"); 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.ReadInt32E<CreatureType>("Type"); creature.Family = packet.ReadInt32E<CreatureFamily>("Family"); creature.Rank = packet.ReadInt32E<CreatureRank>("Rank"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) { creature.KillCredits = new uint?[2]; for (int i = 0; i < 2; ++i) creature.KillCredits[i] = packet.ReadUInt32("Kill Credit", i); } else // Did they stop sending pet spell data after 3.1? { packet.ReadInt32("Unk Int"); creature.PetSpellDataID = packet.ReadUInt32("Pet Spell Data Id"); } creature.ModelIDs = new uint?[4]; for (int i = 0; i < 4; i++) creature.ModelIDs[i] = packet.ReadUInt32("Model ID", i); creature.HealthModifier = packet.ReadSingle("Modifier 1"); creature.ManaModifier = packet.ReadSingle("Modifier 2"); creature.RacialLeader = packet.ReadBool("Racial Leader"); int qItemCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192) ? 6 : 4; //TODO: Move to creature_questitem //creature.QuestItems = new uint[qItemCount]; if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) { for (int i = 0; i < qItemCount; i++) /*creature.QuestItems[i] = (uint)*/packet.ReadInt32<ItemId>("Quest Item", i); creature.MovementID = packet.ReadUInt32("Movement ID"); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) creature.ExpUnk = packet.ReadUInt32E<ClientType>("Expansion"); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.CreatureTemplates.Add(creature, packet.TimeSpan); ObjectName objectName = new ObjectName { ObjectType = ObjectType.Unit, ID = entry.Key, Name = creature.Name }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }
public static void HandleCreatureQueryResponse(Packet packet) { var entry = packet.ReadEntry("Entry"); CreatureTemplate creature = new CreatureTemplate { Entry = (uint)entry.Key }; var hasData = packet.ReadBit("hasData"); if (!hasData) return; // nothing to do uint lengthSubname = packet.ReadBits("Subname length", 11); uint qItemCount = packet.ReadBits("itemCount", 22); packet.ReadBits(11); // Unk String length. Needs reading somewhere? 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); } creature.RacialLeader = packet.ReadBit("Racial Leader"); uint lengthIconName = packet.ReadBits(6) ^ 1; creature.KillCredits = new uint?[2]; creature.KillCredits[0] = packet.ReadUInt32("Kill Credit 1"); creature.ModelIDs = new uint?[4]; creature.ModelIDs[3] = packet.ReadUInt32("Display Id 4"); creature.ModelIDs[1] = packet.ReadUInt32("Display Id 2"); creature.Expansion = packet.ReadUInt32E<ClientType>("Expansion"); creature.Type = packet.ReadInt32E<CreatureType>("Type"); creature.HealthModifier = packet.ReadSingle("Modifier Health"); creature.TypeFlags = packet.ReadUInt32E<CreatureTypeFlag>("Type Flags"); creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); creature.Rank = packet.ReadInt32E<CreatureRank>("Rank"); creature.MovementID = packet.ReadUInt32("Movement Id"); 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]; if (lengthSubname > 1) creature.SubName = packet.ReadCString("Sub Name"); creature.ModelIDs[0] = packet.ReadUInt32("Display Id 1"); creature.ModelIDs[2] = packet.ReadUInt32("Display Id 3"); if (lengthIconName > 1) creature.IconName = packet.ReadCString("Icon Name"); //creature.QuestItem = new uint[qItemCount]; for (var i = 0; i < qItemCount; i++) /*creature.QuestItems[i] = (uint)*/packet.ReadUInt32<ItemId>("Quest Item", i); creature.KillCredits[1] = packet.ReadUInt32("Kill Credit 2"); creature.ManaModifier = packet.ReadSingle("Modifier Mana"); creature.Family = packet.ReadInt32E<CreatureFamily>("Family"); packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE"); Storage.CreatureTemplates.Add(creature, packet.TimeSpan); var objectName = new ObjectName { ObjectType = ObjectType.Unit, Name = creature.Name, ID = entry.Key }; Storage.ObjectNames.Add(objectName, packet.TimeSpan); }