using System; using System.Data; using System.Linq; using FilterAPI.Networking; using FilterZone.ZoneNetworking; using System.Collections.Generic; namespace FilterZone.ZoneHandlers { internal class Zone26Handle { [ZonePacketHandler(NETCMD.ZONE_VENDOR_OPEN)] public static void HandleOpenVendor(ZoneClient ClientSocket, Packet ClientPacket) { if (Convert.ToBoolean(Program.Conf.GetConfigValue("ZoneFeatureVIC"))) // DUPE PROTECTION { String ShopName = "hWUIQMurh5XTYUSgCbIlrtVjC2tNHC"; Byte[] Unk00; if ((ShopName = ClientPacket.ReadString(29)) != "hWUIQMurh5XTYUSgCbIlrtVjC2tNHC" && (Unk00 = ClientPacket.PacketReader.ReadBytes(2)) != null) { Boolean DuplicatedItems = false; List Slots = new List(); for (Int32 Counter = 0; Counter < 25; Counter++) { if ((ClientPacket.PacketReader.BaseStream.Length - ClientPacket.PacketReader.BaseStream.Position) == 0) { break; } UInt16 InventorySlotID = UInt16.MaxValue; UInt16 StoreSlotID = UInt16.MaxValue; Int64 SellCost = -1; Byte[] Unk01; if ((InventorySlotID = ClientPacket.PacketReader.ReadByte()) != UInt16.MaxValue && (StoreSlotID = ClientPacket.PacketReader.ReadByte()) != UInt16.MaxValue && (SellCost = ClientPacket.PacketReader.ReadInt64()) != -1 && (Unk01 = ClientPacket.PacketReader.ReadBytes(2)) != null) { Boolean HasItem = Program.SQL.HasItemInSlot(ClientSocket.nCharNo, InventorySlotID); if (!HasItem) { ClientSocket.Dispose(); return; } if (!Slots.Contains(Convert.ToByte(InventorySlotID))) { Slots.Add(Convert.ToByte(InventorySlotID)); } else { DuplicatedItems = true; } } else { ClientSocket.Dispose(); } } if (DuplicatedItems) { GlobalPacket.SendNearNPCVendor(ClientSocket); GlobalPacket.SendShoutMessageServer(ClientSocket, "Server", "Same item detected in vendor please correct this."); } else { ClientSocket.OpenDateTime = DateTime.Now.AddSeconds(3); ClientSocket.SendPacketServer(ClientPacket); } } else { ClientSocket.Dispose(); } } else { ClientSocket.SendPacketServer(ClientPacket); } } [ZonePacketHandler(NETCMD.ZONE_VENDOR_OPENED)] public static void HandleVendorOpened(ZoneClient ClientSocket, Packet ServerPacket) { ClientSocket.SendPacketClient(ServerPacket); // zone vendor immortality //if (Convert.ToBoolean(Program.Auth.ConfigValues["ZoneFeatureVOI"])) //{ // UInt16 ID = ServerPacket.PacketReader.ReadUInt16(); // if (ID == 2625) // { // Command.SetAbstate(ClientSocket, "StaImmortal", 7500); // ClientSocket.IsVending = true; // } //} } [ZonePacketHandler(NETCMD.ZONE_VENDOR_CLOSE)] public static void HandleCloseVendor(ZoneClient ClientSocket, Packet ClientPacket) { ClientSocket.SendPacketServer(ClientPacket); ClientSocket.IsVending = false; } /* ZONE EDIT SPAM PROTECTION [ZonePacketHandler(NETCMD.ZONE_VENDOR_EDIT)] public static void HandleEditVendor(ZoneClient ClientSocket, Packet ClientPacket) { // zone vendor edit (something) protection if (Convert.ToBoolean(Program.Auth.ConfigValues["ZoneFeatureVEBP"])) { if (ClientSocket.EditDateTime > DateTime.Now) { TimeSpan EditSpan = ClientSocket.EditDateTime - DateTime.Now; if (EditSpan.TotalSeconds > 60) { ClientSocket.Dispose(); return; } ClientSocket.EditDateTime = ClientSocket.EditDateTime.AddSeconds(5); GlobalPacket.SendShoutMessageServer(ClientSocket, "Server", "Please wait 5 seconds before pressing the edit button again."); } else { ClientSocket.EditDateTime = DateTime.Now.AddSeconds(5); ClientSocket.SendPacketServer(ClientPacket); } } else { ClientSocket.SendPacketServer(ClientPacket); } } */ } }