Exemple #1
0
        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);
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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;
        }
Exemple #6
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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();
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
            });
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
            });
        }
Exemple #15
0
        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);
            });
        }
Exemple #16
0
        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);
        }
Exemple #17
0
        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();
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        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);
            });
        }
Exemple #20
0
        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);
        }
Exemple #22
0
        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);
        }