--[[ Project: Spicy Scripts (Vice City 2) - Clean UI & Optimized Combat/Movement Platform: Delta / Mobile Friendly ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Lighting = game:GetService("Lighting") local Workspace = game:GetService("Workspace") local CoreGui = game:GetService("CoreGui") local TeleportService = game:GetService("TeleportService") local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera -- Configuration State Table local Config = { AimbotEnabled = false, AimSmoothness = 1, FOVEnabled = false, FOVSize = 100, WallCheck = true, TeamCheck = true, ESPEnabled = false, SpeedEnabled = false, SpeedValue = 25, InfJumpEnabled = false, GodModeEnabled = false, InvisibilityEnabled = false, NoclipEnabled = false, FogEnabled = true } -- Cleanup any previous instances completely pcall(function() if CoreGui:FindFirstChild("SpicyScriptsUI") then CoreGui.SpicyScriptsUI:Destroy() end if LocalPlayer.PlayerGui:FindFirstChild("SpicyScriptsUI") then LocalPlayer.PlayerGui.SpicyScriptsUI:Destroy() end end) -- Create Protected CoreGui ScreenGui with Fallback to PlayerGui local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "SpicyScriptsUI" ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local success = pcall(function() ScreenGui.Parent = CoreGui end) if not success or ScreenGui.Parent ~= CoreGui then ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") end --- ========================================== --- DRAGGABLE PEPPER OPEN/CLOSE BUTTON --- ========================================== local ToggleButton = Instance.new("TextButton") ToggleButton.Name = "PepperToggle" ToggleButton.Size = UDim2.new(0, 55, 0, 55) ToggleButton.Position = UDim2.new(0, 40, 0, 150) ToggleButton.BackgroundColor3 = Color3.fromRGB(30, 30, 40) ToggleButton.BorderColor3 = Color3.fromRGB(255, 90, 90) ToggleButton.BorderSizePixel = 2 ToggleButton.Text = "🌶️" ToggleButton.TextSize = 26 ToggleButton.ZIndex = 10 ToggleButton.Parent = ScreenGui local ToggleCorner = Instance.new("UICorner") ToggleCorner.CornerRadius = UDim.new(1, 0) ToggleCorner.Parent = ToggleButton local dragging, dragInput, dragStart, startPos ToggleButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = ToggleButton.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) ToggleButton.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart ToggleButton.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) --- ========================================== --- MAIN FRAME & INTERFACE SETUP (Starts Hidden) --- ========================================== local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 540, 0, 360) MainFrame.Position = UDim2.new(0.5, -270, 0.5, -180) MainFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 24) MainFrame.BorderSizePixel = 0 MainFrame.Visible = false MainFrame.ZIndex = 5 MainFrame.Parent = ScreenGui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 10) MainCorner.Parent = MainFrame ToggleButton.MouseButton1Click:Connect(function() MainFrame.Visible = not MainFrame.Visible end) local TopBar = Instance.new("Frame") TopBar.Size = UDim2.new(1, 0, 0, 42) TopBar.BackgroundColor3 = Color3.fromRGB(24, 24, 32) TopBar.BorderSizePixel = 0 TopBar.ZIndex = 6 TopBar.Parent = MainFrame local TopCorner = Instance.new("UICorner") TopCorner.CornerRadius = UDim.new(0, 10) TopCorner.Parent = TopBar local TopCover = Instance.new("Frame") TopCover.Size = UDim2.new(1, 0, 0, 10) TopCover.Position = UDim2.new(0, 0, 1, -10) TopCover.BackgroundColor3 = Color3.fromRGB(24, 24, 32) TopCover.BorderSizePixel = 0 TopCover.ZIndex = 6 TopCover.Parent = TopBar local TitleLabel = Instance.new("TextLabel") TitleLabel.Size = UDim2.new(0, 300, 1, 0) TitleLabel.Position = UDim2.new(0, 15, 0, 0) TitleLabel.BackgroundTransparency = 1 TitleLabel.Font = Enum.Font.GothamBold TitleLabel.Text = "🌶️ SPICY SCRIPTS | Vice City 2" TitleLabel.TextColor3 = Color3.fromRGB(255, 90, 90) TitleLabel.TextSize = 14 TitleLabel.TextXAlignment = Enum.TextXAlignment.Left TitleLabel.ZIndex = 7 TitleLabel.Parent = TopBar local Sidebar = Instance.new("ScrollingFrame") Sidebar.Size = UDim2.new(0, 135, 1, -50) Sidebar.Position = UDim2.new(0, 0, 0, 48) Sidebar.BackgroundTransparency = 1 Sidebar.CanvasSize = UDim2.new(0, 0, 0, 0) Sidebar.ScrollBarThickness = 2 Sidebar.ZIndex = 6 Sidebar.Parent = MainFrame local SidebarLayout = Instance.new("UIListLayout") SidebarLayout.SortOrder = Enum.SortOrder.LayoutOrder SidebarLayout.Padding = UDim.new(0, 6) SidebarLayout.Parent = Sidebar local ContainerHolder = Instance.new("Frame") ContainerHolder.Size = UDim2.new(1, -145, 1, -50) ContainerHolder.Position = UDim2.new(0, 140, 0, 48) ContainerHolder.BackgroundTransparency = 1 ContainerHolder.ZIndex = 6 ContainerHolder.Parent = MainFrame local Pages = {} local TabButtons = {} local function CreateCategory(name) local TabBtn = Instance.new("TextButton") TabBtn.Size = UDim2.new(1, -10, 0, 36) TabBtn.BackgroundColor3 = Color3.fromRGB(28, 28, 38) TabBtn.BorderSizePixel = 0 TabBtn.Font = Enum.Font.GothamSemibold TabBtn.Text = name TabBtn.TextColor3 = Color3.fromRGB(170, 170, 185) TabBtn.TextSize = 13 TabBtn.ZIndex = 6 TabBtn.Parent = Sidebar local TabCorner = Instance.new("UICorner") TabCorner.CornerRadius = UDim.new(0, 6) TabCorner.Parent = TabBtn local Page = Instance.new("ScrollingFrame") Page.Size = UDim2.new(1, 0, 1, 0) Page.BackgroundTransparency = 1 Page.CanvasSize = UDim2.new(0, 0, 0, 0) Page.ScrollBarThickness = 3 Page.Visible = false Page.ZIndex = 6 Page.Parent = ContainerHolder local PageLayout = Instance.new("UIListLayout") PageLayout.SortOrder = Enum.SortOrder.LayoutOrder PageLayout.Padding = UDim.new(0, 8) PageLayout.Parent = Page PageLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() Page.CanvasSize = UDim2.new(0, 0, 0, PageLayout.AbsoluteContentSize.Y + 15) end) TabBtn.MouseButton1Click:Connect(function() for _, p in pairs(Pages) do p.Visible = false end for _, b in pairs(TabButtons) do b.BackgroundColor3 = Color3.fromRGB(28, 28, 38) b.TextColor3 = Color3.fromRGB(170, 170, 185) end Page.Visible = true TabBtn.BackgroundColor3 = Color3.fromRGB(255, 80, 80) TabBtn.TextColor3 = Color3.fromRGB(255, 255, 255) end) table.insert(Pages, Page) table.insert(TabButtons, TabBtn) if #Pages == 1 then Page.Visible = true TabBtn.BackgroundColor3 = Color3.fromRGB(255, 80, 80) TabBtn.TextColor3 = Color3.fromRGB(255, 255, 255) end return Page end local function AddToggle(page, text, default, callback) local ToggleBox = Instance.new("Frame") ToggleBox.Size = UDim2.new(1, -10, 0, 36) ToggleBox.BackgroundColor3 = Color3.fromRGB(24, 24, 32) ToggleBox.BorderSizePixel = 0 ToggleBox.ZIndex = 7 ToggleBox.Parent = page local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 6) Corner.Parent = ToggleBox local Label = Instance.new("TextLabel") Label.Size = UDim2.new(1, -55, 1, 0) Label.Position = UDim2.new(0, 12, 0, 0) Label.BackgroundTransparency = 1 Label.Font = Enum.Font.GothamMedium Label.Text = text Label.TextColor3 = Color3.fromRGB(210, 210, 225) Label.TextSize = 12 Label.TextXAlignment = Enum.TextXAlignment.Left Label.ZIndex = 7 Label.Parent = ToggleBox local Switch = Instance.new("TextButton") Switch.Size = UDim2.new(0, 38, 0, 20) Switch.Position = UDim2.new(1, -48, 0.5, -10) Switch.BackgroundColor3 = default and Color3.fromRGB(255, 80, 80) or Color3.fromRGB(45, 45, 58) Switch.Text = "" Switch.ZIndex = 7 Switch.Parent = ToggleBox local SwitchCorner = Instance.new("UICorner") SwitchCorner.CornerRadius = UDim.new(1, 0) SwitchCorner.Parent = Switch local state = default Switch.MouseButton1Click:Connect(function() state = not state Switch.BackgroundColor3 = state and Color3.fromRGB(255, 80, 80) or Color3.fromRGB(45, 45, 58) callback(state) end) end local function AddSlider(page, text, min, max, default, callback) local SliderBox = Instance.new("Frame") SliderBox.Size = UDim2.new(1, -10, 0, 52) SliderBox.BackgroundColor3 = Color3.fromRGB(24, 24, 32) SliderBox.BorderSizePixel = 0 SliderBox.ZIndex = 7 SliderBox.Parent = page local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 6) Corner.Parent = SliderBox local Label = Instance.new("TextLabel") Label.Size = UDim2.new(1, -20, 0, 20) Label.Position = UDim2.new(0, 12, 0, 5) Label.BackgroundTransparency = 1 Label.Font = Enum.Font.GothamMedium Label.Text = text .. ": " .. tostring(default) Label.TextColor3 = Color3.fromRGB(210, 210, 225) Label.TextSize = 12 Label.TextXAlignment = Enum.TextXAlignment.Left Label.ZIndex = 7 Label.Parent = SliderBox local Track = Instance.new("Frame") Track.Size = UDim2.new(1, -24, 0, 6) Track.Position = UDim2.new(0, 12, 0, 34) Track.BackgroundColor3 = Color3.fromRGB(45, 45, 58) Track.BorderSizePixel = 0 Track.ZIndex = 7 Track.Parent = SliderBox local TrackCorner = Instance.new("UICorner") TrackCorner.CornerRadius = UDim.new(1, 0) TrackCorner.Parent = Track local Fill = Instance.new("Frame") Fill.Size = UDim2.new(math.clamp((default - min) / (max - min), 0, 1), 0, 1, 0) Fill.BackgroundColor3 = Color3.fromRGB(255, 80, 80) Fill.BorderSizePixel = 0 Fill.ZIndex = 7 Fill.Parent = Track local FillCorner = Instance.new("UICorner") FillCorner.CornerRadius = UDim.new(1, 0) FillCorner.Parent = Fill local value = default local draggingSlider = false local function updateSlider(input) local pos = math.clamp((input.Position.X - Track.AbsolutePosition.X) / Track.AbsoluteSize.X, 0, 1) Fill.Size = UDim2.new(pos, 0, 1, 0) value = math.floor(min + ((max - min) * pos)) Label.Text = text .. ": " .. tostring(value) callback(value) end Track.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then draggingSlider = true updateSlider(input) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then draggingSlider = false end end) UserInputService.InputChanged:Connect(function(input) if draggingSlider and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateSlider(input) end end) end local function AddButton(page, text, callback) local Btn = Instance.new("TextButton") Btn.Size = UDim2.new(1, -10, 0, 36) Btn.BackgroundColor3 = Color3.fromRGB(28, 28, 38) Btn.BorderSizePixel = 0 Btn.Font = Enum.Font.GothamMedium Btn.Text = text Btn.TextColor3 = Color3.fromRGB(210, 210, 225) Btn.TextSize = 12 Btn.ZIndex = 7 Btn.Parent = page local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 6) Corner.Parent = Btn Btn.MouseButton1Click:Connect(callback) end --- ========================================== --- POPULATE TABS & CATEGORIES --- ========================================== -- 1. Aiming Category local AimingTab = CreateCategory("Aiming") AddToggle(AimingTab, "Aimbot Active", Config.AimbotEnabled, function(v) Config.AimbotEnabled = v end) AddToggle(AimingTab, "FOV Circle Display", Config.FOVEnabled, function(v) Config.FOVEnabled = v end) AddSlider(AimingTab, "FOV Size", 20, 400, Config.FOVSize, function(v) Config.FOVSize = v end) AddSlider(AimingTab, "Aim Smoothness (1-100)", 1, 100, Config.AimSmoothness, function(v) Config.AimSmoothness = v end) AddToggle(AimingTab, "Wall Check", Config.WallCheck, function(v) Config.WallCheck = v end) AddToggle(AimingTab, "Team Check", Config.TeamCheck, function(v) Config.TeamCheck = v end) AddToggle(AimingTab, "Player ESP Outline", Config.ESPEnabled, function(v) Config.ESPEnabled = v end) -- 2. Player Category local PlayerTab = CreateCategory("Player") AddToggle(PlayerTab, "Speed Boost", Config.SpeedEnabled, function(v) Config.SpeedEnabled = v end) AddSlider(PlayerTab, "Speed Value", 16, 100, Config.SpeedValue, function(v) Config.SpeedValue = v end) AddToggle(PlayerTab, "Infinite Jump", Config.InfJumpEnabled, function(v) Config.InfJumpEnabled = v end) AddToggle(PlayerTab, "God Mode (Bypass)", Config.GodModeEnabled, function(v) Config.GodModeEnabled = v end) AddToggle(PlayerTab, "Invisibility", Config.InvisibilityEnabled, function(v) Config.InvisibilityEnabled = v end) AddToggle(PlayerTab, "Noclip Walk", Config.NoclipEnabled, function(v) Config.NoclipEnabled = v end) -- 3. Settings Category local SettingsTab = CreateCategory("Settings") AddButton(SettingsTab, "Rejoin Server", function() TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, LocalPlayer) end) --- ========================================== --- BACKEND ENGINE & SYSTEM LOOPS --- ========================================== -- Mobile-safe FOV Circle Drawing Implementation local FOVCircle pcall(function() FOVCircle = Drawing.new("Circle") FOVCircle.Thickness = 1.5 FOVCircle.NumSides = 64 FOVCircle.Filled = false FOVCircle.Transparency = 0.7 FOVCircle.Color = Color3.fromRGB(255, 255, 255) FOVCircle.Visible = false end) RunService.RenderStepped:Connect(function() local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) if FOVCircle then if Config.FOVEnabled then FOVCircle.Visible = true FOVCircle.Radius = Config.FOVSize FOVCircle.Position = screenCenter else FOVCircle.Visible = false end end if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then local hum = LocalPlayer.Character.Humanoid if Config.SpeedEnabled then hum.WalkSpeed = Config.SpeedValue end if Config.GodModeEnabled then hum.MaxHealth = math.huge hum.Health = math.huge end if Config.InvisibilityEnabled then for _, part in pairs(LocalPlayer.Character:GetDescendants()) do if part:IsA("BasePart") or part:IsA("Decal") then part.Transparency = 1 end end end end end) RunService.Stepped:Connect(function() if Config.NoclipEnabled and LocalPlayer.Character then for _, part in pairs(LocalPlayer.Character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end end) UserInputService.JumpRequest:Connect(function() if Config.InfJumpEnabled and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then LocalPlayer.Character.Humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end) -- ESP Outlines RunService.RenderStepped:Connect(function() for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer then local char = player.Character if char then local hl = char:FindFirstChild("SpicyHighlight") if Config.ESPEnabled then if not hl then hl = Instance.new("Highlight") hl.Name = "SpicyHighlight" hl.Adornee = char hl.Parent = char end local isTeammate = (player.Team and LocalPlayer.Team and player.Team == LocalPlayer.Team) if isTeammate and Config.TeamCheck then hl.FillColor = Color3.fromRGB(0, 255, 0) hl.OutlineColor = Color3.fromRGB(200, 255, 200) else hl.FillColor = Color3.fromRGB(255, 50, 50) hl.OutlineColor = Color3.fromRGB(255, 200, 200) end hl.Enabled = true else if hl then hl.Enabled = false end end end end end end) local function IsVisible(targetPart) if not Config.WallCheck then return true end local origin = Camera.CFrame.Position local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Blacklist params.FilterDescendantsInstances = {LocalPlayer.Character, Camera} params.IgnoreWater = true local result = Workspace:Raycast(origin, targetPart.Position - origin, params) if result then if result.Instance:IsDescendantOf(targetPart.Parent) then return true end return false end return true end local function GetClosestTarget() local closestTarget = nil local shortestDistance = Config.FOVSize local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer then local skip = false if Config.TeamCheck and player.Team and LocalPlayer.Team and player.Team == LocalPlayer.Team then skip = true end if not skip and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local hum = player.Character:FindFirstChild("Humanoid") if hum and hum.Health > 0 then local targetPart = player.Character:FindFirstChild("Head") or player.Character.HumanoidRootPart local screenPos, onScreen = Camera:WorldToViewportPoint(targetPart.Position) if onScreen then local mouseDist = (Vector2.new(screenPos.X, screenPos.Y) - screenCenter).Magnitude if mouseDist < shortestDistance then if IsVisible(targetPart) then shortestDistance = mouseDist closestTarget = targetPart end end end end end end end return closestTarget end RunService.RenderStepped:Connect(function() if Config.AimbotEnabled then local target = GetClosestTarget() if target then local currentCFrame = Camera.CFrame local targetCFrame = CFrame.new(Camera.CFrame.Position, target.Position) local smoothFactor = math.clamp(Config.AimSmoothness, 1, 100) Camera.CFrame = currentCFrame:Lerp(targetCFrame, 1 / (smoothFactor * 0.1)) end end end)