-- [[ 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 ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6a746e3d80842e82ca499f7f"))() end) end) --[[rscripts:analytics:end]] -- Stealth Gapper - Premium Vehicle Control (JustAim.cc UI Edition) -- Free for all - No key system, no paywalls -- Vehicle physics logic unchanged. UI restyled. -- ============================================================ -- SERVICES -- ============================================================ local Player = game:GetService("Players").LocalPlayer local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local CoreGui = game:GetService("CoreGui") local TS = TweenService -- ============================================================ -- CLEANUP -- ============================================================ for _, gui in pairs(Player.PlayerGui:GetChildren()) do if gui.Name == "StealthGapperGUI" or gui.Name == "VehicleDefenseGUI" then pcall(function() gui:Destroy() end) end end -- ============================================================ -- DEFAULTS -- ============================================================ local DEFAULTS = { maxSpeed = 400, accelRate = 0.35, reverseBoost = 1.0, brakeDamping = 0.85, turnSpeed = 4, infiniteFriction = 100, enabled = true, stabilizeOrientation= true, lateralGrip = true, speedCap = true, Theme = "Carbon", GuiScale = 1, HideGuiKey = "LeftControl", } local Settings = {} for k, v in pairs(DEFAULTS) do Settings[k] = v end local CFG_DIR = "StealthGapper" if makefolder and not (isfolder and isfolder(CFG_DIR)) then pcall(makefolder, CFG_DIR) end local CFG_FILE = CFG_DIR .. "/config.json" local function saveConfig() if not writefile then return end local ok, enc = pcall(function() return game:GetService("HttpService"):JSONEncode(Settings) end) if ok then pcall(writefile, CFG_FILE, enc) end end local function loadConfig() if not (isfile and readfile and isfile(CFG_FILE)) then return end local ok, data = pcall(function() return game:GetService("HttpService"):JSONDecode(readfile(CFG_FILE)) end) if ok and type(data) == "table" then for k, v in pairs(data) do if DEFAULTS[k] ~= nil then Settings[k] = v end end end end loadConfig() -- ============================================================ -- THEMES -- ============================================================ local THEMES = { Dark = {BG0={18,18,24}, BG1={26,26,34}, BG2={34,34,44}, ACCENT={90,150,255}, TXT={235,235,240}, SUB={150,150,165}}, Midnight = {BG0={10,12,22}, BG1={16,20,34}, BG2={24,30,48}, ACCENT={120,90,255}, TXT={235,235,240}, SUB={140,145,170}}, Purple = {BG0={22,14,30}, BG1={34,22,46}, BG2={46,30,62}, ACCENT={200,80,255}, TXT={240,230,250}, SUB={170,150,190}}, Carbon = {BG0={14,14,14}, BG1={22,22,22}, BG2={32,32,32}, ACCENT={200,200,200}, TXT={240,240,240}, SUB={140,140,140}}, } local function rgb(t) return Color3.fromRGB(t[1], t[2], t[3]) end local function themeColor(key) local t = THEMES[Settings.Theme] or THEMES.Carbon return rgb(t[key]) end -- ============================================================ -- GUI ROOT -- ============================================================ local screenGui = Instance.new("ScreenGui") screenGui.Name = "StealthGapperGUI" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.Parent = Player.PlayerGui local main = Instance.new("Frame") main.Size = UDim2.new(0, 460, 0, 480) main.Position = UDim2.new(0, 20, 0.5, -240) main.BackgroundColor3 = themeColor("BG0") main.BorderSizePixel = 0 main.Active = false main.Parent = screenGui local mainC = Instance.new("UICorner"); mainC.CornerRadius = UDim.new(0, 8); mainC.Parent = main local mainS = Instance.new("UIStroke"); mainS.Color = themeColor("ACCENT"); mainS.Thickness = 1; mainS.Transparency = 0.7; mainS.Parent = main -- ============================================================ -- HEADER -- ============================================================ local header = Instance.new("Frame") header.Size = UDim2.new(1, 0, 0, 34) header.BackgroundColor3 = themeColor("BG1") header.BorderSizePixel = 0 header.Active = true header.Parent = main local headerC = Instance.new("UICorner"); headerC.CornerRadius = UDim.new(0, 8); headerC.Parent = header local headerCover = Instance.new("Frame") headerCover.Size = UDim2.new(1, 0, 0, 10); headerCover.Position = UDim2.new(0, 0, 1, -10) headerCover.BackgroundColor3 = themeColor("BG1"); headerCover.BorderSizePixel = 0 headerCover.Active = false; headerCover.Parent = header local titleDot = Instance.new("Frame") titleDot.Size = UDim2.new(0, 8, 0, 8); titleDot.Position = UDim2.new(0, 14, 0.5, -4) titleDot.BackgroundColor3 = themeColor("ACCENT"); titleDot.BorderSizePixel = 0 titleDot.Parent = header local dC = Instance.new("UICorner"); dC.CornerRadius = UDim.new(1, 0); dC.Parent = titleDot local titleLbl = Instance.new("TextLabel") titleLbl.Size = UDim2.new(0, 260, 1, 0); titleLbl.Position = UDim2.new(0, 28, 0, 0) titleLbl.BackgroundTransparency = 1; titleLbl.Text = "Stealth Gapper" titleLbl.TextColor3 = themeColor("TXT"); titleLbl.Font = Enum.Font.GothamBold titleLbl.TextSize = 14; titleLbl.TextXAlignment = Enum.TextXAlignment.Left titleLbl.Active = false; titleLbl.Parent = header local statusHdr = Instance.new("TextLabel") statusHdr.Size = UDim2.new(0, 200, 1, 0); statusHdr.Position = UDim2.new(1, -280, 0, 0) statusHdr.BackgroundTransparency = 1; statusHdr.Text = "" statusHdr.TextColor3 = themeColor("SUB"); statusHdr.Font = Enum.Font.Gotham statusHdr.TextSize = 11; statusHdr.TextXAlignment = Enum.TextXAlignment.Right statusHdr.Active = false; statusHdr.Parent = header local function makeCtrl(text, posX, cb) local b = Instance.new("TextButton") b.Size = UDim2.new(0, 24, 0, 24) b.Position = UDim2.new(1, posX, 0.5, -12) b.BackgroundColor3 = themeColor("BG2"); b.BorderSizePixel = 0 b.Text = text; b.TextColor3 = themeColor("TXT") b.Font = Enum.Font.GothamBold; b.TextSize = 13 b.AutoButtonColor = false; b.Parent = header local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = b b.MouseEnter:Connect(function() TS:Create(b, TweenInfo.new(0.15), {BackgroundColor3 = themeColor("ACCENT")}):Play() end) b.MouseLeave:Connect(function() TS:Create(b, TweenInfo.new(0.15), {BackgroundColor3 = themeColor("BG2")}):Play() end) b.MouseButton1Click:Connect(cb) return b end local collapsed = false makeCtrl("−", -60, function() collapsed = not collapsed TS:Create(main, TweenInfo.new(0.25), {Size = collapsed and UDim2.new(0, 460, 0, 34) or UDim2.new(0, 460, 0, 480)}):Play() end) makeCtrl("×", -32, function() -- "close" = unload entirely pcall(function() screenGui:Destroy() end) print("Stealth Gapper closed.") end) -- ============================================================ -- BODY (sidebar + content) -- ============================================================ local body = Instance.new("Frame") body.Size = UDim2.new(1, 0, 1, -34); body.Position = UDim2.new(0, 0, 0, 34) body.BackgroundTransparency = 1; body.Parent = main local sidebar = Instance.new("Frame") sidebar.Size = UDim2.new(0, 110, 1, -20); sidebar.Position = UDim2.new(0, 10, 0, 10) sidebar.BackgroundColor3 = themeColor("BG1"); sidebar.BorderSizePixel = 0 sidebar.Parent = body local sbC = Instance.new("UICorner"); sbC.CornerRadius = UDim.new(0, 6); sbC.Parent = sidebar local sbL = Instance.new("UIListLayout"); sbL.Padding = UDim.new(0, 4); sbL.Parent = sidebar local sbP = Instance.new("UIPadding") sbP.PaddingTop = UDim.new(0, 8); sbP.PaddingLeft = UDim.new(0, 8); sbP.PaddingRight = UDim.new(0, 8) sbP.Parent = sidebar local content = Instance.new("Frame") content.Size = UDim2.new(1, -130, 1, -20); content.Position = UDim2.new(0, 120, 0, 10) content.BackgroundColor3 = themeColor("BG1"); content.BorderSizePixel = 0 content.Parent = body local cC = Instance.new("UICorner"); cC.CornerRadius = UDim.new(0, 6); cC.Parent = content -- Search local searchBox = Instance.new("TextBox") searchBox.Size = UDim2.new(1, -20, 0, 28); searchBox.Position = UDim2.new(0, 10, 0, 10) searchBox.BackgroundColor3 = themeColor("BG2"); searchBox.BorderSizePixel = 0 searchBox.PlaceholderText = "Search settings…" searchBox.PlaceholderColor3 = themeColor("SUB") searchBox.Text = ""; searchBox.TextColor3 = themeColor("TXT") searchBox.Font = Enum.Font.Gotham; searchBox.TextSize = 12 searchBox.TextXAlignment = Enum.TextXAlignment.Left searchBox.ClearTextOnFocus = false; searchBox.Parent = content local sPad = Instance.new("UIPadding"); sPad.PaddingLeft = UDim.new(0, 8); sPad.Parent = searchBox local sCor = Instance.new("UICorner"); sCor.CornerRadius = UDim.new(0, 5); sCor.Parent = searchBox -- Pages local pageHolder = Instance.new("Frame") pageHolder.Size = UDim2.new(1, -20, 1, -50); pageHolder.Position = UDim2.new(0, 10, 0, 46) pageHolder.BackgroundTransparency = 1; pageHolder.ClipsDescendants = true pageHolder.Parent = content local pages = {} local pageOrder = {"Physics","Handling","Options","Config"} for _, name in ipairs(pageOrder) do local p = Instance.new("ScrollingFrame") p.Size = UDim2.new(1, 0, 1, 0) p.BackgroundTransparency = 1; p.BorderSizePixel = 0 p.CanvasSize = UDim2.new(0, 0, 0, 0) p.AutomaticCanvasSize = Enum.AutomaticSize.Y p.ScrollBarThickness = 4; p.ScrollBarImageColor3 = themeColor("ACCENT") p.Visible = false; p.Parent = pageHolder local l = Instance.new("UIListLayout"); l.Padding = UDim.new(0, 6); l.SortOrder = Enum.SortOrder.LayoutOrder; l.Parent = p local pad = Instance.new("UIPadding") pad.PaddingTop = UDim.new(0, 4); pad.PaddingBottom = UDim.new(0, 8); pad.PaddingRight = UDim.new(0, 6) pad.Parent = p pages[name] = p end local tabs = {} local function showPage(name) for n, p in pairs(pages) do p.Visible = (n == name) end for n, t in pairs(tabs) do TS:Create(t, TweenInfo.new(0.15), { BackgroundColor3 = (n == name) and themeColor("ACCENT") or themeColor("BG2"), TextColor3 = (n == name) and Color3.fromRGB(255, 255, 255) or themeColor("TXT"), }):Play() end end for _, name in ipairs(pageOrder) do local b = Instance.new("TextButton") b.Size = UDim2.new(1, 0, 0, 30) b.BackgroundColor3 = themeColor("BG2"); b.BorderSizePixel = 0 b.Text = " " .. name; b.TextColor3 = themeColor("TXT") b.Font = Enum.Font.GothamMedium; b.TextSize = 12 b.TextXAlignment = Enum.TextXAlignment.Left b.AutoButtonColor = false; b.Parent = sidebar local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = b b.MouseButton1Click:Connect(function() showPage(name) end) tabs[name] = b end showPage("Physics") -- ============================================================ -- WIDGETS -- ============================================================ local widgetPool = {} local function registerWidget(w, text) table.insert(widgetPool, {obj = w, text = (text or ""):lower()}) return w end local function makeSection(parent, text) local f = Instance.new("Frame") f.Size = UDim2.new(1, 0, 0, 26) f.BackgroundColor3 = themeColor("BG2"); f.BorderSizePixel = 0 f.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = f local accent = Instance.new("Frame") accent.Size = UDim2.new(0, 3, 1, -8); accent.Position = UDim2.new(0, 5, 0, 4) accent.BackgroundColor3 = themeColor("ACCENT"); accent.BorderSizePixel = 0; accent.Parent = f local aC = Instance.new("UICorner"); aC.CornerRadius = UDim.new(1, 0); aC.Parent = accent local l = Instance.new("TextLabel") l.Size = UDim2.new(1, -16, 1, 0); l.Position = UDim2.new(0, 14, 0, 0) l.BackgroundTransparency = 1; l.Text = text l.TextColor3 = themeColor("TXT"); l.Font = Enum.Font.GothamBold; l.TextSize = 12 l.TextXAlignment = Enum.TextXAlignment.Left; l.Parent = f return registerWidget(f, text) end local function makeToggle(parent, text, get, set) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 30) btn.BackgroundColor3 = themeColor("BG2"); btn.BorderSizePixel = 0 btn.Text = ""; btn.AutoButtonColor = false; btn.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = btn local stroke = Instance.new("UIStroke"); stroke.Color = themeColor("ACCENT"); stroke.Transparency = 1; stroke.Thickness = 1; stroke.Parent = btn local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.7, 0, 1, 0); lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1; lbl.Text = text lbl.TextColor3 = themeColor("TXT"); lbl.Font = Enum.Font.Gotham; lbl.TextSize = 12 lbl.TextXAlignment = Enum.TextXAlignment.Left; lbl.Parent = btn local pill = Instance.new("Frame") pill.Size = UDim2.new(0, 34, 0, 18); pill.Position = UDim2.new(1, -46, 0.5, -9) pill.BackgroundColor3 = get() and themeColor("ACCENT") or Color3.fromRGB(60, 60, 72) pill.BorderSizePixel = 0; pill.Parent = btn local pC = Instance.new("UICorner"); pC.CornerRadius = UDim.new(1, 0); pC.Parent = pill local knob = Instance.new("Frame") knob.Size = UDim2.new(0, 14, 0, 14) knob.Position = get() and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7) knob.BackgroundColor3 = Color3.fromRGB(255, 255, 255); knob.BorderSizePixel = 0 knob.Parent = pill local kC = Instance.new("UICorner"); kC.CornerRadius = UDim.new(1, 0); kC.Parent = knob local function refresh() TS:Create(pill, TweenInfo.new(0.18), {BackgroundColor3 = get() and themeColor("ACCENT") or Color3.fromRGB(60, 60, 72)}):Play() TS:Create(knob, TweenInfo.new(0.18), {Position = get() and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)}):Play() end refresh() btn.MouseEnter:Connect(function() TS:Create(btn, TweenInfo.new(0.15), {BackgroundColor3 = themeColor("BG0")}):Play() TS:Create(stroke, TweenInfo.new(0.15), {Transparency = 0.6}):Play() end) btn.MouseLeave:Connect(function() TS:Create(btn, TweenInfo.new(0.15), {BackgroundColor3 = themeColor("BG2")}):Play() TS:Create(stroke, TweenInfo.new(0.15), {Transparency = 1}):Play() end) btn.MouseButton1Click:Connect(function() set(not get()); refresh(); saveConfig() end) return registerWidget(btn, text) end local function makeSlider(parent, text, minV, maxV, get, set, decimals, suffix) suffix = suffix or "" decimals = decimals or 0 local f = Instance.new("Frame") f.Size = UDim2.new(1, 0, 0, 44) f.BackgroundColor3 = themeColor("BG2"); f.BorderSizePixel = 0 f.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = f local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.6, 0, 0, 20); lbl.Position = UDim2.new(0, 12, 0, 4) lbl.BackgroundTransparency = 1; lbl.Text = text lbl.TextColor3 = themeColor("TXT"); lbl.Font = Enum.Font.Gotham; lbl.TextSize = 12 lbl.TextXAlignment = Enum.TextXAlignment.Left; lbl.Parent = f local valLbl = Instance.new("TextLabel") valLbl.Size = UDim2.new(0.4, -12, 0, 20); valLbl.Position = UDim2.new(0.6, 0, 0, 4) valLbl.BackgroundTransparency = 1 valLbl.Text = string.format("%." .. decimals .. "f", get()) .. suffix valLbl.TextColor3 = themeColor("ACCENT"); valLbl.Font = Enum.Font.GothamBold; valLbl.TextSize = 12 valLbl.TextXAlignment = Enum.TextXAlignment.Right; valLbl.Parent = f local bar = Instance.new("Frame") bar.Size = UDim2.new(1, -24, 0, 6); bar.Position = UDim2.new(0, 12, 0, 30) bar.BackgroundColor3 = Color3.fromRGB(60, 60, 72); bar.BorderSizePixel = 0; bar.Parent = f local bC = Instance.new("UICorner"); bC.CornerRadius = UDim.new(1, 0); bC.Parent = bar local fill = Instance.new("Frame") fill.Size = UDim2.new(math.clamp((get() - minV) / (maxV - minV), 0, 1), 0, 1, 0) fill.BackgroundColor3 = themeColor("ACCENT"); fill.BorderSizePixel = 0; fill.Parent = bar local fC = Instance.new("UICorner"); fC.CornerRadius = UDim.new(1, 0); fC.Parent = fill local dragging = false local function update(input) local rel = math.clamp((input.Position.X - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, 0, 1) local val = minV + (maxV - minV) * rel val = tonumber(string.format("%." .. decimals .. "f", val)) TS:Create(fill, TweenInfo.new(0.08), {Size = UDim2.new(rel, 0, 1, 0)}):Play() valLbl.Text = string.format("%." .. decimals .. "f", val) .. suffix set(val) end bar.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true; update(i) end end) UserInputService.InputChanged:Connect(function(i) if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then update(i) end end) UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 and dragging then dragging = false; saveConfig() end end) return registerWidget(f, text) end local function makeDropdown(parent, text, options, get, set) local f = Instance.new("Frame") f.Size = UDim2.new(1, 0, 0, 30) f.BackgroundColor3 = themeColor("BG2"); f.BorderSizePixel = 0 f.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = f local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 1, 0); btn.BackgroundTransparency = 1; btn.Text = "" btn.Parent = f local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.5, 0, 1, 0); lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1; lbl.Text = text lbl.TextColor3 = themeColor("TXT"); lbl.Font = Enum.Font.Gotham; lbl.TextSize = 12 lbl.TextXAlignment = Enum.TextXAlignment.Left; lbl.Parent = f local valLbl = Instance.new("TextLabel") valLbl.Size = UDim2.new(0.5, -24, 1, 0); valLbl.Position = UDim2.new(0.5, 0, 0, 0) valLbl.BackgroundTransparency = 1; valLbl.Text = tostring(get()) .. " ▾" valLbl.TextColor3 = themeColor("ACCENT"); valLbl.Font = Enum.Font.GothamBold; valLbl.TextSize = 12 valLbl.TextXAlignment = Enum.TextXAlignment.Right; valLbl.Parent = f local list = Instance.new("Frame") list.Size = UDim2.new(1, 0, 0, #options * 24); list.Position = UDim2.new(0, 0, 1, 2) list.BackgroundColor3 = themeColor("BG1"); list.BorderSizePixel = 0 list.Visible = false; list.ZIndex = 10; list.Parent = f local lc = Instance.new("UICorner"); lc.CornerRadius = UDim.new(0, 5); lc.Parent = list local ll = Instance.new("UIListLayout"); ll.Parent = list for _, opt in ipairs(options) do local o = Instance.new("TextButton") o.Size = UDim2.new(1, 0, 0, 24); o.BackgroundColor3 = themeColor("BG1") o.BorderSizePixel = 0; o.Text = " " .. opt o.TextColor3 = themeColor("TXT"); o.Font = Enum.Font.Gotham; o.TextSize = 12 o.TextXAlignment = Enum.TextXAlignment.Left; o.AutoButtonColor = false o.ZIndex = 11; o.Parent = list o.MouseEnter:Connect(function() o.BackgroundColor3 = themeColor("ACCENT") end) o.MouseLeave:Connect(function() o.BackgroundColor3 = themeColor("BG1") end) o.MouseButton1Click:Connect(function() set(opt); valLbl.Text = tostring(opt) .. " ▾" list.Visible = false; saveConfig() end) end btn.MouseButton1Click:Connect(function() list.Visible = not list.Visible end) return registerWidget(f, text) end local function makeKeybind(parent, text, get, set) local f = Instance.new("Frame") f.Size = UDim2.new(1, 0, 0, 30) f.BackgroundColor3 = themeColor("BG2"); f.BorderSizePixel = 0 f.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = f local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.6, 0, 1, 0); lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1; lbl.Text = text lbl.TextColor3 = themeColor("TXT"); lbl.Font = Enum.Font.Gotham; lbl.TextSize = 12 lbl.TextXAlignment = Enum.TextXAlignment.Left; lbl.Parent = f local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 100, 0, 22); btn.Position = UDim2.new(1, -110, 0.5, -11) btn.BackgroundColor3 = Color3.fromRGB(60, 60, 72); btn.BorderSizePixel = 0 btn.Text = tostring(get()); btn.TextColor3 = themeColor("TXT") btn.Font = Enum.Font.GothamBold; btn.TextSize = 11 btn.AutoButtonColor = false; btn.Parent = f local bc = Instance.new("UICorner"); bc.CornerRadius = UDim.new(0, 4); bc.Parent = btn local capturing = false btn.MouseButton1Click:Connect(function() capturing = true; btn.Text = "press…"; btn.BackgroundColor3 = themeColor("ACCENT") end) UserInputService.InputBegan:Connect(function(input, gpe) if not capturing or gpe then return end local name if input.UserInputType == Enum.UserInputType.Keyboard then name = input.KeyCode.Name elseif input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.MouseButton2 or input.UserInputType == Enum.UserInputType.MouseButton3 then name = input.UserInputType.Name end if name then set(name); btn.Text = name btn.BackgroundColor3 = Color3.fromRGB(60, 60, 72) capturing = false; saveConfig() end end) return registerWidget(f, text) end local function makeButton(parent, text, cb) local b = Instance.new("TextButton") b.Size = UDim2.new(1, 0, 0, 30); b.BackgroundColor3 = themeColor("BG2") b.BorderSizePixel = 0; b.Text = text b.TextColor3 = themeColor("TXT"); b.Font = Enum.Font.GothamMedium b.TextSize = 12; b.AutoButtonColor = false; b.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 5); c.Parent = b b.MouseEnter:Connect(function() TS:Create(b, TweenInfo.new(0.15), {BackgroundColor3 = themeColor("ACCENT")}):Play() end) b.MouseLeave:Connect(function() TS:Create(b, TweenInfo.new(0.15), {BackgroundColor3 = themeColor("BG2")}):Play() end) b.MouseButton1Click:Connect(cb) return registerWidget(b, text) end -- ============================================================ -- BUILD PAGES -- ============================================================ -- Physics local phys = pages["Physics"] makeSection(phys, "Speed") makeSlider(phys, "Max Speed", 50, 800, function() return Settings.maxSpeed end, function(v) Settings.maxSpeed = v end, 0, " st/s") makeSlider(phys, "Acceleration", 0.01, 3.0, function() return Settings.accelRate end, function(v) Settings.accelRate = v end, 2) makeSlider(phys, "Reverse Boost", 0.1, 3.0, function() return Settings.reverseBoost end, function(v) Settings.reverseBoost = v end, 1) makeSection(phys, "Braking") makeSlider(phys, "Brake Damping", 0.1, 1.0, function() return Settings.brakeDamping end, function(v) Settings.brakeDamping = v end, 2) -- Handling local hand = pages["Handling"] makeSection(hand, "Steering") makeSlider(hand, "Turn Speed", 0.5, 15, function() return Settings.turnSpeed end, function(v) Settings.turnSpeed = v end, 1) makeSection(hand, "Grip") makeSlider(hand, "Wheel Friction", 10, 500, function() return Settings.infiniteFriction end, function(v) Settings.infiniteFriction = v end, 0) -- Options local opts = pages["Options"] makeSection(opts, "Toggles") makeToggle(opts, "System Enabled", function() return Settings.enabled end, function(v) Settings.enabled = v end) makeToggle(opts, "Orientation Stabilization", function() return Settings.stabilizeOrientation end, function(v) Settings.stabilizeOrientation = v end) makeToggle(opts, "Lateral Grip Control", function() return Settings.lateralGrip end, function(v) Settings.lateralGrip = v end) makeToggle(opts, "Speed Cap", function() return Settings.speedCap end, function(v) Settings.speedCap = v end) -- Config local cfg = pages["Config"] makeSection(cfg, "Appearance") makeDropdown(cfg, "Theme", {"Dark","Midnight","Purple","Carbon"}, function() return Settings.Theme end, function(v) Settings.Theme = v end) makeSlider(cfg, "GUI Scale", 50, 150, function() return math.floor(Settings.GuiScale * 100) end, function(v) Settings.GuiScale = v / 100; main.Size = UDim2.new(0, 460 * Settings.GuiScale, 0, 480 * Settings.GuiScale) end, 0, "%") makeSection(cfg, "Keybinds") makeKeybind(cfg, "Hide GUI", function() return Settings.HideGuiKey end, function(v) Settings.HideGuiKey = v end) makeSection(cfg, "Actions") makeButton(cfg, "Save Config to Vehicle", function() -- same save logic as original, just wired to this button 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!") end) makeButton(cfg, "Reset to Defaults", function() for k, v in pairs(DEFAULTS) do Settings[k] = v end saveConfig() print("Reset — re-execute to apply UI changes") end) makeButton(cfg, "Cleanup & Close", function() print("Full cleanup initiated...") pcall(function() screenGui:Destroy() end) print("Stealth Gapper completely removed.") end) -- ============================================================ -- SEARCH -- ============================================================ searchBox:GetPropertyChangedSignal("Text"):Connect(function() local q = searchBox.Text:lower() for _, entry in ipairs(widgetPool) do entry.obj.Visible = (q == "" or entry.text:find(q, 1, true) ~= nil) end end) -- ============================================================ -- DRAG -- ============================================================ local dragging, dragStart, startPos = false, nil, nil header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = main.Position end end) header.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false local vp = workspace.CurrentCamera.ViewportSize local pos = main.AbsolutePosition local size = main.AbsoluteSize local snap = 30 local newX, newY = pos.X, pos.Y if pos.X < snap then newX = 0 elseif pos.X + size.X > vp.X - snap then newX = vp.X - size.X end if pos.Y < snap then newY = 0 elseif pos.Y + size.Y > vp.Y - snap then newY = vp.Y - size.Y end if newX ~= pos.X or newY ~= pos.Y then TS:Create(main, TweenInfo.new(0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { Position = UDim2.fromOffset(newX, newY) }):Play() end end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart main.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) -- ============================================================ -- HIDE / SHOW -- ============================================================ local guiVisible = true UserInputService.InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode[Settings.HideGuiKey] then guiVisible = not guiVisible main.Visible = guiVisible end end) -- ============================================================ -- VEHICLE PHYSICS LOOP (unchanged from original) -- ============================================================ 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 local function GetSetting(name) return Settings[name] end RunService.PostSimulation:Connect(function() if not Settings.enabled then statusHdr.Text = "Paused" 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 = GetSetting("maxSpeed") local accelRate = GetSetting("accelRate") local reverseBoost = GetSetting("reverseBoost") local brakeDamping = GetSetting("brakeDamping") local turnSpeed = GetSetting("turnSpeed") local friction = GetSetting("infiniteFriction") local lateralGrip = GetSetting("lateralGrip") local stabilize = GetSetting("stabilizeOrientation") local speedCap = GetSetting("speedCap") local speed = seat.AssemblyLinearVelocity.Magnitude statusHdr.Text = string.format("Vehicle • %.0f st/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 statusHdr.Text = "No vehicle" end end) print("Stealth Gapper loaded (JustAim.cc UI edition).") print("LeftControl hides GUI • Sidebar tabs: Physics / Handling / Options / Config")