public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = packet.ReadGuid("GUID"); var itemCount = packet.ReadByte("Item Count"); npcVendor.VendorItems = new List <VendorItem>(itemCount); for (var i = 0; i < itemCount; i++) { var vendorItem = new VendorItem(); vendorItem.Slot = packet.ReadUInt32("Item Position", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) { packet.ReadUInt32("Unk Uint32", i); } vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); packet.ReadInt32("Display ID", i); vendorItem.MaxCount = packet.ReadInt32("Max Count", i); packet.ReadInt32("Price", i); packet.ReadInt32("Max Durability", i); packet.ReadUInt32("Buy Count", i); vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) { packet.ReadByte("Unk Byte", i); } } Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventory(Packet packet) { uint entry = packet.ReadPackedGuid128("VendorGUID").GetEntry(); packet.ReadByte("Reason"); int count = packet.ReadInt32("VendorItems"); for (int i = 0; i < count; ++i) { NpcVendor vendor = new NpcVendor { Entry = entry, Slot = packet.ReadInt32("Muid", i), Type = (uint)packet.ReadInt32("Type", i) }; int maxCount = packet.ReadInt32("Quantity", i); packet.ReadInt64("Price", i); packet.ReadInt32("Durability", i); int buyCount = packet.ReadInt32("StackCount", i); vendor.ExtendedCost = packet.ReadUInt32("ExtendedCostID", i); vendor.PlayerConditionID = packet.ReadUInt32("PlayerConditionFailed", i); vendor.Item = V6_0_2_19033.Parsers.ItemHandler.ReadItemInstance(packet, i); vendor.IgnoreFiltering = packet.ReadBit("DoNotFilterOnVendor", i); vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = (uint)buyCount; } Storage.NpcVendors.Add(vendor, packet.TimeSpan); } }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = packet.ReadGuid("GUID"); var itemCount = packet.ReadByte("Item Count"); npcVendor.VendorItems = new List <VendorItem>(itemCount); for (var i = 0; i < itemCount; i++) { var vendorItem = new VendorItem(); vendorItem.Slot = packet.ReadUInt32("Item Position", i); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); packet.ReadInt32("Display ID", i); vendorItem.MaxCount = packet.ReadInt32("Max Count", i); packet.ReadInt32("Price", i); packet.ReadInt32("Max Durability", i); packet.ReadUInt32("Buy Count", i); vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); } Storage.NpcVendors.TryAdd(guid.GetEntry(), npcVendor); }
public static void HandleVendorInventoryList422(Packet packet) { var guidBytes = packet.StartBitStream(5, 6, 1, 2, 3, 0, 7, 4); packet.ReadXORByte(guidBytes, 2); packet.ReadXORByte(guidBytes, 3); uint count = packet.ReadUInt32("Item Count"); packet.ReadXORByte(guidBytes, 5); packet.ReadXORByte(guidBytes, 0); packet.ReadXORByte(guidBytes, 1); packet.ReadByte("Unk Byte"); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 7); packet.ReadXORByte(guidBytes, 6); uint entry = packet.WriteGuid("GUID", guidBytes).GetEntry(); for (int i = 0; i < count; i++) { NpcVendor npcVendor = new NpcVendor { Entry = entry }; packet.ReadInt32("Max Durability", i); npcVendor.Slot = packet.ReadInt32("Item Position", i); npcVendor.Item = packet.ReadInt32 <ItemId>("Item ID", i); packet.ReadInt32("Unk Int32 1", i); packet.ReadInt32("Display ID", i); int maxCount = packet.ReadInt32("Max Count", i); npcVendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB packet.ReadUInt32("Buy Count", i); npcVendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); packet.ReadInt32("Unk Int32 2", i); packet.ReadInt32("Price", i); // where's the vendorItem.Type (1/2)? Storage.NpcVendors.Add(npcVendor, packet.TimeSpan); } LastGossipOption.Guid = null; LastGossipOption.ActionMenuId = null; LastGossipOption.ActionPoiId = null; LastGossipOption.MenuId = null; LastGossipOption.OptionIndex = null; TempGossipOptionPOI.Guid = null; TempGossipOptionPOI.MenuId = null; TempGossipOptionPOI.OptionIndex = null; TempGossipOptionPOI.ActionMenuId = null; TempGossipOptionPOI.ActionPoiId = null; }
public static void HandleVendorInventoryList(Packet packet) { uint entry = packet.ReadGuid("GUID").GetEntry(); int count = packet.ReadByte("Item Count"); if (count == 0) { packet.ReadByte("Unk 1"); return; } for (int i = 0; i < count; i++) { NpcVendor vendor = new NpcVendor { Entry = entry, Slot = packet.ReadInt32("Item Position", i) }; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) { vendor.Type = packet.ReadUInt32("Item Type", i); // not confirmed } vendor.Item = packet.ReadInt32 <ItemId>("Item ID", i); packet.ReadInt32("Display ID", i); int maxCount = packet.ReadInt32("Max Count", i); packet.ReadInt32("Price", i); packet.ReadInt32("Max Durability", i); uint buyCount = packet.ReadUInt32("Buy Count", i); vendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) { packet.ReadByte("Unk Byte", i); } vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = buyCount; } Storage.NpcVendors.Add(vendor, packet.TimeSpan); } LastGossipOption.Guid = null; LastGossipOption.ActionMenuId = null; LastGossipOption.ActionPoiId = null; LastGossipOption.MenuId = null; LastGossipOption.OptionIndex = null; TempGossipOptionPOI.Guid = null; TempGossipOptionPOI.MenuId = null; TempGossipOptionPOI.OptionIndex = null; TempGossipOptionPOI.ActionMenuId = null; TempGossipOptionPOI.ActionPoiId = null; }
public static void HandleVendorInventory(Packet packet) { uint entry = packet.ReadPackedGuid128("VendorGUID").GetEntry(); packet.ReadByte("Reason"); int count = packet.ReadInt32("VendorItems"); for (int i = 0; i < count; ++i) { NpcVendor vendor = new NpcVendor { Entry = entry, Slot = packet.ReadInt32("Muid", i), Type = (uint)packet.ReadInt32("Type", i) }; int maxCount = packet.ReadInt32("Quantity", i); packet.ReadInt64("Price", i); packet.ReadInt32("Durability", i); int buyCount = packet.ReadInt32("StackCount", i); vendor.ExtendedCost = packet.ReadUInt32("ExtendedCostID", i); vendor.PlayerConditionID = packet.ReadUInt32("PlayerConditionFailed", i); vendor.Item = Substructures.ItemHandler.ReadItemInstance(packet, i).ItemID; packet.ResetBitReader(); vendor.IgnoreFiltering = packet.ReadBit("DoNotFilterOnVendor", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V8_1_0_28724)) { packet.ReadBit("Refundable", i); } vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = (uint)buyCount; } Storage.NpcVendors.Add(vendor, packet.TimeSpan); } var lastGossipOption = CoreParsers.NpcHandler.LastGossipOption; var tempGossipOptionPOI = CoreParsers.NpcHandler.TempGossipOptionPOI; lastGossipOption.Guid = null; lastGossipOption.MenuId = null; lastGossipOption.OptionIndex = null; lastGossipOption.ActionMenuId = null; lastGossipOption.ActionPoiId = null; tempGossipOptionPOI.Guid = null; tempGossipOptionPOI.MenuId = null; tempGossipOptionPOI.OptionIndex = null; tempGossipOptionPOI.ActionMenuId = null; tempGossipOptionPOI.ActionPoiId = null; }
public static void HandleVendorInventoryList422(Packet packet) { var npcVendor = new NpcVendor(); var guidBytes = packet.StartBitStream(5, 6, 1, 2, 3, 0, 7, 4); packet.ReadXORByte(guidBytes, 2); packet.ReadXORByte(guidBytes, 3); var itemCount = packet.ReadUInt32("Item Count"); packet.ReadXORByte(guidBytes, 5); packet.ReadXORByte(guidBytes, 0); packet.ReadXORByte(guidBytes, 1); packet.ReadByte("Unk Byte"); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 7); packet.ReadXORByte(guidBytes, 6); var guid = new Guid(BitConverter.ToUInt64(guidBytes, 0)); packet.WriteLine("GUID: {0}", guid); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (var i = 0; i < itemCount; i++) { var vendorItem = new VendorItem(); packet.ReadInt32("Max Durability", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); packet.ReadInt32("Unk Int32 1", i); packet.ReadInt32("Display ID", i); var maxCount = packet.ReadInt32("Max Count", i); vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB packet.ReadUInt32("Buy Count", i); vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); packet.ReadInt32("Unk Int32 2", i); packet.ReadInt32("Price", i); // where's the vendorItem.Type (1/2)? npcVendor.VendorItems.Add(vendorItem); } Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = packet.ReadGuid("GUID"); var itemCount = packet.ReadByte("Item Count"); if (itemCount == 0) { packet.ReadByte("Unk 1"); return; } npcVendor.VendorItems = new List <VendorItem>(itemCount); for (var i = 0; i < itemCount; i++) { var vendorItem = new VendorItem { Slot = packet.ReadUInt32("Item Position", i) }; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) { vendorItem.Type = packet.ReadUInt32("Item Type", i); // not confirmed } vendorItem.ItemId = (uint)packet.ReadInt32 <ItemId>("Item ID", i); packet.ReadInt32("Display ID", i); var maxCount = packet.ReadInt32("Max Count", i); vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB packet.ReadInt32("Price", i); packet.ReadInt32("Max Durability", i); var buyCount = packet.ReadUInt32("Buy Count", i); vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_3_13329)) { packet.ReadByte("Unk Byte", i); } if (vendorItem.Type == 2) { vendorItem.MaxCount = (int)buyCount; } } Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = packet.ReadPackedGuid128("VendorGUID"); packet.ReadByte("Reason"); var int9 = packet.ReadInt32("VendorItems"); npcVendor.VendorItems = new List <VendorItem>(int9); for (var i = 0; i < int9; ++i) { var vendorItem = new VendorItem(); vendorItem.Slot = (uint)packet.ReadInt32("Muid", i); vendorItem.Type = (uint)packet.ReadInt32("Type", i); // ItemInstance //if (ItemInstance) { vendorItem.ItemId = (uint)ItemHandler.ReadItemInstance(packet, i); } var maxCount = packet.ReadInt32("Quantity", i); packet.ReadInt32("Price", i); packet.ReadInt32("Durability", i); var buyCount = packet.ReadInt32("StackCount", i); vendorItem.ExtendedCostId = (uint)packet.ReadInt32("ExtendedCostID", i); packet.ReadInt32("PlayerConditionFailed", i); packet.ResetBitReader(); packet.ReadBit("DoNotFilterOnVendor", i); vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB if (vendorItem.Type == 2) { vendorItem.MaxCount = buyCount; } npcVendor.VendorItems.Add(vendorItem); } Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventory(Packet packet) { uint entry = packet.ReadPackedGuid128("VendorGUID").GetEntry(); packet.ReadByte("Reason"); int count = packet.ReadInt32("VendorItems"); for (int i = 0; i < count; ++i) { NpcVendor vendor = new NpcVendor { Entry = entry, Slot = packet.ReadInt32("Muid", i), Type = (uint)packet.ReadInt32("Type", i) }; int maxCount = packet.ReadInt32("Quantity", i); packet.ReadInt64("Price", i); packet.ReadInt32("Durability", i); int buyCount = packet.ReadInt32("StackCount", i); vendor.ExtendedCost = packet.ReadUInt32("ExtendedCostID", i); vendor.PlayerConditionID = packet.ReadUInt32("PlayerConditionFailed", i); vendor.Item = Substructures.ItemHandler.ReadItemInstance(packet, i).ItemID; vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = (uint)buyCount; } Storage.NpcVendors.Add(vendor, packet.TimeSpan); } CoreParsers.NpcHandler.LastGossipOption.Reset(); CoreParsers.NpcHandler.TempGossipOptionPOI.Reset(); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = new byte[8]; packet.StartBitStream(guid, 5, 4, 7, 1, 2, 3); var itemCount = packet.ReadBits("Item Count", 18); var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; for (int i = 0; i < itemCount; ++i) { hasCondition[i] = !packet.ReadBit(); hasExtendedCost[i] = !packet.ReadBit(); packet.ReadBit("Unk bit", i); } packet.StartBitStream(guid, 6, 0); packet.ResetBitReader(); packet.ReadXORBytes(guid, 3, 4); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (int i = 0; i < itemCount; ++i) { var vendorItem = new VendorItem(); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); packet.ReadInt32("Item Upgrade ID", i); packet.ReadInt32("Display ID", i); var maxCount = packet.ReadInt32("Max Count", i); var buyCount = packet.ReadUInt32("Buy Count", i); packet.ReadInt32("Price", i); if (hasCondition[i]) { packet.ReadInt32("Condition ID", i); } vendorItem.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency packet.ReadInt32("Max Durability", i); if (hasExtendedCost[i]) { vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); } vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB if (vendorItem.Type == 2) { vendorItem.MaxCount = (int)buyCount; } npcVendor.VendorItems.Add(vendorItem); } packet.ReadXORBytes(guid, 1, 2, 7); packet.ReadByte("Unk Byte"); packet.ReadXORBytes(guid, 6, 0, 5); packet.WriteGuid("GUID", guid); var GUID = new Guid(BitConverter.ToUInt64(guid, 0)); Storage.NpcVendors.Add(GUID.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var guid = new byte[8]; int count = (int)packet.ReadBits(18); guid[0] = packet.ReadBit(); var hasExtendedCost = new bool[count]; var hasCondition = new bool[count]; for (int i = 0; i < count; ++i) { packet.ReadBit("Unk bit", i); hasExtendedCost[i] = !packet.ReadBit(); hasCondition[i] = !packet.ReadBit(); } guid[3] = packet.ReadBit(); guid[7] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[5] = packet.ReadBit(); guid[2] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[4] = packet.ReadBit(); packet.ReadXORByte(guid, 7); packet.ReadXORByte(guid, 6); var tempList = new List <NpcVendor>(); for (int i = 0; i < count; ++i) { NpcVendor vendor = new NpcVendor { Type = packet.ReadUInt32("Type", i) }; uint buyCount = packet.ReadUInt32("Buy Count", i); int maxCount = packet.ReadInt32("Max Count", i); vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = buyCount; } packet.ReadInt32("Display ID", i); vendor.Slot = packet.ReadInt32("Item Position", i); packet.ReadInt32("Max Durability", i); packet.ReadInt32("Price", i); if (hasExtendedCost[i]) { vendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); } packet.ReadInt32("Item Upgrade ID", i); vendor.Item = packet.ReadInt32 <ItemId>("Item ID", i); if (hasCondition[i]) { vendor.PlayerConditionID = packet.ReadUInt32("Condition ID", i); } tempList.Add(vendor); } packet.ReadByte("Byte28"); packet.ReadXORByte(guid, 2); packet.ReadXORByte(guid, 3); packet.ReadXORByte(guid, 5); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 0); packet.ReadXORByte(guid, 4); packet.WriteGuid("Guid", guid); uint entry = packet.WriteGuid("GUID", guid).GetEntry(); tempList.ForEach(v => { v.Entry = entry; Storage.NpcVendors.Add(v, packet.TimeSpan); }); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guidBytes = new byte[8]; guidBytes[4] = packet.ReadBit(); var itemCount = packet.ReadBits("Item Count", 18); var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; var hasCondition2 = new bool[itemCount]; for (int i = 0; i < itemCount; ++i) { hasCondition[i] = !packet.ReadBit(); hasCondition2[i] = !packet.ReadBit(); hasExtendedCost[i] = !packet.ReadBit(); } guidBytes[1] = packet.ReadBit(); guidBytes[6] = packet.ReadBit(); guidBytes[2] = packet.ReadBit(); guidBytes[5] = packet.ReadBit(); guidBytes[7] = packet.ReadBit(); guidBytes[0] = packet.ReadBit(); guidBytes[3] = packet.ReadBit(); packet.ReadXORByte(guidBytes, 3); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (int i = 0; i < itemCount; ++i) { var vendorItem = new VendorItem(); //packet.ReadInt32("Max Durability", i); packet.ReadInt32("Unk1", i); vendorItem.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency var buyCount = packet.ReadUInt32("Buy Count", i); if (hasExtendedCost[i]) { vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); } packet.ReadInt32("Price", i); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); packet.ReadInt32("LeftInStock", i); packet.ReadInt32("Unk2", i); packet.ReadInt32("Display ID", i); /*if (hasCondition[i]) * packet.ReadInt32("Condition ID", i); * var maxCount = packet.ReadInt32("Max Count", i); * vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB * * if (vendorItem.Type == 2) * vendorItem.MaxCount = (int)buyCount;*/ npcVendor.VendorItems.Add(vendorItem); } packet.ReadXORByte(guidBytes, 6); packet.ReadXORByte(guidBytes, 0); packet.ReadXORByte(guidBytes, 2); packet.ReadXORByte(guidBytes, 5); packet.ReadByte("rawItemCount"); packet.ReadXORByte(guidBytes, 1); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 7); var guid = new Guid(BitConverter.ToUInt64(guidBytes, 0)); packet.WriteLine("GUID: {0}", guid); Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var guid = new byte[8]; guid[5] = packet.ReadBit(); guid[7] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[3] = packet.ReadBit(); guid[6] = packet.ReadBit(); uint count = packet.ReadBits(18); var unkBit = new uint[count]; var hasExtendedCost = new bool[count]; var hasCondition = new bool[count]; for (int i = 0; i < count; ++i) { unkBit[i] = packet.ReadBit(); hasExtendedCost[i] = !packet.ReadBit(); // +44 hasCondition[i] = !packet.ReadBit(); // +36 } guid[4] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[2] = packet.ReadBit(); packet.ReadByte("Byte10"); var tempList = new List <NpcVendor>(); for (int i = 0; i < count; ++i) { NpcVendor vendor = new NpcVendor(); packet.AddValue("unkBit", unkBit[i], i); packet.ReadInt32("Max Durability", i); // +16 packet.ReadInt32("Price", i); // +20 vendor.Type = packet.ReadUInt32("Type", i); // +4 int maxCount = packet.ReadInt32("Max Count", i); // +24 vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB packet.ReadInt32("Display ID", i); // +12 uint buyCount = packet.ReadUInt32("Buy Count", i); // +28 if (vendor.Type == 2) { vendor.MaxCount = buyCount; } vendor.Item = packet.ReadInt32 <ItemId>("Item ID", i); // +8 if (hasExtendedCost[i]) { vendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); // +36 } packet.ReadInt32("Item Upgrade ID", i); // +32 if (hasCondition[i]) { vendor.PlayerConditionID = packet.ReadUInt32("Condition ID", i); // +40 } vendor.Slot = packet.ReadInt32("Item Position", i); // +0 tempList.Add(vendor); } packet.ParseBitStream(guid, 3, 7, 0, 6, 2, 1, 4, 5); uint entry = packet.WriteGuid("Guid", guid).GetEntry(); tempList.ForEach(v => { v.Entry = entry; Storage.NpcVendors.Add(v, packet.TimeSpan); }); }
public static void HandleVendorInventoryList(Packet packet) { var guid = new byte[8]; packet.StartBitStream(guid, 5, 4, 7, 1, 2, 3); uint itemCount = packet.ReadBits("Item Count", 18); var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; for (int i = 0; i < itemCount; ++i) { hasCondition[i] = !packet.ReadBit(); hasExtendedCost[i] = !packet.ReadBit(); packet.ReadBit("Unk bit", i); } packet.StartBitStream(guid, 6, 0); packet.ResetBitReader(); packet.ReadXORBytes(guid, 3, 4); var tempList = new List <NpcVendor>(); for (int i = 0; i < itemCount; ++i) { NpcVendor vendor = new NpcVendor { Item = packet.ReadInt32 <ItemId>("Item ID", i), Slot = packet.ReadInt32("Item Position", i) }; packet.ReadInt32("Item Upgrade ID", i); packet.ReadInt32("Display ID", i); int maxCount = packet.ReadInt32("Max Count", i); uint buyCount = packet.ReadUInt32("Buy Count", i); packet.ReadInt32("Price", i); if (hasCondition[i]) { packet.ReadInt32("Condition ID", i); } vendor.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency packet.ReadInt32("Max Durability", i); if (hasExtendedCost[i]) { vendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); } vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = buyCount; } tempList.Add(vendor); } packet.ReadXORBytes(guid, 1, 2, 7); packet.ReadByte("Unk Byte"); packet.ReadXORBytes(guid, 6, 0, 5); uint entry = packet.WriteGuid("GUID", guid).GetEntry(); tempList.ForEach(v => { v.Entry = entry; Storage.NpcVendors.Add(v, packet.TimeSpan); }); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = new byte[8]; packet.ReadByte("Byte18"); guid[1] = packet.ReadBit(); guid[5] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[2] = packet.ReadBit(); var itemCount = packet.ReadBits("itemCount", 18); guid[4] = packet.ReadBit(); var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; for (int i = 0; i < itemCount; ++i) { hasExtendedCost[i] = !packet.ReadBit(); hasCondition[i] = !packet.ReadBit(); packet.ReadBit("Unk bit", i); } guid[3] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[7] = packet.ReadBit(); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (int i = 0; i < itemCount; ++i) { var vendorItem = new VendorItem(); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); if (hasCondition[i]) { packet.ReadInt32("Condition ID", i); } packet.ReadInt32("Price", i); if (hasExtendedCost[i]) { vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); } packet.ReadInt32("Display ID", i); var buyCount = packet.ReadUInt32("Buy Count", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); var maxCount = packet.ReadInt32("Max Count", i); vendorItem.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency packet.ReadInt32("Item Upgrade ID", i); packet.ReadInt32("Max Durability", i); npcVendor.VendorItems.Add(vendorItem); } packet.ParseBitStream(guid, 0, 2, 1, 3, 5, 7, 4, 6); packet.WriteGuid("Guid", guid); var vendorGUID = new Guid(BitConverter.ToUInt64(guid, 0)); Storage.NpcVendors.Add(vendorGUID.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var guid = new byte[8]; packet.ReadByte("Byte18"); guid[1] = packet.ReadBit(); guid[5] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[2] = packet.ReadBit(); uint count = packet.ReadBits("itemCount", 18); guid[4] = packet.ReadBit(); var hasExtendedCost = new bool[count]; var hasCondition = new bool[count]; for (int i = 0; i < count; ++i) { hasExtendedCost[i] = !packet.ReadBit(); hasCondition[i] = !packet.ReadBit(); packet.ReadBit("Unk bit", i); } guid[3] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[7] = packet.ReadBit(); var tempList = new List <NpcVendor>(); for (int i = 0; i < count; ++i) { NpcVendor vendor = new NpcVendor(); vendor.Item = packet.ReadInt32 <ItemId>("Item ID", i); if (hasCondition[i]) { vendor.PlayerConditionID = packet.ReadUInt32("Condition ID", i); } packet.ReadInt32("Price", i); if (hasExtendedCost[i]) { vendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); } packet.ReadInt32("Display ID", i); uint buyCount = packet.ReadUInt32("Buy Count", i); vendor.Slot = packet.ReadInt32("Item Position", i); int maxCount = packet.ReadInt32("Max Count", i); vendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB if (vendor.Type == 2) { vendor.MaxCount = buyCount; } vendor.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency packet.ReadInt32("Item Upgrade ID", i); packet.ReadInt32("Max Durability", i); tempList.Add(vendor); } packet.ParseBitStream(guid, 0, 2, 1, 3, 5, 7, 4, 6); uint entry = packet.WriteGuid("GUID", guid).GetEntry(); tempList.ForEach(v => { v.Entry = entry; Storage.NpcVendors.Add(v, packet.TimeSpan); }); CoreParsers.NpcHandler.LastGossipOption.Reset(); CoreParsers.NpcHandler.TempGossipOptionPOI.Reset(); }
public static void HandleVendorInventoryList422(Packet packet) { var npcVendor = new NpcVendor(); var bits = new bool[8]; for (int c = 7; c >= 0; c--) { bits[c] = packet.ReadBit(); } var bytes = new byte[8]; // Data - real // E7| 30 64 26 |A0| EE F0 31 = F1 30 31 EF 00 00 27 65 // 7 6 5 4 3 2 1 0 // (E7 = 11100111) // If there is any error, change bytes[3] to 2 and bytes[2] to 3 var itemCount = packet.ReadUInt32("Item Count"); if (bits[7]) { bytes[5] = (byte)(packet.ReadByte() ^ 1); } if (bits[6]) { bytes[0] = (byte)(packet.ReadByte() ^ 1); } if (bits[5]) { bytes[1] = (byte)(packet.ReadByte() ^ 1); } if (bits[4]) { bytes[3] = (byte)(packet.ReadByte() ^ 1); } packet.ReadByte("Unk Byte"); if (bits[3]) { bytes[2] = (byte)(packet.ReadByte() ^ 1); } if (bits[2]) { bytes[4] = (byte)(packet.ReadByte() ^ 1); } if (bits[1]) { bytes[7] = (byte)(packet.ReadByte() ^ 1); } if (bits[0]) { bytes[6] = (byte)(packet.ReadByte() ^ 1); } var guid = new Guid(BitConverter.ToUInt64(bytes, 0)); packet.Writer.WriteLine("GUID: {0}", guid); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (var i = 0; i < itemCount; i++) { var vendorItem = new VendorItem(); packet.ReadInt32("Max Durability", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); packet.ReadInt32("Unk Int32 1", i); packet.ReadInt32("Display ID", i); vendorItem.MaxCount = packet.ReadInt32("Max Count", i); vendorItem.BuyCount = packet.ReadUInt32("Buy Count", i); vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); packet.ReadInt32("Unk Int32 2", i); packet.ReadInt32("Price", i); npcVendor.VendorItems.Add(vendorItem); } Stuffing.NpcVendors.TryAdd(guid.GetEntry(), npcVendor); }
public static void HandleVendorInventoryList434(Packet packet) { var guidBytes = new byte[8]; guidBytes[1] = packet.ReadBit(); guidBytes[0] = packet.ReadBit(); uint count = packet.ReadBits("Item Count", 21); guidBytes[3] = packet.ReadBit(); guidBytes[6] = packet.ReadBit(); guidBytes[5] = packet.ReadBit(); guidBytes[2] = packet.ReadBit(); guidBytes[7] = packet.ReadBit(); var hasExtendedCost = new bool[count]; var hasCondition = new bool[count]; for (int i = 0; i < count; ++i) { hasExtendedCost[i] = !packet.ReadBit(); hasCondition[i] = !packet.ReadBit(); } guidBytes[4] = packet.ReadBit(); var tempList = new List <NpcVendor>(); for (int i = 0; i < count; ++i) { NpcVendor npcVendor = new NpcVendor { Slot = packet.ReadInt32("Item Position", i) }; packet.ReadInt32("Max Durability", i); if (hasExtendedCost[i]) { npcVendor.ExtendedCost = packet.ReadUInt32("Extended Cost", i); } npcVendor.Item = packet.ReadInt32 <ItemId>("Item ID", i); npcVendor.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency packet.ReadInt32("Price", i); packet.ReadInt32("Display ID", i); if (hasCondition[i]) { packet.ReadInt32("Row ID", i); } int maxCount = packet.ReadInt32("Max Count", i); npcVendor.MaxCount = maxCount == -1 ? 0 : (uint)maxCount; // TDB uint buyCount = packet.ReadUInt32("Buy Count", i); if (npcVendor.Type == 2) { npcVendor.MaxCount = buyCount; } tempList.Add(npcVendor); } packet.ReadXORByte(guidBytes, 5); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 1); packet.ReadXORByte(guidBytes, 0); packet.ReadXORByte(guidBytes, 6); packet.ReadByte("Unk Byte"); packet.ReadXORByte(guidBytes, 2); packet.ReadXORByte(guidBytes, 3); packet.ReadXORByte(guidBytes, 7); uint entry = packet.WriteGuid("GUID", guidBytes).GetEntry(); tempList.ForEach(v => { v.Entry = entry; Storage.NpcVendors.Add(v, packet.TimeSpan); }); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = packet.ReadPackedGuid128("VendorGUID"); packet.ReadByte("Reason"); var int9 = packet.ReadInt32("VendorItems"); npcVendor.VendorItems = new List <VendorItem>(int9); for (var i = 0; i < int9; ++i) { var vendorItem = new VendorItem(); vendorItem.Slot = (uint)packet.ReadInt32("Muid", i); vendorItem.Type = (uint)packet.ReadInt32("Type", i); // ItemInstance //if (ItemInstance) { vendorItem.ItemId = (uint)packet.ReadEntry <Int32>(StoreNameType.Item, "ItemID", i); packet.ReadUInt32("RandomPropertiesSeed", i); packet.ReadUInt32("RandomPropertiesID", i); packet.ResetBitReader(); var hasBonuses = packet.ReadBit("HasItemBonus", i); var hasModifications = packet.ReadBit("HasModifications", i); if (hasBonuses) { packet.ReadByte("Context", i); var bonusCount = packet.ReadUInt32(); for (var j = 0; j < bonusCount; ++j) { packet.ReadUInt32("BonusListID", i, j); } } if (hasModifications) { var modificationCount = packet.ReadUInt32() / 4; for (var j = 0; j < modificationCount; ++j) { packet.ReadUInt32("Modification", i, j); } } } var maxCount = packet.ReadInt32("Quantity", i); packet.ReadInt32("Price", i); packet.ReadInt32("Durability", i); var buyCount = packet.ReadInt32("StackCount", i); vendorItem.ExtendedCostId = (uint)packet.ReadInt32("ExtendedCostID", i); packet.ReadInt32("PlayerConditionFailed", i); packet.ResetBitReader(); packet.ReadBit("DoNotFilterOnVendor", i); vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB if (vendorItem.Type == 2) { vendorItem.MaxCount = (int)buyCount; } npcVendor.VendorItems.Add(vendorItem); } Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList434(Packet packet) { var npcVendor = new NpcVendor(); var guidBytes = new byte[8]; guidBytes[1] = packet.ReadBit(); guidBytes[0] = packet.ReadBit(); var itemCount = packet.ReadBits("Item Count", 21); guidBytes[3] = packet.ReadBit(); guidBytes[6] = packet.ReadBit(); guidBytes[5] = packet.ReadBit(); guidBytes[2] = packet.ReadBit(); guidBytes[7] = packet.ReadBit(); var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; for (int i = 0; i < itemCount; ++i) { hasExtendedCost[i] = !packet.ReadBit(); hasCondition[i] = !packet.ReadBit(); } guidBytes[4] = packet.ReadBit(); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (int i = 0; i < itemCount; ++i) { var vendorItem = new VendorItem { Slot = packet.ReadUInt32("Item Position", i) }; packet.ReadInt32("Max Durability", i); if (hasExtendedCost[i]) { vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); } vendorItem.ItemId = (uint)packet.ReadInt32 <ItemId>("Item ID", i); vendorItem.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency packet.ReadInt32("Price", i); packet.ReadInt32("Display ID", i); if (hasCondition[i]) { packet.ReadInt32("Condition ID", i); } var maxCount = packet.ReadInt32("Max Count", i); vendorItem.MaxCount = maxCount == -1 ? 0 : maxCount; // TDB var buyCount = packet.ReadUInt32("Buy Count", i); if (vendorItem.Type == 2) { vendorItem.MaxCount = (int)buyCount; } npcVendor.VendorItems.Add(vendorItem); } packet.ReadXORByte(guidBytes, 5); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 1); packet.ReadXORByte(guidBytes, 0); packet.ReadXORByte(guidBytes, 6); packet.ReadByte("Unk Byte"); packet.ReadXORByte(guidBytes, 2); packet.ReadXORByte(guidBytes, 3); packet.ReadXORByte(guidBytes, 7); var guid = packet.WriteGuid("GUID", guidBytes); Storage.NpcVendors.Add(guid.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = new byte[8]; var itemCount = (int)packet.ReadBits(18); guid[0] = packet.ReadBit(); var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; for (int i = 0; i < itemCount; ++i) { packet.ReadBit("Unk bit", i); hasExtendedCost[i] = !packet.ReadBit(); hasCondition[i] = !packet.ReadBit(); } guid[3] = packet.ReadBit(); guid[7] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[5] = packet.ReadBit(); guid[2] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[4] = packet.ReadBit(); packet.ReadXORByte(guid, 7); packet.ReadXORByte(guid, 6); npcVendor.VendorItems = new List <VendorItem>(itemCount); for (int i = 0; i < itemCount; ++i) { var vendorItem = new VendorItem(); vendorItem.Type = packet.ReadUInt32("Type", i); // 1 - item, 2 - currency var buyCount = packet.ReadUInt32("Buy Count", i); var maxCount = packet.ReadInt32("Max Count", i); packet.ReadInt32("Display ID", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); packet.ReadInt32("Max Durability", i); packet.ReadInt32("Price", i); if (hasExtendedCost[i]) { vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); } packet.ReadInt32("Item Upgrade ID", i); vendorItem.ItemId = (uint)packet.ReadInt32 <ItemId>("Item ID", i); if (hasCondition[i]) { packet.ReadInt32("Condition ID", i); } npcVendor.VendorItems.Add(vendorItem); } packet.ReadByte("Byte28"); packet.ReadXORByte(guid, 2); packet.ReadXORByte(guid, 3); packet.ReadXORByte(guid, 5); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 0); packet.ReadXORByte(guid, 4); packet.WriteGuid("Guid", guid); var vendorGUID = new WowGuid64(BitConverter.ToUInt64(guid, 0)); Storage.NpcVendors.Add(vendorGUID.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList(Packet packet) { var npcVendor = new NpcVendor(); var guid = new byte[8]; guid[5] = packet.ReadBit(); guid[7] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[3] = packet.ReadBit(); guid[6] = packet.ReadBit(); var itemCount = packet.ReadBits(18); var unkBit = new uint[itemCount]; var hasExtendedCost = new bool[itemCount]; var hasCondition = new bool[itemCount]; for (var i = 0; i < itemCount; ++i) { unkBit[i] = packet.ReadBit(); hasExtendedCost[i] = !packet.ReadBit(); // +44 hasCondition[i] = !packet.ReadBit(); // +36 } guid[4] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[2] = packet.ReadBit(); packet.ReadByte("Byte10"); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (var i = 0; i < itemCount; ++i) { var vendorItem = new VendorItem(); packet.AddValue("unkBit", unkBit[i], i); packet.ReadInt32("Max Durability", i); // +16 packet.ReadInt32("Price", i); // +20 vendorItem.Type = packet.ReadUInt32("Type", i); // +4 var maxCount = packet.ReadInt32("Max Count", i); // +24 packet.ReadInt32("Display ID", i); // +12 var buyCount = packet.ReadUInt32("Buy Count", i); // +28 vendorItem.ItemId = (uint)packet.ReadEntry <Int32>(StoreNameType.Item, "Item ID", i); // +8 if (hasExtendedCost[i]) { vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); // +36 } packet.ReadInt32("Item Upgrade ID", i); // +32 if (hasCondition[i]) { packet.ReadInt32("Condition ID", i); // +40 } vendorItem.Slot = packet.ReadUInt32("Item Position", i); // +0 npcVendor.VendorItems.Add(vendorItem); } packet.ParseBitStream(guid, 3, 7, 0, 6, 2, 1, 4, 5); packet.WriteGuid("Guid", guid); var vendorGUID = new WowGuid64(BitConverter.ToUInt64(guid, 0)); Storage.NpcVendors.Add(vendorGUID.GetEntry(), npcVendor, packet.TimeSpan); }
public static void HandleVendorInventoryList422(Packet packet) { var npcVendor = new NpcVendor(); var guidBytes = new byte[8]; guidBytes[5] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[6] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[1] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[2] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[3] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[0] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[7] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[4] = (byte)(packet.ReadBit() ? 1 : 0); if (guidBytes[2] != 0) { guidBytes[2] ^= packet.ReadByte(); } if (guidBytes[3] != 0) { guidBytes[3] ^= packet.ReadByte(); } var itemCount = packet.ReadUInt32("Item Count"); if (guidBytes[5] != 0) { guidBytes[5] ^= packet.ReadByte(); } if (guidBytes[0] != 0) { guidBytes[0] ^= packet.ReadByte(); } if (guidBytes[1] != 0) { guidBytes[1] ^= packet.ReadByte(); } packet.ReadByte("Unk Byte"); if (guidBytes[4] != 0) { guidBytes[4] ^= packet.ReadByte(); } if (guidBytes[7] != 0) { guidBytes[7] ^= packet.ReadByte(); } if (guidBytes[6] != 0) { guidBytes[6] ^= packet.ReadByte(); } var guid = new Guid(BitConverter.ToUInt64(guidBytes, 0)); packet.WriteLine("GUID: {0}", guid); npcVendor.VendorItems = new List <VendorItem>((int)itemCount); for (var i = 0; i < itemCount; i++) { var vendorItem = new VendorItem(); packet.ReadInt32("Max Durability", i); vendorItem.Slot = packet.ReadUInt32("Item Position", i); vendorItem.ItemId = (uint)packet.ReadEntryWithName <Int32>(StoreNameType.Item, "Item ID", i); packet.ReadInt32("Unk Int32 1", i); packet.ReadInt32("Display ID", i); vendorItem.MaxCount = packet.ReadInt32("Max Count", i); packet.ReadUInt32("Buy Count", i); vendorItem.ExtendedCostId = packet.ReadUInt32("Extended Cost", i); packet.ReadInt32("Unk Int32 2", i); packet.ReadInt32("Price", i); npcVendor.VendorItems.Add(vendorItem); } Storage.NpcVendors.TryAdd(guid.GetEntry(), npcVendor); }