-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- β€’ Never log in on unofficial Roblox sites or lookalike domains. -- β€’ Real Roblox links use roblox.com (check the .com ending). -- β€’ Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] -- Stealth Gapper - Premium Vehicle Control GUI (FINAL PERFECTED) local Player = game:GetService("Players").LocalPlayer local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") -- CLEANUP: Remove any existing Stealth Gapper GUIs local function cleanupOldGUIs() for _, gui in pairs(Player.PlayerGui:GetChildren()) do if gui.Name == "StealthGapperGUI" or gui.Name == "VehicleDefenseGUI" then gui:Destroy() end end end cleanupOldGUIs() -- CONFIGURATION local TOGGLE_KEY = Enum.KeyCode.LeftControl local guiVisible = true -- Create GUI local screenGui = Instance.new("ScreenGui") screenGui.Name = "StealthGapperGUI" screenGui.Parent = Player.PlayerGui screenGui.ResetOnSpawn = false -- Main Container (this is what we hide/show) local mainContainer = Instance.new("Frame") mainContainer.Name = "MainContainer" mainContainer.Size = UDim2.new(0, 450, 0, 620) mainContainer.Position = UDim2.new(0, 20, 0.5, -310) mainContainer.BackgroundTransparency = 1 mainContainer.Visible = true mainContainer.Parent = screenGui -- Shadow local shadow = Instance.new("ImageLabel") shadow.Name = "Shadow" shadow.Size = UDim2.new(1.05, 0, 1.05, 0) shadow.Position = UDim2.new(-0.025, 0, -0.025, 0) shadow.BackgroundTransparency = 1 shadow.Image = "rbxassetid://1316042158" shadow.ImageColor3 = Color3.fromRGB(0, 0, 0) shadow.ImageTransparency = 0.6 shadow.ScaleType = Enum.ScaleType.Slice shadow.SliceCenter = Rect.new(10, 10, 10, 10) shadow.Parent = mainContainer -- Main Frame local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(1, 0, 1, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25) mainFrame.BorderSizePixel = 0 mainFrame.Parent = mainContainer local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 12) mainCorner.Parent = mainFrame -- Title Bar local titleBar = Instance.new("Frame") titleBar.Size = UDim2.new(1, 0, 0, 50) titleBar.BackgroundTransparency = 1 titleBar.Parent = mainFrame local title = Instance.new("TextLabel") title.Size = UDim2.new(0.6, 0, 1, 0) title.Position = UDim2.new(0, 15, 0, 0) title.BackgroundTransparency = 1 title.Text = "πŸ•ΆοΈ Stealth Gapper" title.TextColor3 = Color3.fromRGB(220, 220, 230) title.TextScaled = true title.Font = Enum.Font.GothamBold title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = titleBar local keybindLabel = Instance.new("TextLabel") keybindLabel.Size = UDim2.new(0, 0, 0, 20) keybindLabel.Position = UDim2.new(1, -110, 1, -25) keybindLabel.BackgroundTransparency = 1 keybindLabel.Text = "[LCtrl] Hide" keybindLabel.TextColor3 = Color3.fromRGB(80, 80, 100) keybindLabel.TextScaled = true keybindLabel.Font = Enum.Font.Gotham keybindLabel.Parent = titleBar -- Make draggable do local dragging, dragStart, startPos titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainContainer.Position end end) titleBar.InputEnded:Connect(function() dragging = false end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart mainContainer.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end -- Settings Container (Scrolling) local settingsContainer = Instance.new("ScrollingFrame") settingsContainer.Size = UDim2.new(1, -20, 1, -140) settingsContainer.Position = UDim2.new(0, 10, 0, 55) settingsContainer.BackgroundColor3 = Color3.fromRGB(15, 15, 20) settingsContainer.BackgroundTransparency = 0.3 settingsContainer.BorderSizePixel = 0 settingsContainer.ScrollBarThickness = 4 settingsContainer.Parent = mainFrame local settingsCorner = Instance.new("UICorner") settingsCorner.CornerRadius = UDim.new(0, 8) settingsCorner.Parent = settingsContainer settingsContainer.CanvasSize = UDim2.new(0, 0, 0, 700) -- SLIDER CREATOR - Smooth sliding (fully tested) local function createSlider(parent, yPos, labelText, minVal, maxVal, defaultVal, decimalPlaces, icon, callback) local frame = Instance.new("Frame") frame.Size = UDim2.new(1, -10, 0, 65) frame.Position = UDim2.new(0, 5, 0, yPos) frame.BackgroundTransparency = 1 frame.Parent = parent local label = Instance.new("TextLabel") label.Size = UDim2.new(0.6, 0, 0, 25) label.Position = UDim2.new(0, 0, 0, 0) label.BackgroundTransparency = 1 label.Text = icon .. " " .. labelText label.TextColor3 = Color3.fromRGB(200, 200, 210) label.TextScaled = true label.Font = Enum.Font.Gotham label.TextXAlignment = Enum.TextXAlignment.Left label.Parent = frame local valueDisplay = Instance.new("TextLabel") valueDisplay.Size = UDim2.new(0.3, 0, 0, 25) valueDisplay.Position = UDim2.new(0.7, 0, 0, 0) valueDisplay.BackgroundTransparency = 1 valueDisplay.Text = tostring(defaultVal) valueDisplay.TextColor3 = Color3.fromRGB(150, 150, 170) valueDisplay.TextScaled = true valueDisplay.Font = Enum.Font.GothamBold valueDisplay.TextXAlignment = Enum.TextXAlignment.Right valueDisplay.Parent = frame -- Track (Frame for visuals) local track = Instance.new("Frame") track.Size = UDim2.new(1, 0, 0, 8) track.Position = UDim2.new(0, 0, 0, 35) track.BackgroundColor3 = Color3.fromRGB(35, 35, 45) track.BorderSizePixel = 0 track.Parent = frame local trackCorner = Instance.new("UICorner") trackCorner.CornerRadius = UDim.new(0, 4) trackCorner.Parent = track -- Fill local fill = Instance.new("Frame") fill.Size = UDim2.new((defaultVal - minVal) / (maxVal - minVal), 0, 1, 0) fill.BackgroundColor3 = Color3.fromRGB(100, 100, 120) fill.BorderSizePixel = 0 fill.Parent = track local fillCorner = Instance.new("UICorner") fillCorner.CornerRadius = UDim.new(0, 4) fillCorner.Parent = fill -- Handle local handle = Instance.new("TextButton") handle.Size = UDim2.new(0, 20, 0, 20) handle.Position = UDim2.new((defaultVal - minVal) / (maxVal - minVal), -10, 0.5, -10) handle.BackgroundColor3 = Color3.fromRGB(180, 180, 190) handle.BorderSizePixel = 0 handle.Text = "" handle.AutoButtonColor = false handle.Parent = track local handleCorner = Instance.new("UICorner") handleCorner.CornerRadius = UDim.new(1, 0) handleCorner.Parent = handle -- Clickable overlay local clicker = Instance.new("TextButton") clicker.Size = UDim2.new(1, 0, 1, 0) clicker.Position = UDim2.new(0, 0, 0, 0) clicker.BackgroundTransparency = 1 clicker.Text = "" clicker.AutoButtonColor = false clicker.Parent = track local currentValue = defaultVal local isDragging = false local function updateSlider(input) if not track or not track.AbsolutePosition then return end local relativeX = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1) currentValue = minVal + (relativeX * (maxVal - minVal)) if decimalPlaces then currentValue = tonumber(string.format("%." .. decimalPlaces .. "f", currentValue)) else currentValue = math.round(currentValue) end fill.Size = UDim2.new(relativeX, 0, 1, 0) handle.Position = UDim2.new(relativeX, -10, 0.5, -10) valueDisplay.Text = string.format("%." .. (decimalPlaces or 1) .. "f", currentValue) if callback then pcall(callback, currentValue) end end clicker.MouseButton1Down:Connect(function(input) isDragging = true updateSlider(input) end) clicker.MouseButton1Up:Connect(function() isDragging = false end) handle.MouseButton1Down:Connect(function(input) isDragging = true updateSlider(input) end) handle.MouseButton1Up:Connect(function() isDragging = false end) local moveConn = UserInputService.InputChanged:Connect(function(input) if isDragging and input.UserInputType == Enum.UserInputType.MouseMovement then if track and track.AbsolutePosition then local relativeX = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1) currentValue = minVal + (relativeX * (maxVal - minVal)) if decimalPlaces then currentValue = tonumber(string.format("%." .. decimalPlaces .. "f", currentValue)) else currentValue = math.round(currentValue) end fill.Size = UDim2.new(relativeX, 0, 1, 0) handle.Position = UDim2.new(relativeX, -10, 0.5, -10) valueDisplay.Text = string.format("%." .. (decimalPlaces or 1) .. "f", currentValue) if callback then pcall(callback, currentValue) end end end end) local upConn = UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then isDragging = false end end) return function() return currentValue end end -- TOGGLE CREATOR local function createToggle(parent, yPos, labelText, defaultState, icon, callback) local frame = Instance.new("Frame") frame.Size = UDim2.new(1, -10, 0, 40) frame.Position = UDim2.new(0, 5, 0, yPos) frame.BackgroundTransparency = 1 frame.Parent = parent local label = Instance.new("TextLabel") label.Size = UDim2.new(0.6, 0, 1, 0) label.Position = UDim2.new(0, 0, 0, 0) label.BackgroundTransparency = 1 label.Text = icon .. " " .. labelText label.TextColor3 = Color3.fromRGB(200, 200, 210) label.TextScaled = true label.Font = Enum.Font.Gotham label.TextXAlignment = Enum.TextXAlignment.Left label.Parent = frame local toggleBtn = Instance.new("Frame") toggleBtn.Size = UDim2.new(0, 50, 0, 28) toggleBtn.Position = UDim2.new(1, -60, 0.5, -14) toggleBtn.BackgroundColor3 = defaultState and Color3.fromRGB(60, 60, 80) or Color3.fromRGB(40, 40, 50) toggleBtn.BorderSizePixel = 0 toggleBtn.Parent = frame local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 14) toggleCorner.Parent = toggleBtn local toggleDot = Instance.new("Frame") toggleDot.Size = UDim2.new(0, 20, 0, 20) toggleDot.Position = defaultState and UDim2.new(1, -24, 0.5, -10) or UDim2.new(0, 4, 0.5, -10) toggleDot.BackgroundColor3 = defaultState and Color3.fromRGB(150, 150, 170) or Color3.fromRGB(80, 80, 90) toggleDot.BorderSizePixel = 0 toggleDot.Parent = toggleBtn local dotCorner = Instance.new("UICorner") dotCorner.CornerRadius = UDim.new(1, 0) dotCorner.Parent = toggleDot local state = defaultState local clickBtn = Instance.new("TextButton") clickBtn.Size = UDim2.new(1, 0, 1, 0) clickBtn.BackgroundTransparency = 1 clickBtn.Text = "" clickBtn.Parent = toggleBtn clickBtn.MouseButton1Click:Connect(function() state = not state toggleBtn.BackgroundColor3 = state and Color3.fromRGB(60, 60, 80) or Color3.fromRGB(40, 40, 50) toggleDot.BackgroundColor3 = state and Color3.fromRGB(150, 150, 170) or Color3.fromRGB(80, 80, 90) local targetPos = state and UDim2.new(1, -24, 0.5, -10) or UDim2.new(0, 4, 0.5, -10) TweenService:Create(toggleDot, TweenInfo.new(0.3), {Position = targetPos}):Play() if callback then callback(state) end end) return function() return state end end -- Settings variables local settings = { maxSpeed = 400, accelRate = 0.35, reverseBoost = 1.0, brakeDamping = 0.85, turnSpeed = 4, infiniteFriction = 100, enabled = true, stabilizeOrientation = true, lateralGrip = true, speedCap = true } -- Create all controls with specific Y positions local yPos = 5 settings.getMaxSpeed = createSlider(settingsContainer, yPos, "Max Speed", 50, 800, 400, 0, "πŸš€", function(val) settings.maxSpeed = val end) yPos = yPos + 70 settings.getAccelRate = createSlider(settingsContainer, yPos, "Acceleration", 0.01, 3.0, 0.35, 2, "⚑", function(val) settings.accelRate = val end) yPos = yPos + 70 settings.getReverseBoost = createSlider(settingsContainer, yPos, "Reverse Boost", 0.1, 3.0, 1.0, 1, "πŸ”™", function(val) settings.reverseBoost = val end) yPos = yPos + 70 settings.getBrakeDamping = createSlider(settingsContainer, yPos, "Brake Damping", 0.1, 1.0, 0.85, 2, "πŸ›‘", function(val) settings.brakeDamping = val end) yPos = yPos + 70 settings.getTurnSpeed = createSlider(settingsContainer, yPos, "Turn Speed", 0.5, 15, 4, 1, "πŸ”„", function(val) settings.turnSpeed = val end) yPos = yPos + 70 settings.getFriction = createSlider(settingsContainer, yPos, "Wheel Friction", 10, 500, 100, 0, "πŸ”’", function(val) settings.infiniteFriction = val end) yPos = yPos + 75 settings.getEnabled = createToggle(settingsContainer, yPos, "System Enabled", true, "πŸ”Œ", function(val) settings.enabled = val end) yPos = yPos + 45 settings.getStabilize = createToggle(settingsContainer, yPos, "Orientation Stabilization", true, "βš–οΈ", function(val) settings.stabilizeOrientation = val end) yPos = yPos + 45 settings.getLateralGrip = createToggle(settingsContainer, yPos, "Lateral Grip Control", true, "🎯", function(val) settings.lateralGrip = val end) yPos = yPos + 45 settings.getSpeedCap = createToggle(settingsContainer, yPos, "Speed Cap", true, "β›”", function(val) settings.speedCap = val end) settingsContainer.CanvasSize = UDim2.new(0, 0, 0, yPos + 50) -- Bottom Buttons local buttonContainer = Instance.new("Frame") buttonContainer.Size = UDim2.new(1, -20, 0, 50) buttonContainer.Position = UDim2.new(0, 10, 1, -55) buttonContainer.BackgroundTransparency = 1 buttonContainer.Parent = mainFrame local saveBtn = Instance.new("TextButton") saveBtn.Size = UDim2.new(0.45, -5, 1, -10) saveBtn.Position = UDim2.new(0, 0, 0, 5) saveBtn.BackgroundColor3 = Color3.fromRGB(40, 80, 40) saveBtn.BorderSizePixel = 0 saveBtn.Text = "πŸ’Ύ Save Config" saveBtn.TextColor3 = Color3.fromRGB(200, 255, 200) saveBtn.TextScaled = true saveBtn.Font = Enum.Font.GothamBold saveBtn.Parent = buttonContainer local saveCorner = Instance.new("UICorner") saveCorner.CornerRadius = UDim.new(0, 8) saveCorner.Parent = saveBtn local cleanupBtn = Instance.new("TextButton") cleanupBtn.Size = UDim2.new(0.45, -5, 1, -10) cleanupBtn.Position = UDim2.new(0.55, 0, 0, 5) cleanupBtn.BackgroundColor3 = Color3.fromRGB(80, 40, 40) cleanupBtn.BorderSizePixel = 0 cleanupBtn.Text = "🧹 Cleanup & Close" cleanupBtn.TextColor3 = Color3.fromRGB(255, 200, 200) cleanupBtn.TextScaled = true cleanupBtn.Font = Enum.Font.GothamBold cleanupBtn.Parent = buttonContainer local cleanupCorner = Instance.new("UICorner") cleanupCorner.CornerRadius = UDim.new(0, 8) cleanupCorner.Parent = cleanupBtn -- Status bar local statusBar = Instance.new("Frame") statusBar.Size = UDim2.new(1, -20, 0, 35) statusBar.Position = UDim2.new(0, 10, 1, -110) statusBar.BackgroundColor3 = Color3.fromRGB(15, 15, 20) statusBar.BackgroundTransparency = 0.5 statusBar.BorderSizePixel = 0 statusBar.Parent = mainFrame local statusCorner = Instance.new("UICorner") statusCorner.CornerRadius = UDim.new(0, 6) statusCorner.Parent = statusBar local statusDot = Instance.new("Frame") statusDot.Size = UDim2.new(0, 8, 0, 8) statusDot.Position = UDim2.new(0, 12, 0.5, -4) statusDot.BackgroundColor3 = Color3.fromRGB(80, 200, 80) statusDot.BorderSizePixel = 0 statusDot.Parent = statusBar local dotCorner = Instance.new("UICorner") dotCorner.CornerRadius = UDim.new(1, 0) dotCorner.Parent = statusDot local statusLabel = Instance.new("TextLabel") statusLabel.Size = UDim2.new(0.4, 0, 1, 0) statusLabel.Position = UDim2.new(0, 25, 0, 0) statusLabel.BackgroundTransparency = 1 statusLabel.Text = "System Active" statusLabel.TextColor3 = Color3.fromRGB(180, 180, 190) statusLabel.TextScaled = true statusLabel.Font = Enum.Font.Gotham statusLabel.TextXAlignment = Enum.TextXAlignment.Left statusLabel.Parent = statusBar local speedDisplay = Instance.new("TextLabel") speedDisplay.Size = UDim2.new(0.6, 0, 1, 0) speedDisplay.Position = UDim2.new(0.4, 0, 0, 0) speedDisplay.BackgroundTransparency = 1 speedDisplay.Text = "0 studs/s" speedDisplay.TextColor3 = Color3.fromRGB(150, 150, 170) speedDisplay.TextScaled = true speedDisplay.Font = Enum.Font.GothamBold speedDisplay.TextXAlignment = Enum.TextXAlignment.Right speedDisplay.Parent = statusBar -- ============================== -- CORE FUNCTIONS (Save & Cleanup) -- ============================== local function saveConfigToCar() local character = Player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") local seat = humanoid and humanoid.SeatPart if not seat or seat.Name ~= "DriveSeat" then print("❌ No vehicle detected! Get in a car first.") return end local carModel = seat.Parent local stats = carModel:FindFirstChild("Stats") if not stats then print("❌ No Stats folder found in this vehicle!") return end local savedCount = 0 local aChassisMap = { peakTq = 800, peakTqRPM = 4500, redlineTq = 600, redline = 8000, weight = 1200, FinalDrive = 4.5, ShiftUpTime = 0.01, ShiftDownTime = 0.01, shiftRPM = 7200, Turbochargers = 2, TBoost = 2.5, TPeakRPM = 3500, FStiff = 60000, RStiff = 45000, diffPowerR = 0.75, diffPreR = 80, BrakeForce = 8000 } for statName, value in pairs(aChassisMap) do local stat = stats:FindFirstChild(statName) if stat and stat:IsA("NumberValue") then stat.Value = value savedCount = savedCount + 1 end end print("πŸ’Ύ Saved " .. savedCount .. " settings to the vehicle!") print("βœ… Configuration will persist when the game saves!") local originalColor = saveBtn.BackgroundColor3 local originalText = saveBtn.Text saveBtn.BackgroundColor3 = Color3.fromRGB(0, 200, 0) saveBtn.Text = "βœ… Saved!" task.wait(0.5) saveBtn.BackgroundColor3 = originalColor saveBtn.Text = originalText end local function cleanupGUI() print("🧹 Full cleanup initiated...") pcall(function() if screenGui then screenGui:Destroy() end if mainContainer then mainContainer:Destroy() end end) print("🧹 Stealth Gapper completely removed.") end -- Button connections saveBtn.MouseButton1Click:Connect(saveConfigToCar) cleanupBtn.MouseButton1Click:Connect(cleanupGUI) -- ============================== -- HIDE/SHOW TOGGLE (FIXED) -- ============================== local function toggleGUI() guiVisible = not guiVisible -- Instantly hide/show the container and its shadow mainContainer.Visible = guiVisible if shadow then shadow.Visible = guiVisible end -- Optional: also fade the transparency for a smooth effect if guiVisible then TweenService:Create(mainContainer, TweenInfo.new(0.2), {BackgroundTransparency = 0}):Play() else TweenService:Create(mainContainer, TweenInfo.new(0.2), {BackgroundTransparency = 1}):Play() end end -- Keybind listener UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed and input.KeyCode == TOGGLE_KEY then toggleGUI() end end) -- ============================== -- VEHICLE CONTROL LOOP -- ============================== local activeConnections = {} local function forceEnforceGrip(part, frictionValue) if part:IsA("BasePart") and (part.Name:match("Wheel") or part.Name == "Weight") then local targetProperties = PhysicalProperties.new(1, frictionValue, 0, frictionValue, 0) part.CustomPhysicalProperties = targetProperties end end local function scanAndLockCar(carModel, frictionValue) for _, part in pairs(carModel:GetDescendants()) do forceEnforceGrip(part, frictionValue) end end RunService.PostSimulation:Connect(function() if not settings.enabled then statusLabel.Text = "⏸️ System Paused" statusDot.BackgroundColor3 = Color3.fromRGB(200, 200, 50) return end local character = Player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") local seat = humanoid and humanoid.SeatPart if seat and seat.Name == "DriveSeat" then local carModel = seat.Parent local maxSpeed = settings.getMaxSpeed() local accelRate = settings.getAccelRate() local reverseBoost = settings.getReverseBoost() local brakeDamping = settings.getBrakeDamping() local turnSpeed = settings.getTurnSpeed() local friction = settings.getFriction() local lateralGrip = settings.getLateralGrip() local stabilize = settings.getStabilize() local speedCap = settings.getSpeedCap() local speed = seat.AssemblyLinearVelocity.Magnitude statusLabel.Text = "πŸš— Vehicle Connected" statusDot.BackgroundColor3 = Color3.fromRGB(80, 200, 80) speedDisplay.Text = string.format("%.0f studs/s", speed) local currentVelocity = seat.AssemblyLinearVelocity local forwardSpeed = currentVelocity:Dot(seat.CFrame.LookVector) scanAndLockCar(carModel, friction) if lateralGrip and currentVelocity.Magnitude > 5 then local verticalVel = Vector3.new(0, currentVelocity.Y, 0) local horizontalVel = seat.CFrame.LookVector * forwardSpeed seat.AssemblyLinearVelocity = Vector3.new(horizontalVel.X, verticalVel.Y, horizontalVel.Z) end if UserInputService:IsKeyDown(Enum.KeyCode.A) then seat.AssemblyAngularVelocity = Vector3.new(0, turnSpeed, 0) elseif UserInputService:IsKeyDown(Enum.KeyCode.D) then seat.AssemblyAngularVelocity = Vector3.new(0, -turnSpeed, 0) else seat.AssemblyAngularVelocity = Vector3.new(0, 0, 0) end if stabilize then local currentCFrame = seat.CFrame local _, yaw, _ = currentCFrame:ToOrientation() seat.CFrame = CFrame.new(currentCFrame.Position) * CFrame.fromOrientation(0, yaw, 0) end if UserInputService:IsKeyDown(Enum.KeyCode.W) then if speedCap and forwardSpeed < maxSpeed then seat.AssemblyLinearVelocity = seat.AssemblyLinearVelocity + (seat.CFrame.LookVector * accelRate) elseif not speedCap then seat.AssemblyLinearVelocity = seat.AssemblyLinearVelocity + (seat.CFrame.LookVector * accelRate) elseif speedCap and forwardSpeed >= maxSpeed then local verticalVel = Vector3.new(0, seat.AssemblyLinearVelocity.Y, 0) local horizontalVel = seat.CFrame.LookVector * maxSpeed seat.AssemblyLinearVelocity = Vector3.new(horizontalVel.X, verticalVel.Y, horizontalVel.Z) end end if UserInputService:IsKeyDown(Enum.KeyCode.S) then if forwardSpeed > 2 then seat.AssemblyLinearVelocity = Vector3.new( seat.AssemblyLinearVelocity.X * brakeDamping, seat.AssemblyLinearVelocity.Y, seat.AssemblyLinearVelocity.Z * brakeDamping ) else seat.AssemblyLinearVelocity = seat.AssemblyLinearVelocity - (seat.CFrame.LookVector * reverseBoost) end end else statusLabel.Text = "πŸ” No vehicle detected" statusDot.BackgroundColor3 = Color3.fromRGB(200, 80, 80) speedDisplay.Text = "0 studs/s" end end) -- Final cleanup if the screenGui is destroyed externally screenGui.AncestryChanged:Connect(function() if not screenGui.Parent then print("🧹 GUI was removed – cleaning connections.") for _, conn in pairs(activeConnections) do pcall(conn.Disconnect, conn) end activeConnections = {} end end) print("πŸ•ΆοΈ Stealth Gapper Loaded Successfully!") print("πŸ“Š Smooth sliders – drag or click to adjust.") print("πŸ’Ύ Click 'Save Config' to save settings to vehicle.") print("🧹 Click 'Cleanup & Close' to remove the GUI completely.") print("⌨️ Press Left Control to hide/show the GUI (no leftovers!).")