public static void HandleClientEnterWorld(Packet packet) { var mapId = packet.ReadEntry<Int32>(StoreNameType.Map, "Map"); packet.ReadBit("Loading"); packet.AddSniffData(StoreNameType.Map, mapId, "LOAD_SCREEN"); }
public static void HandleClientEnterWorld(Packet packet) { var mapId = packet.ReadEntry<UInt32>(StoreNameType.Map, "Map Id"); packet.ReadBit("Loading"); CoreParsers.MovementHandler.CurrentMapId = (uint)mapId; packet.AddSniffData(StoreNameType.Map, (int)mapId, "LOAD_SCREEN"); }
public static void HandleNpcGossip(Packet packet) { GossipMenu gossip = new GossipMenu(); WowGuid guid = packet.ReadPackedGuid128("GossipGUID"); gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); int menuId = packet.ReadInt32("GossipID"); gossip.Entry = (uint)menuId; packet.ReadInt32("FriendshipFactionID"); gossip.TextID = (uint)packet.ReadInt32("TextID"); int int44 = packet.ReadInt32("GossipOptions"); int int60 = packet.ReadInt32("GossipText"); for (int i = 0; i < int44; ++i) V6_0_2_19033.Parsers.NpcHandler.ReadGossipOptionsData((uint)menuId, packet, i, "GossipOptions"); for (int i = 0; i < int60; ++i) ReadGossipQuestTextData(packet, i, "GossipQuestText"); if (guid.GetObjectType() == ObjectType.Unit) if (Storage.Objects.ContainsKey(guid)) ((Unit)Storage.Objects[guid].Item1).GossipId = (uint)menuId; Storage.Gossips.Add(gossip, packet.TimeSpan); packet.AddSniffData(StoreNameType.Gossip, menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); }
public static void HandleClientEnterWorld(Packet packet) { var mapId = packet.ReadInt32<MapId>("MapID"); packet.ReadBit("Showing"); packet.AddSniffData(StoreNameType.Map, mapId, "LOAD_SCREEN"); }
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 HandleClientAreaTrigger(Packet packet) { var entry = packet.ReadEntry("Area Trigger Id"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_1_0_16309)) packet.ReadByte("Unk Byte"); packet.AddSniffData(StoreNameType.AreaTrigger, entry.Key, "AREATRIGGER"); }
public static void HandleClientAreaTrigger(Packet packet) { var entry = packet.ReadEntry("Area Trigger Id"); packet.ReadBit("Unk bit1"); packet.ReadBit("Unk bit2"); packet.AddSniffData(StoreNameType.AreaTrigger, entry.Key, "AREATRIGGER"); }
public static void HandleClientEnterWorld(Packet packet) { packet.Writer.WriteLine("Loading: " + (packet.ReadBit() ? "true" : "false")); // Not sure on the meaning var mapId = packet.ReadEntryWithName<UInt32>(StoreNameType.Map, "Map"); MovementHandler.CurrentMapId = (uint) mapId; if (mapId >= 0 && mapId < 1000) // Getting some weird results in a couple of packets packet.AddSniffData(StoreNameType.Map, mapId, "LOAD_SCREEN"); }
public static void HandleLoginVerifyWorld(Packet packet) { packet.ReadSingle("Orientation"); CoreParsers.MovementHandler.CurrentMapId = (uint)packet.ReadEntry<Int32>(StoreNameType.Map, "Map"); packet.ReadSingle("Z"); packet.ReadSingle("X"); packet.ReadSingle("Y"); packet.AddSniffData(StoreNameType.Map, (int)CoreParsers.MovementHandler.CurrentMapId, "NEW_WORLD"); }
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 HandleNewWorld434(Packet packet) { var pos = new Vector4(); pos.O = packet.ReadSingle(); pos.Y = packet.ReadSingle(); pos.Z = packet.ReadSingle(); pos.X = packet.ReadSingle(); CoreParsers.MovementHandler.CurrentMapId = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map"); packet.WriteLine("Position: {0}", pos); packet.AddSniffData(StoreNameType.Map, (int)CoreParsers.MovementHandler.CurrentMapId, "NEW_WORLD"); }
public static void HandleLoginVerifyWorld(Packet packet) { var pos = new Vector4(); pos.X = packet.ReadSingle(); pos.O = packet.ReadSingle(); pos.Y = packet.ReadSingle(); CoreParsers.MovementHandler.CurrentMapId = (uint)packet.ReadInt32<MapId>("Map"); pos.Z = packet.ReadSingle(); packet.AddValue("Position", pos); packet.AddSniffData(StoreNameType.Map, (int)CoreParsers.MovementHandler.CurrentMapId, "NEW_WORLD"); }
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 HandleGameObjectQueryResponse(Packet packet) { var gameObject = new GameObjectTemplate(); var entry = packet.ReadEntry("Entry"); if (entry.Value) // entry is masked 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[ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_0_14333) ? 32 : 24]; for (var 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 (var i = 0; i < gameObject.QuestItems.Length; i++) gameObject.QuestItems[i] = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Quest Item", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_0_14333)) gameObject.UnknownUInt = packet.ReadUInt32("Unknown UInt32"); packet.AddSniffData(StoreNameType.GameObject, entry.Key, "QUERY_RESPONSE"); packet.SniffFileInfo.Storage.GameObjectTemplates.TryAdd((uint) entry.Key, gameObject); var objectName = new ObjectName { ObjectType = ObjectType.GameObject, Name = gameObject.Name, }; packet.SniffFileInfo.Storage.ObjectNames.TryAdd((uint)entry.Key, objectName); }
public static void HandleNpcGossip(Packet packet) { var gossip = new Gossip(); var guid = packet.ReadGuid("GUID"); // TODO: Use this to assign npc entries with gossip ids gossip.ObjectType = guid.GetObjectType(); gossip.ObjectEntry = guid.GetEntry(); var menuId = packet.ReadUInt32("Menu Id"); var textId = packet.ReadUInt32("Text Id"); 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(); gossipOption.Index = packet.ReadUInt32("Index", i); gossipOption.OptionIcon = packet.ReadByte("Icon", i); gossipOption.Box = packet.ReadBoolean("Box", i); gossipOption.RequiredMoney = packet.ReadUInt32("Required money", i); gossipOption.OptionText = packet.ReadCString("Text", i); gossipOption.BoxText = packet.ReadCString("Box Text", i); gossip.GossipOptions.Add(gossipOption); } packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture)); Storage.Gossips.TryAdd(new Tuple<uint, uint>(menuId, textId), gossip); 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 HandleNewWorld(Packet packet) { WowPacketParser.Parsing.Parsers.MovementHandler.CurrentMapId = (uint)packet.ReadInt32<MapId>("Map"); packet.ReadVector4("Position"); packet.ReadUInt32("Reason"); packet.AddSniffData(StoreNameType.Map, (int)WowPacketParser.Parsing.Parsers.MovementHandler.CurrentMapId, "NEW_WORLD"); }
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 HandlePhaseShift422(Packet packet) { var guid = new byte[8]; guid[6] = packet.ReadBit();//0 guid[1] = packet.ReadBit();//1 guid[7] = packet.ReadBit();//2 guid[4] = packet.ReadBit();//3 guid[2] = packet.ReadBit();//4 guid[3] = packet.ReadBit();//5 guid[0] = packet.ReadBit();//6 guid[5] = packet.ReadBit();//7 packet.ReadXORByte(guid, 0); packet.ReadXORByte(guid, 4); var i = 0; var count = packet.ReadInt32(); for (var j = 0; j < count / 2; ++j) packet.ReadEntryWithName<Int16>(StoreNameType.Map, "Map Swap 1", i, j); packet.ReadXORByte(guid, 3); packet.WriteLine("[" + i + "]" + " Mask: 0x" + packet.ReadUInt32().ToString("X2")); packet.ReadXORByte(guid, 2); var phaseMask = -1; count = packet.ReadInt32(); for (var j = 0; j < count / 2; ++j) phaseMask = packet.ReadUInt16("Current Mask", i, j); packet.ReadXORByte(guid, 6); i++; count = packet.ReadInt32(); for (var j = 0; j < count / 2; ++j) packet.ReadEntryWithName<Int16>(StoreNameType.Map, "Map Swap 1", i, j); packet.ReadXORByte(guid, 7); i++; count = packet.ReadInt32(); for (var j = 0; j < count / 2; ++j) packet.ReadEntryWithName<Int16>(StoreNameType.Map, "Map Swap 3", i, j); packet.ReadXORByte(guid, 5); packet.ReadXORByte(guid, 1); packet.WriteGuid("Guid", guid); if (phaseMask != -1) { CurrentPhaseMask = phaseMask; packet.AddSniffData(StoreNameType.Phase, phaseMask, "PHASEMASK 422"); } }
public static void HandlePhaseShift406(Packet packet) { packet.ReadGuid("GUID"); var i = 0; int count = packet.ReadInt32("Count"); for (var j = 0; j < count / 2; ++j) packet.ReadEntryWithName<Int16>(StoreNameType.Map, "Unk", i, j); i++; count = packet.ReadInt32(); for (var j = 0; j < count / 2; ++j) packet.ReadEntryWithName<Int16>(StoreNameType.Map, "Terrain Swap 1", i, j); i++; count = packet.ReadInt32(); var phaseMask = 0; for (var j = 0; j < count / 2; ++j) phaseMask = packet.ReadInt16("Phases", ++i, j); i++; count = packet.ReadInt32(); for (var j = 0; j < count / 2; ++j) packet.ReadEntryWithName<Int16>(StoreNameType.Map, "Terrain Swap 2", i, j); packet.ReadUInt32("Flag"); // can be 0, 4 or 8, 8 = normal world, others are unknown //CurrentPhaseMask = phaseMask; packet.AddSniffData(StoreNameType.Phase, phaseMask, "PHASEMASK 406"); }
public static void HandlePhaseShift(Packet packet) { CurrentPhaseMask = packet.ReadInt32("Phase Mask"); packet.AddSniffData(StoreNameType.Phase, CurrentPhaseMask, "PHASEMASK"); }
public static void HandleItemQueryResponse(Packet packet) { var item = new ItemTemplate(); var entry = packet.ReadEntry("Entry"); if (entry.Value) return; item.Class = packet.ReadEnum<ItemClass>("Class", TypeCode.Int32); item.SubClass = packet.ReadUInt32("Sub Class"); item.SoundOverrideSubclass = packet.ReadInt32("Sound Override Subclass"); var name = new string[4]; for (var i = 0; i < 4; i++) name[i] = packet.ReadCString("Name", i); item.Name = name[0]; item.DisplayId = packet.ReadUInt32("Display ID"); item.Quality = packet.ReadEnum<ItemQuality>("Quality", TypeCode.Int32); item.Flags = packet.ReadEnum<ItemProtoFlags>("Flags", TypeCode.UInt32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192)) item.ExtraFlags = packet.ReadEnum<ItemFlagExtra>("Extra Flags", TypeCode.Int32); 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.StatsCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056) ? packet.ReadUInt32("Stats Count") : 10; item.StatTypes = new ItemModType[item.StatsCount]; item.StatValues = new int[item.StatsCount]; for (var i = 0; i < item.StatsCount; i++) { var type = packet.ReadEnum<ItemModType>("Stat Type", TypeCode.Int32, i); item.StatTypes[i] = type == ItemModType.None ? ItemModType.Mana : type; // TDB item.StatValues[i] = packet.ReadInt32("Stat Value", i); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) { item.ScalingStatDistribution = packet.ReadInt32("SSD ID"); item.ScalingStatValue = packet.ReadUInt32("SSD Value"); } var dmgCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767) ? 2 : 5; item.DamageMins = new float[dmgCount]; item.DamageMaxs = new float[dmgCount]; item.DamageTypes = new DamageType[dmgCount]; for (var i = 0; i < dmgCount; i++) { item.DamageMins[i] = packet.ReadSingle("Damage Min", i); item.DamageMaxs[i] = packet.ReadSingle("Damage Max", i); item.DamageTypes[i] = packet.ReadEnum<DamageType>("Damage Type", TypeCode.Int32, i); } item.Resistances = new DamageType[7]; for (var i = 0; i < 7; i++) item.Resistances[i] = packet.ReadEnum<DamageType>("Resistance", TypeCode.UInt32); item.Delay = packet.ReadUInt32("Delay"); item.AmmoType = packet.ReadEnum<AmmoType>("Ammo Type", TypeCode.Int32); item.RangedMod = packet.ReadSingle("Ranged Mod"); item.TriggeredSpellIds = new int[5]; item.TriggeredSpellTypes = new ItemSpellTriggerType[5]; item.TriggeredSpellCharges = new int[5]; item.TriggeredSpellCooldowns = new int[5]; item.TriggeredSpellCategories = new uint[5]; item.TriggeredSpellCategoryCooldowns = new int[5]; for (var i = 0; i < 5; i++) { item.TriggeredSpellIds[i] = packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Triggered Spell ID", i); item.TriggeredSpellTypes[i] = packet.ReadEnum<ItemSpellTriggerType>("Trigger Spell Type", TypeCode.Int32, i); item.TriggeredSpellCharges[i] = packet.ReadInt32("Triggered Spell Charges", i); item.TriggeredSpellCooldowns[i] = packet.ReadInt32("Triggered Spell Cooldown", i); item.TriggeredSpellCategories[i] = packet.ReadUInt32("Triggered Spell Category", i); item.TriggeredSpellCategoryCooldowns[i] = packet.ReadInt32("Triggered Spell Category Cooldown", i); } item.Bonding = packet.ReadEnum<ItemBonding>("Bonding", TypeCode.Int32); item.Description = packet.ReadCString(); 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.Block = packet.ReadUInt32("Block"); item.ItemSet = packet.ReadUInt32("Item Set"); item.MaxDurability = packet.ReadUInt32("Max Durability"); item.AreaId = (uint) packet.ReadEntryWithName<UInt32>(StoreNameType.Area, "Area"); // In this single (?) case, map 0 means no map item.MapId = packet.ReadEntryWithName<UInt32>(StoreNameType.Map, "Map"); item.BagFamily = packet.ReadEnum<BagFamilyMask>("Bag Family", TypeCode.Int32); item.TotemCategory = packet.ReadEnum<TotemCategory>("Totem Category", TypeCode.Int32); item.ItemSocketColors = new ItemSocketColor[3]; item.SocketContent = new uint[3]; for (var i = 0; i < 3; i++) { item.ItemSocketColors[i] = packet.ReadEnum<ItemSocketColor>("Socket Color", TypeCode.Int32, i); item.SocketContent[i] = packet.ReadUInt32("Socket Item", i); } item.SocketBonus = packet.ReadInt32("Socket Bonus"); item.GemProperties = packet.ReadInt32("Gem Properties"); item.RequiredDisenchantSkill = packet.ReadInt32("Required Disenchant Skill"); item.ArmorDamageModifier = packet.ReadSingle("Armor Damage Modifier"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_4_2_8209)) item.Duration = packet.ReadUInt32("Duration"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) item.ItemLimitCategory = packet.ReadInt32("Limit Category"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) item.HolidayId = packet.ReadEnum<Holiday>("Holiday", TypeCode.Int32); packet.AddSniffData(StoreNameType.Item, entry.Key, "QUERY_RESPONSE"); Storage.ItemTemplates.Add((uint) entry.Key, item, packet.TimeSpan); }
public static void HandleEnterWorld(Packet packet) { CurrentMapId = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadVector4("Position"); packet.AddSniffData(StoreNameType.Map, (int) CurrentMapId, "NEW_WORLD"); }
public static void HandleQuestQueryResponse(Packet packet) { var id = packet.ReadEntry("Quest ID"); if (id.Value) // entry is masked return; var quest = new QuestTemplate { Method = packet.ReadEnum<QuestMethod>("Method", TypeCode.Int32), Level = packet.ReadInt32("Level") }; if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) quest.MinLevel = packet.ReadInt32("Min Level"); quest.ZoneOrSort = packet.ReadEnum<QuestSort>("Sort", TypeCode.Int32); quest.Type = packet.ReadEnum<QuestType>("Type", TypeCode.Int32); quest.SuggestedPlayers = packet.ReadUInt32("Suggested Players"); quest.RequiredFactionId = new uint[2]; quest.RequiredFactionValue = new int[2]; for (var i = 0; i < 2; i++) { quest.RequiredFactionId[i] = packet.ReadUInt32("Required Faction ID", i); quest.RequiredFactionValue[i] = packet.ReadInt32("Required Faction Rep", i); } quest.NextQuestIdChain = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Next Chain Quest"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) quest.RewardXPId = packet.ReadUInt32("Quest XP ID"); quest.RewardOrRequiredMoney = packet.ReadInt32("Reward/Required Money"); quest.RewardMoneyMaxLevel = packet.ReadUInt32("Reward Money Max Level"); quest.RewardSpell = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Reward Spell"); quest.RewardSpellCast = packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Reward Spell Cast"); quest.RewardHonor = packet.ReadInt32("Reward Honor"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) quest.RewardHonorMultiplier = packet.ReadSingle("Reward Honor Multiplier"); quest.SourceItemId = (uint) packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Source Item ID"); quest.Flags = packet.ReadEnum<QuestFlags>("Flags", TypeCode.UInt32); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) quest.MinimapTargetMark = packet.ReadUInt32("Minimap Target Mark"); // missing enum. 1- Skull, 16 - Unknown, but exists if (ClientVersion.AddedInVersion(ClientVersionBuild.V2_4_0_8089)) quest.RewardTitleId = packet.ReadUInt32("Reward Title ID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) { quest.RequiredPlayerKills = packet.ReadUInt32("Required Player Kills"); quest.RewardTalents = packet.ReadUInt32("Bonus Talents"); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) quest.RewardArenaPoints = packet.ReadUInt32("Bonus Arena Points"); // TODO: Find when was this added/removed and what is it if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958) && (ClientVersion.RemovedInVersion(ClientVersionBuild.V4_0_1_13164))) packet.ReadInt32("Unknown Int32"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) { quest.RewardSkillId = packet.ReadUInt32("RewSkillId"); quest.RewardSkillPoints = packet.ReadUInt32("RewSkillPoints"); quest.RewardReputationMask = packet.ReadUInt32("RewRepMask"); quest.QuestGiverPortrait = packet.ReadUInt32("QuestGiverPortrait"); quest.QuestTurnInPortrait = packet.ReadUInt32("QuestTurnInPortrait"); } quest.RewardItemId = new uint[4]; quest.RewardItemCount = new uint[4]; for (var i = 0; i < 4; i++) { quest.RewardItemId[i] = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Reward Item ID", i); quest.RewardItemCount[i] = packet.ReadUInt32("Reward Item Count", i); } quest.RewardChoiceItemId = new uint[6]; quest.RewardChoiceItemCount = new uint[6]; for (var i = 0; i < 6; i++) { quest.RewardChoiceItemId[i] = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Reward Choice Item ID", i); quest.RewardChoiceItemCount[i] = packet.ReadUInt32("Reward Choice Item Count", i); } const int repCount = 5; quest.RewardFactionId = new uint[repCount]; quest.RewardFactionValueId = new int[repCount]; quest.RewardFactionValueIdOverride = new uint[repCount]; if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) { for (var i = 0; i < repCount; i++) quest.RewardFactionId[i] = packet.ReadUInt32("Reward Faction ID", i); for (var i = 0; i < repCount; i++) quest.RewardFactionValueId[i] = packet.ReadInt32("Reward Reputation ID", i); for (var i = 0; i < repCount; i++) quest.RewardFactionValueIdOverride[i] = packet.ReadUInt32("Reward Reputation ID Override", i); } quest.PointMapId = packet.ReadUInt32("Point Map ID"); quest.PointX = packet.ReadSingle("Point X"); quest.PointY = packet.ReadSingle("Point Y"); quest.PointOption = packet.ReadUInt32("Point Opt"); quest.Title = packet.ReadCString("Title"); quest.Objectives = packet.ReadCString("Objectives"); quest.Details = packet.ReadCString("Details"); quest.EndText = packet.ReadCString("End Text"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) quest.CompletedText = packet.ReadCString("Completed Text"); var reqId = new KeyValuePair<int, bool>[4]; quest.RequiredNpcOrGo = new int[4]; quest.RequiredNpcOrGoCount = new uint[4]; quest.RequiredSourceItemId = new uint[4]; quest.RequiredSourceItemCount = new uint[4]; var reqItemFieldCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464) ? 6 : 4; quest.RequiredItemId = new uint[reqItemFieldCount]; quest.RequiredItemCount = new uint[reqItemFieldCount]; for (var i = 0; i < 4; i++) { reqId[i] = packet.ReadEntry(); var isGo = reqId[i].Value; quest.RequiredNpcOrGo[i] = reqId[i].Key * (isGo ? -1 : 1); packet.WriteLine("[" + i + "] Required " + (isGo ? "GO" : "NPC") + " ID: " + StoreGetters.GetName(isGo ? StoreNameType.GameObject : StoreNameType.Unit, reqId[i].Key)); quest.RequiredNpcOrGoCount[i] = packet.ReadUInt32("Required Count", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) quest.RequiredSourceItemId[i] = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Required Source Item ID", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_0_10958)) quest.RequiredSourceItemCount[i] = packet.ReadUInt32("Source Item Count", i); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_8_9464)) { quest.RequiredItemId[i] = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Required Item ID", i); quest.RequiredItemCount[i] = packet.ReadUInt32("Required Item Count", i); } } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464)) { for (var i = 0; i < reqItemFieldCount; i++) { quest.RequiredItemId[i] = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Item, "Required Item ID", i); quest.RequiredItemCount[i] = packet.ReadUInt32("Required Item Count", i); } } if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) quest.RequiredSpell = (uint) packet.ReadEntryWithName<UInt32>(StoreNameType.Spell, "Required Spell"); quest.ObjectiveText = new string[4]; for (var i = 0; i < 4; i++) quest.ObjectiveText[i] = packet.ReadCString("Objective Text", i); quest.RewardCurrencyId = new uint[4]; quest.RewardCurrencyCount = new uint[4]; quest.RequiredCurrencyId = new uint[4]; quest.RequiredCurrencyCount = new uint[4]; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) { for (var i = 0; i < 4; ++i) { quest.RewardCurrencyId[i] = packet.ReadUInt32("Reward Currency ID", i); quest.RewardCurrencyCount[i] = packet.ReadUInt32("Reward Currency Count", i); } for (var i = 0; i < 4; ++i) { quest.RequiredCurrencyId[i] = packet.ReadUInt32("Required Currency ID", i); quest.RequiredCurrencyCount[i] = packet.ReadUInt32("Required Currency Count", i); } quest.QuestGiverTextWindow = packet.ReadCString("QuestGiver Text Window"); quest.QuestGiverTargetName = packet.ReadCString("QuestGiver Target Name"); quest.QuestTurnTextWindow = packet.ReadCString("QuestTurn Text Window"); quest.QuestTurnTargetName = packet.ReadCString("QuestTurn Target Name"); quest.SoundAccept = packet.ReadUInt32("Sound Accept"); quest.SoundTurnIn = packet.ReadUInt32("Sound TurnIn"); } packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE"); Storage.QuestTemplates.Add((uint) id.Key, quest, packet.TimeSpan); }
public static void HandleDBReply(Packet packet) { packet.ReadUInt32("Type"); var itemId = packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) packet.ReadUInt32("Received Type"); var size = packet.ReadUInt32("Size"); if (size == 0) { packet.ReadUInt32("Received Type"); return; } packet.ReadEntryWithName<UInt32>(StoreNameType.Item, "Entry"); if (size == 32) { packet.ReadEnum<ItemClass>("Class", TypeCode.Int32); packet.ReadUInt32("Sub Class"); packet.ReadInt32("Unk Int32"); packet.ReadEnum<Material>("Material", TypeCode.Int32); packet.ReadUInt32("Display ID"); packet.ReadEnum<InventoryType>("Inventory Type", TypeCode.UInt32); packet.ReadEnum<SheathType>("Sheath Type", TypeCode.Int32); } else { packet.ReadEnum<ItemQuality>("Quality", TypeCode.Int32); packet.ReadEnum<ItemProtoFlags>("Flags", TypeCode.UInt32); packet.ReadEnum<ItemFlagExtra>("Extra Flags", TypeCode.Int32); packet.ReadInt32("Buy Price"); packet.ReadUInt32("Sell Price"); packet.ReadEnum<InventoryType>("Inventory Type", TypeCode.Int32); packet.ReadEnum<ClassMask>("Allowed Classes", TypeCode.Int32); packet.ReadEnum<RaceMask>("Allowed Races", TypeCode.Int32); packet.ReadUInt32("Item Level"); packet.ReadUInt32("Required Level"); packet.ReadUInt32("Required Skill ID"); packet.ReadUInt32("Required Skill Level"); packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Required Spell"); packet.ReadUInt32("Required Honor Rank"); packet.ReadUInt32("Required City Rank"); packet.ReadUInt32("Required Rep Faction"); packet.ReadUInt32("Required Rep Value"); packet.ReadInt32("Max Count"); packet.ReadInt32("Max Stack Size"); packet.ReadUInt32("Container Slots"); for (var i = 0; i < 10; i++) packet.ReadEnum<ItemModType>("Stat Type", TypeCode.Int32, i); for (var i = 0; i < 10; i++) packet.ReadInt32("Stat Value", i); for (var i = 0; i < 10; i++) packet.ReadInt32("Unk UInt32 1", i); for (var i = 0; i < 10; i++) packet.ReadInt32("Unk UInt32 2", i); packet.ReadUInt32("Scaling Stat Distribution"); packet.ReadEnum<DamageType>("Damage Type", TypeCode.Int32); packet.ReadUInt32("Delay"); packet.ReadSingle("Ranged Mod"); for (var i = 0; i < 5; i++) packet.ReadEntryWithName<Int32>(StoreNameType.Spell, "Triggered Spell ID", i); for (var i = 0; i < 5; i++) packet.ReadEnum<ItemSpellTriggerType>("Trigger Spell Type", TypeCode.Int32, i); for (var i = 0; i < 5; i++) packet.ReadInt32("Triggered Spell Charges", i); for (var i = 0; i < 5; i++) packet.ReadInt32("Triggered Spell Cooldown", i); for (var i = 0; i < 5; i++) packet.ReadUInt32("Triggered Spell Category", i); for (var i = 0; i < 5; i++) packet.ReadInt32("Triggered Spell Category Cooldown", i); packet.ReadEnum<ItemBonding>("Bonding", TypeCode.Int32); for (var i = 0; i < 4; i++) if (packet.ReadUInt16() > 0) packet.ReadCString("Name", i); if (packet.ReadUInt16() > 0) packet.ReadCString("Description"); packet.ReadUInt32("Page Text"); packet.ReadEnum<Language>("Language", TypeCode.Int32); packet.ReadEnum<PageMaterial>("Page Material", TypeCode.Int32); packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Start Quest"); packet.ReadUInt32("Lock ID"); packet.ReadEnum<Material>("Material", TypeCode.Int32); packet.ReadEnum<SheathType>("Sheath Type", TypeCode.Int32); packet.ReadInt32("Random Property"); packet.ReadInt32("Random Suffix"); packet.ReadUInt32("Item Set"); packet.ReadUInt32("Max Durability"); packet.ReadEntryWithName<UInt32>(StoreNameType.Area, "Area"); // In this single (?) case, map 0 means no map var map = packet.ReadUInt32(); packet.WriteLine("Map ID: " + (map != 0 ? StoreGetters.GetName(StoreNameType.Map, (int) map) : map + " (No map)")); packet.ReadEnum<BagFamilyMask>("Bag Family", TypeCode.Int32); packet.ReadEnum<TotemCategory>("Totem Category", TypeCode.Int32); for (var i = 0; i < 3; i++) packet.ReadEnum<ItemSocketColor>("Socket Color", TypeCode.Int32, i); for (var i = 0; i < 3; i++) packet.ReadUInt32("Socket Item", i); packet.ReadUInt32("Socket Bonus"); packet.ReadUInt32("Gem Properties"); packet.ReadSingle("Armor Damage Modifier"); packet.ReadInt32("Duration"); packet.ReadInt32("Limit Category"); packet.ReadEnum<Holiday>("Holiday", TypeCode.Int32); packet.ReadSingle("Stat Scaling Factor"); packet.ReadUInt32("Unk UInt32 1"); packet.ReadUInt32("Unk UInt32 2"); } if (ClientVersion.RemovedInVersion(ClientVersionBuild.V4_2_2_14545)) packet.ReadUInt32("Received Type"); packet.AddSniffData(StoreNameType.Item, itemId, "DB_REPLY"); }
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 HandleNewWorld422(Packet packet) { packet.ReadVector3("Position"); CurrentMapId = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map"); packet.ReadSingle("Orientation"); packet.AddSniffData(StoreNameType.Map, (int)CurrentMapId, "NEW_WORLD"); }
public static void HandleAuraUpdate(Packet packet) { packet.ReadBit("UpdateAll"); var guid = packet.ReadPackedGuid128("UnitGUID"); var count = packet.ReadUInt32("AurasCount"); var auras = new List<Aura>(); for (var i = 0; i < count; ++i) { var aura = new Aura(); packet.ReadByte("Slot", i); packet.ResetBitReader(); var hasAura = packet.ReadBit("HasAura", i); if (hasAura) { aura.SpellId = (uint)packet.ReadInt32<SpellId>("SpellID", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V6_2_0_20173)) packet.ReadUInt32("SpellXSpellVisualID", i); aura.AuraFlags = packet.ReadByteE<AuraFlagMoP>("Flags", i); packet.ReadInt32("ActiveFlags", i); aura.Level = packet.ReadUInt16("CastLevel", i); aura.Charges = packet.ReadByte("Applications", i); var int72 = packet.ReadUInt32("Int56 Count", i); var effectCount = packet.ReadUInt32("Effect Count", i); for (var j = 0; j < int72; ++j) packet.ReadSingle("Points", i, j); for (var j = 0; j < effectCount; ++j) packet.ReadSingle("EstimatedPoints", i, j); packet.ResetBitReader(); var hasCasterGUID = packet.ReadBit("HasCastUnit", i); var hasDuration = packet.ReadBit("HasDuration", i); var hasMaxDuration = packet.ReadBit("HasRemaining", i); if (hasCasterGUID) packet.ReadPackedGuid128("CastUnit", i); aura.Duration = hasDuration ? packet.ReadInt32("Duration", i) : 0; aura.MaxDuration = hasMaxDuration ? packet.ReadInt32("Remaining", i) : 0; auras.Add(aura); packet.AddSniffData(StoreNameType.Spell, (int)aura.SpellId, "AURA_UPDATE"); } } if (Storage.Objects.ContainsKey(guid)) { var unit = Storage.Objects[guid].Item1 as Unit; if (unit != null) { // If this is the first packet that sends auras // (hopefully at spawn time) add it to the "Auras" field, // if not create another row of auras in AddedAuras // (similar to ChangedUpdateFields) if (unit.Auras == null) unit.Auras = auras; else unit.AddedAuras.Add(auras); } } }
public static void HandleNewWorld434(Packet packet) { packet.ReadSingle("X"); packet.ReadSingle("Orientation"); packet.ReadSingle("Z"); CurrentMapId = (uint)packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map"); packet.ReadSingle("Y"); // seriously... packet.AddSniffData(StoreNameType.Map, (int)CurrentMapId, "NEW_WORLD"); }
public static void HandleAuraUpdate(Packet packet) { var guid = new byte[8]; var powerGUID = new byte[8]; packet.ReadBit(); // fake bit? packet.StartBitStream(guid, 6, 1, 0); var bits4 = (int)packet.ReadBits(24); packet.StartBitStream(guid, 2, 4); var hasPowerData = packet.ReadBit(); var powerCount = 0u; if (hasPowerData) { packet.StartBitStream(powerGUID, 7, 0, 6); powerCount = packet.ReadBits(21); packet.StartBitStream(powerGUID, 3, 1, 2, 4, 5); } packet.StartBitStream(guid, 7, 3, 5); var hasAura = new bool[bits4]; var hasCasterGUID = new bool[bits4]; var hasDuration = new bool[bits4]; var hasMaxDuration = new bool[bits4]; var effectCount = new uint[bits4]; var casterGUID = new byte[bits4][]; var bitsEC = new uint[bits4]; for (var i = 0; i < bits4; ++i) { hasAura[i] = packet.ReadBit(); if (hasAura[i]) { hasMaxDuration[i] = packet.ReadBit(); effectCount[i] = packet.ReadBits(22); hasCasterGUID[i] = packet.ReadBit(); if (hasCasterGUID[i]) { casterGUID[i] = new byte[8]; packet.StartBitStream(casterGUID[i], 3, 0, 2, 6, 5, 7, 4, 1); } hasDuration[i] = packet.ReadBit(); bitsEC[i] = packet.ReadBits(22); } } var auras = new List<Aura>(); for (var i = 0; i < bits4; ++i) { if (hasAura[i]) { var aura = new Aura(); aura.Duration = hasDuration[i] ? packet.ReadInt32("Duration", i) : 0; if (hasCasterGUID[i]) { packet.ParseBitStream(casterGUID[i], 0, 7, 5, 6, 1, 3, 2, 4); packet.WriteGuid("Caster GUID", casterGUID[i], i); aura.CasterGuid = new WowGuid64(BitConverter.ToUInt64(casterGUID[i], 0)); } else aura.CasterGuid = new WowGuid64(); aura.AuraFlags = packet.ReadByteE<AuraFlagMoP>("Flags", i); for (var j = 0; j < effectCount[i]; ++j) packet.ReadSingle("Effect Value", i, j); aura.SpellId = packet.ReadUInt32("Spell Id", i); aura.MaxDuration = hasMaxDuration[i] ? packet.ReadInt32("Max Duration", i) : 0; for (var j = 0; j < bitsEC[i]; ++j) packet.ReadSingle("FloatEA"); aura.Charges = packet.ReadByte("Charges", i); packet.ReadInt32("Effect Mask", i); aura.Level = packet.ReadUInt16("Caster Level", i); auras.Add(aura); packet.AddSniffData(StoreNameType.Spell, (int)aura.SpellId, "AURA_UPDATE"); } packet.ReadByte("Slot", i); } if (hasPowerData) { packet.ReadXORByte(powerGUID, 7); packet.ReadXORByte(powerGUID, 4); packet.ReadXORByte(powerGUID, 5); packet.ReadXORByte(powerGUID, 1); packet.ReadXORByte(powerGUID, 6); for (var i = 0; i < powerCount; ++i) { packet.ReadInt32("Value", i); packet.ReadInt32E<PowerType>("Power type", i); // Actually powertype for class } packet.ReadInt32("Attack power"); packet.ReadInt32("Spell power"); packet.ReadXORByte(powerGUID, 3); packet.ReadInt32("Current health"); packet.ReadXORByte(powerGUID, 0); packet.ReadXORByte(powerGUID, 2); packet.WriteGuid("Power GUID", powerGUID); } packet.ParseBitStream(guid, 0, 4, 3, 7, 5, 6, 2, 1); packet.WriteGuid("Guid", guid); var GUID = new WowGuid64(BitConverter.ToUInt64(guid, 0)); if (Storage.Objects.ContainsKey(GUID)) { var unit = Storage.Objects[GUID].Item1 as Unit; if (unit != null) { // If this is the first packet that sends auras // (hopefully at spawn time) add it to the "Auras" field, // if not create another row of auras in AddedAuras // (similar to ChangedUpdateFields) if (unit.Auras == null) unit.Auras = auras; else unit.AddedAuras.Add(auras); } } }
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); }