-- [[ 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=6ab95b3eaf6b8dfe260c3671"))() end) end) --[[rscripts:analytics:end]] --[[ STEAL, PLANT, GROW GUI - V2 -------------------------------------------------- Features: - Draggable, screen-clamped GUI - Round on/off fast movement button - Speed slider from 1 to 1000 - Numeric speed input box - Preset speed buttons - Presets appear in the exact order defined in PRESET_SPEEDS - Minimize / restore button - Close button - RightShift keybind - Anti-slide at high speed - Smooth tween animations - Optional click sound - Mobile/narrow screen scaling - Numeric textbox filtering - State survives respawn - Single LocalScript SETUP: Place this LocalScript inside StarterPlayerScripts. NOTE: This is client-side. WalkSpeed is not server-validated. --]] --================================================== -- SERVICES --================================================== local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local Workspace = game:GetService("Workspace") --================================================== -- PLAYER --================================================== local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") --================================================== -- CONFIG --================================================== local CONFIG = { NormalSpeed = 16, MinSpeed = 1, MaxSpeed = 1000, DefaultSpeed = 50, StopThreshold = 0.05, ToggleKeybind = Enum.KeyCode.RightShift, ClickSoundId = "", ClickSoundVolume = 0.4, MobileBreakpoint = 500, MobileScale = 0.85, TweenTime = 0.12, EnableAntiSlide = true, EnableAnimations = true, } --================================================== -- PRESET SPEED ORDER --================================================== -- Change ONLY this table to change the order. -- -- Current order: -- MAX -> 25 -> 50 -> 100 -> 250 -> 500 -- -- The UIListLayout below is explicitly configured to -- use LayoutOrder, so this order is always respected. --================================================== local PRESET_SPEEDS = { { Value = 1000, Label = "MAX", }, { Value = 25, Label = "25", }, { Value = 50, Label = "50", }, { Value = 100, Label = "100", }, { Value = 250, Label = "250", }, { Value = 500, Label = "500", }, } --================================================== -- COLORS --================================================== local COLORS = { Background = Color3.fromRGB(35, 35, 35), Header = Color3.fromRGB(25, 25, 25), Text = Color3.fromRGB(230, 230, 230), SubText = Color3.fromRGB(180, 180, 180), Off = Color3.fromRGB(60, 60, 60), OffStroke = Color3.fromRGB(90, 90, 90), On = Color3.fromRGB(255, 255, 255), SliderTrack = Color3.fromRGB(55, 55, 55), SliderFill = Color3.fromRGB(0, 170, 255), InputBackground = Color3.fromRGB(50, 50, 50), PresetBackground = Color3.fromRGB(50, 50, 50), PresetHover = Color3.fromRGB(70, 70, 70), CloseHover = Color3.fromRGB(255, 90, 90), } local TWEEN_INFO = TweenInfo.new( CONFIG.TweenTime, Enum.EasingStyle.Quad, Enum.EasingDirection.Out ) --================================================== -- STATE --================================================== local state = { Enabled = false, Speed = CONFIG.DefaultSpeed, SliderDragging = false, DraggingPanel = false, Minimized = false, Terminated = false, } local characterState = { Humanoid = nil, RootPart = nil, } local connections = {} local antiSlideConnection = nil --================================================== -- CONNECTION MANAGEMENT --================================================== local function track(connection) table.insert(connections, connection) return connection end local function disconnectAll() for _, connection in ipairs(connections) do if connection and connection.Connected then connection:Disconnect() end end table.clear(connections) end --================================================== -- HELPERS --================================================== local function clampSpeed(value) value = tonumber(value) or CONFIG.DefaultSpeed return math.clamp( math.floor(value + 0.5), CONFIG.MinSpeed, CONFIG.MaxSpeed ) end local function speedToRelative(speed) return ( speed - CONFIG.MinSpeed ) / ( CONFIG.MaxSpeed - CONFIG.MinSpeed ) end local function relativeToSpeed(relative) relative = math.clamp(relative, 0, 1) return CONFIG.MinSpeed + relative * (CONFIG.MaxSpeed - CONFIG.MinSpeed) end --================================================== -- GUI --================================================== local screenGui = Instance.new("ScreenGui") screenGui.Name = "SpeedToggleGui" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = false screenGui.Parent = playerGui --================================================== -- CLICK SOUND --================================================== local clickSound = Instance.new("Sound") clickSound.Name = "ClickSound" clickSound.SoundId = CONFIG.ClickSoundId clickSound.Volume = CONFIG.ClickSoundVolume clickSound.Parent = screenGui local function playClickSound() if clickSound.SoundId ~= "" then clickSound:Play() end end --================================================== -- MAIN FRAME --================================================== local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 320, 0, 210) mainFrame.Position = UDim2.new(0, 100, 0, 120) mainFrame.BackgroundColor3 = COLORS.Background mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Parent = screenGui local uiScale = Instance.new("UIScale") uiScale.Parent = mainFrame local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 12) mainCorner.Parent = mainFrame --================================================== -- HEADER --================================================== local header = Instance.new("Frame") header.Name = "Header" header.Size = UDim2.new(1, 0, 0, 28) header.BackgroundColor3 = COLORS.Header header.BorderSizePixel = 0 header.Active = true header.Parent = mainFrame local headerCorner = Instance.new("UICorner") headerCorner.CornerRadius = UDim.new(0, 12) headerCorner.Parent = header local headerFix = Instance.new("Frame") headerFix.Size = UDim2.new(1, 0, 0, 14) headerFix.Position = UDim2.new(0, 0, 1, -14) headerFix.BackgroundColor3 = COLORS.Header headerFix.BorderSizePixel = 0 headerFix.Parent = header local headerLabel = Instance.new("TextLabel") headerLabel.Name = "HeaderLabel" headerLabel.BackgroundTransparency = 1 headerLabel.Size = UDim2.new(1, -70, 1, 0) headerLabel.Position = UDim2.new(0, 10, 0, 0) headerLabel.Text = "Steal, Plant, Grow GUI" headerLabel.TextColor3 = Color3.fromRGB(200, 200, 200) headerLabel.TextXAlignment = Enum.TextXAlignment.Left headerLabel.Font = Enum.Font.GothamBold headerLabel.TextSize = 13 headerLabel.Parent = header --================================================== -- MINIMIZE BUTTON --================================================== local minimizeButton = Instance.new("TextButton") minimizeButton.Name = "MinimizeButton" minimizeButton.Size = UDim2.new(0, 24, 0, 24) minimizeButton.Position = UDim2.new(1, -52, 0.5, -12) minimizeButton.BackgroundTransparency = 1 minimizeButton.Text = "-" minimizeButton.TextColor3 = Color3.fromRGB(200, 200, 200) minimizeButton.Font = Enum.Font.GothamBold minimizeButton.TextSize = 20 minimizeButton.AutoButtonColor = false minimizeButton.Parent = header --================================================== -- CLOSE BUTTON --================================================== local closeButton = Instance.new("TextButton") closeButton.Name = "CloseButton" closeButton.Size = UDim2.new(0, 24, 0, 24) closeButton.Position = UDim2.new(1, -28, 0.5, -12) closeButton.BackgroundTransparency = 1 closeButton.Text = "✕" closeButton.TextColor3 = Color3.fromRGB(200, 200, 200) closeButton.Font = Enum.Font.GothamBold closeButton.TextSize = 16 closeButton.AutoButtonColor = false closeButton.Parent = header --================================================== -- TOGGLE BUTTON --================================================== local toggleButton = Instance.new("TextButton") toggleButton.Name = "ToggleButton" toggleButton.Size = UDim2.new(0, 48, 0, 48) toggleButton.Position = UDim2.new(0, 16, 0, 40) toggleButton.BackgroundColor3 = COLORS.Off toggleButton.BorderSizePixel = 0 toggleButton.AutoButtonColor = false toggleButton.Text = "" toggleButton.Parent = mainFrame local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(1, 0) toggleCorner.Parent = toggleButton local toggleStroke = Instance.new("UIStroke") toggleStroke.Thickness = 2 toggleStroke.Color = COLORS.OffStroke toggleStroke.Parent = toggleButton -- Inner toggle indicator local toggleDot = Instance.new("Frame") toggleDot.Name = "ToggleDot" toggleDot.Size = UDim2.new(0, 16, 0, 16) toggleDot.AnchorPoint = Vector2.new(0.5, 0.5) toggleDot.Position = UDim2.new(0.5, 0, 0.5, 0) toggleDot.BackgroundColor3 = Color3.fromRGB(150, 150, 150) toggleDot.BorderSizePixel = 0 toggleDot.Parent = toggleButton local toggleDotCorner = Instance.new("UICorner") toggleDotCorner.CornerRadius = UDim.new(1, 0) toggleDotCorner.Parent = toggleDot --================================================== -- STATUS --================================================== local statusLabel = Instance.new("TextLabel") statusLabel.Name = "StatusLabel" statusLabel.BackgroundTransparency = 1 statusLabel.Size = UDim2.new(0, 220, 0, 25) statusLabel.Position = UDim2.new(0, 80, 0, 42) statusLabel.Text = "Fast Speed: OFF" statusLabel.TextColor3 = COLORS.Text statusLabel.TextXAlignment = Enum.TextXAlignment.Left statusLabel.Font = Enum.Font.GothamBold statusLabel.TextSize = 15 statusLabel.Parent = mainFrame local currentSpeedLabel = Instance.new("TextLabel") currentSpeedLabel.Name = "CurrentSpeedLabel" currentSpeedLabel.BackgroundTransparency = 1 currentSpeedLabel.Size = UDim2.new(0, 220, 0, 20) currentSpeedLabel.Position = UDim2.new(0, 80, 0, 67) currentSpeedLabel.Text = "Current: 50" currentSpeedLabel.TextColor3 = COLORS.SubText currentSpeedLabel.TextXAlignment = Enum.TextXAlignment.Left currentSpeedLabel.Font = Enum.Font.Gotham currentSpeedLabel.TextSize = 12 currentSpeedLabel.Parent = mainFrame --================================================== -- SPEED INPUT --================================================== local speedLabel = Instance.new("TextLabel") speedLabel.Name = "SpeedLabel" speedLabel.BackgroundTransparency = 1 speedLabel.Size = UDim2.new(0, 60, 0, 22) speedLabel.Position = UDim2.new(0, 16, 0, 96) speedLabel.Text = "Speed:" speedLabel.TextColor3 = COLORS.Text speedLabel.TextXAlignment = Enum.TextXAlignment.Left speedLabel.Font = Enum.Font.Gotham speedLabel.TextSize = 13 speedLabel.Parent = mainFrame local speedTextBox = Instance.new("TextBox") speedTextBox.Name = "SpeedTextBox" speedTextBox.Size = UDim2.new(0, 65, 0, 24) speedTextBox.Position = UDim2.new(1, -81, 0, 94) speedTextBox.BackgroundColor3 = COLORS.InputBackground speedTextBox.TextColor3 = Color3.fromRGB(255, 255, 255) speedTextBox.Font = Enum.Font.Gotham speedTextBox.TextSize = 13 speedTextBox.Text = tostring(CONFIG.DefaultSpeed) speedTextBox.ClearTextOnFocus = false speedTextBox.PlaceholderText = "1-1000" speedTextBox.Parent = mainFrame local speedBoxCorner = Instance.new("UICorner") speedBoxCorner.CornerRadius = UDim.new(0, 6) speedBoxCorner.Parent = speedTextBox --================================================== -- SLIDER --================================================== local sliderTrack = Instance.new("Frame") sliderTrack.Name = "SliderTrack" sliderTrack.Size = UDim2.new(1, -32, 0, 7) sliderTrack.Position = UDim2.new(0, 16, 0, 126) sliderTrack.BackgroundColor3 = COLORS.SliderTrack sliderTrack.BorderSizePixel = 0 sliderTrack.Active = true sliderTrack.Parent = mainFrame local sliderTrackCorner = Instance.new("UICorner") sliderTrackCorner.CornerRadius = UDim.new(1, 0) sliderTrackCorner.Parent = sliderTrack local sliderFill = Instance.new("Frame") sliderFill.Name = "SliderFill" sliderFill.Size = UDim2.new(0, 0, 1, 0) sliderFill.BackgroundColor3 = COLORS.SliderFill sliderFill.BorderSizePixel = 0 sliderFill.Parent = sliderTrack local sliderFillCorner = Instance.new("UICorner") sliderFillCorner.CornerRadius = UDim.new(1, 0) sliderFillCorner.Parent = sliderFill local sliderHandle = Instance.new("Frame") sliderHandle.Name = "SliderHandle" sliderHandle.Size = UDim2.new(0, 16, 0, 16) sliderHandle.AnchorPoint = Vector2.new(0.5, 0.5) sliderHandle.Position = UDim2.new(0, 0, 0.5, 0) sliderHandle.BackgroundColor3 = Color3.fromRGB(255, 255, 255) sliderHandle.BorderSizePixel = 0 sliderHandle.Active = true sliderHandle.ZIndex = 2 sliderHandle.Parent = sliderTrack local sliderHandleCorner = Instance.new("UICorner") sliderHandleCorner.CornerRadius = UDim.new(1, 0) sliderHandleCorner.Parent = sliderHandle --================================================== -- PRESET LABEL --================================================== local presetLabel = Instance.new("TextLabel") presetLabel.Name = "PresetLabel" presetLabel.BackgroundTransparency = 1 presetLabel.Size = UDim2.new(1, -32, 0, 18) presetLabel.Position = UDim2.new(0, 16, 0, 143) presetLabel.Text = "Presets" presetLabel.TextColor3 = COLORS.SubText presetLabel.TextXAlignment = Enum.TextXAlignment.Left presetLabel.Font = Enum.Font.Gotham presetLabel.TextSize = 11 presetLabel.Parent = mainFrame --================================================== -- PRESET CONTAINER --================================================== local presetFrame = Instance.new("Frame") presetFrame.Name = "PresetFrame" presetFrame.Size = UDim2.new(1, -32, 0, 36) presetFrame.Position = UDim2.new(0, 16, 0, 164) presetFrame.BackgroundTransparency = 1 presetFrame.Parent = mainFrame -- IMPORTANT: -- This forces buttons to follow LayoutOrder instead -- of Name, which fixes the ordering issue. local presetLayout = Instance.new("UIListLayout") presetLayout.Name = "PresetLayout" presetLayout.FillDirection = Enum.FillDirection.Horizontal presetLayout.HorizontalAlignment = Enum.HorizontalAlignment.Left presetLayout.VerticalAlignment = Enum.VerticalAlignment.Center presetLayout.SortOrder = Enum.SortOrder.LayoutOrder presetLayout.Padding = UDim.new(0, 6) presetLayout.Parent = presetFrame --================================================== -- MINIMIZED ICON --================================================== local minimizedIcon = Instance.new("TextButton") minimizedIcon.Name = "MinimizedIcon" minimizedIcon.Size = UDim2.new(0, 44, 0, 44) minimizedIcon.Position = UDim2.new(0, 20, 0, 20) minimizedIcon.BackgroundColor3 = COLORS.Background minimizedIcon.Text = "S" minimizedIcon.TextColor3 = COLORS.Text minimizedIcon.Font = Enum.Font.GothamBold minimizedIcon.TextSize = 18 minimizedIcon.AutoButtonColor = false minimizedIcon.Visible = false minimizedIcon.Parent = screenGui local minimizedIconCorner = Instance.new("UICorner") minimizedIconCorner.CornerRadius = UDim.new(1, 0) minimizedIconCorner.Parent = minimizedIcon --================================================== -- SCREEN HELPERS --================================================== local function getViewportSize() local camera = Workspace.CurrentCamera if camera then return camera.ViewportSize end return Vector2.new(1920, 1080) end local function clampMainFrameToScreen() local viewport = getViewportSize() local frameWidth = mainFrame.AbsoluteSize.X local frameHeight = mainFrame.AbsoluteSize.Y local maxX = math.max(viewport.X - frameWidth, 0) local maxY = math.max(viewport.Y - frameHeight, 0) local x = math.clamp(mainFrame.Position.X.Offset, 0, maxX) local y = math.clamp(mainFrame.Position.Y.Offset, 0, maxY) mainFrame.Position = UDim2.new( 0, x, 0, y ) end local function updateUIScale() local viewport = getViewportSize() if viewport.X < CONFIG.MobileBreakpoint then uiScale.Scale = CONFIG.MobileScale else uiScale.Scale = 1 end clampMainFrameToScreen() end local function bindViewportSignal() local camera = Workspace.CurrentCamera if camera then track( camera:GetPropertyChangedSignal("ViewportSize"):Connect( updateUIScale ) ) end end bindViewportSignal() updateUIScale() track( Workspace:GetPropertyChangedSignal("CurrentCamera"):Connect( function() bindViewportSignal() updateUIScale() end ) ) --================================================== -- PANEL DRAGGING --================================================== local dragging = false local dragInput = nil local dragStart = nil local dragStartPosition = nil local function updatePanelDrag(input) if not dragStart or not dragStartPosition then return end local delta = input.Position - dragStart local newPosition = UDim2.new( dragStartPosition.X.Scale, dragStartPosition.X.Offset + delta.X, dragStartPosition.Y.Scale, dragStartPosition.Y.Offset + delta.Y ) mainFrame.Position = newPosition clampMainFrameToScreen() end track( header.InputBegan:Connect( function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position dragStartPosition = mainFrame.Position input.Changed:Connect( function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end ) end end ) ) track( header.InputChanged:Connect( function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end ) ) track( UserInputService.InputChanged:Connect( function(input) if input == dragInput and dragging then updatePanelDrag(input) end end ) ) --================================================== -- ANTI-SLIDE --================================================== local function stopAntiSlide() if antiSlideConnection then antiSlideConnection:Disconnect() antiSlideConnection = nil end end local function startAntiSlide() if not CONFIG.EnableAntiSlide then return end stopAntiSlide() antiSlideConnection = RunService.Heartbeat:Connect( function() if not characterState.Humanoid then return end if not characterState.RootPart then return end if characterState.Humanoid.FloorMaterial == Enum.Material.Air then return end if characterState.Humanoid.MoveDirection.Magnitude < CONFIG.StopThreshold then local velocity = characterState.RootPart.AssemblyLinearVelocity characterState.RootPart.AssemblyLinearVelocity = Vector3.new( 0, velocity.Y, 0 ) end end ) end --================================================== -- UI UPDATE --================================================== local function updateUI(animate) local relative = speedToRelative(state.Speed) local fillGoal = UDim2.new( relative, 0, 1, 0 ) local handleGoal = UDim2.new( relative, 0, 0.5, 0 ) local toggleColor = state.Enabled and COLORS.On or COLORS.Off local strokeColor = state.Enabled and COLORS.On or COLORS.OffStroke local dotColor = state.Enabled and COLORS.On or Color3.fromRGB(150, 150, 150) if animate and CONFIG.EnableAnimations then TweenService:Create( sliderFill, TWEEN_INFO, { Size = fillGoal } ):Play() TweenService:Create( sliderHandle, TWEEN_INFO, { Position = handleGoal } ):Play() TweenService:Create( toggleButton, TWEEN_INFO, { BackgroundColor3 = toggleColor } ):Play() TweenService:Create( toggleStroke, TWEEN_INFO, { Color = strokeColor } ):Play() TweenService:Create( toggleDot, TWEEN_INFO, { BackgroundColor3 = dotColor } ):Play() else sliderFill.Size = fillGoal sliderHandle.Position = handleGoal toggleButton.BackgroundColor3 = toggleColor toggleStroke.Color = strokeColor toggleDot.BackgroundColor3 = dotColor end if not speedTextBox:IsFocused() then speedTextBox.Text = tostring(state.Speed) end statusLabel.Text = state.Enabled and "Fast Speed: ON" or "Fast Speed: OFF" currentSpeedLabel.Text = "Current: " .. tostring(state.Speed) end --================================================== -- APPLY SPEED --================================================== local function setSpeed(value, animate) state.Speed = clampSpeed(value) updateUI( animate ~= false ) if characterState.Humanoid then if state.Enabled then characterState.Humanoid.WalkSpeed = state.Speed else characterState.Humanoid.WalkSpeed = CONFIG.NormalSpeed end end end local function setEnabled(enabled, animate) state.Enabled = enabled == true if state.Enabled then startAntiSlide() else stopAntiSlide() end if characterState.Humanoid then characterState.Humanoid.WalkSpeed = state.Enabled and state.Speed or CONFIG.NormalSpeed end updateUI( animate ~= false ) end local function toggleSpeed() setEnabled( not state.Enabled, true ) playClickSound() end --================================================== -- SLIDER --================================================== local function getSpeedFromInput(inputPosition) local trackPosition = sliderTrack.AbsolutePosition.X local trackWidth = sliderTrack.AbsoluteSize.X if trackWidth <= 0 then return state.Speed end local relative = ( inputPosition.X - trackPosition ) / trackWidth relative = math.clamp( relative, 0, 1 ) return relativeToSpeed(relative) end local function beginSliderDrag(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then state.SliderDragging = true setSpeed( getSpeedFromInput(input.Position), false ) end end track( sliderTrack.InputBegan:Connect( beginSliderDrag ) ) track( sliderHandle.InputBegan:Connect( beginSliderDrag ) ) track( UserInputService.InputChanged:Connect( function(input) if not state.SliderDragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then setSpeed( getSpeedFromInput(input.Position), false ) end end ) ) track( UserInputService.InputEnded:Connect( function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then state.SliderDragging = false end end ) ) --================================================== -- NUMERIC TEXTBOX --================================================== local filteringText = false track( speedTextBox:GetPropertyChangedSignal("Text"):Connect( function() if filteringText then return end local cleaned = speedTextBox.Text:gsub( "%D", "" ) if cleaned ~= speedTextBox.Text then filteringText = true speedTextBox.Text = cleaned filteringText = false end end ) ) track( speedTextBox.FocusLost:Connect( function() local value = tonumber(speedTextBox.Text) if value then setSpeed( value, true ) else speedTextBox.Text = tostring(state.Speed) end end ) ) --================================================== -- PRESET BUTTONS --================================================== -- This is the important ordering section. -- -- The table order + LayoutOrder + SortOrder all -- point to the same ordering system. --================================================== for index, preset in ipairs(PRESET_SPEEDS) do local presetButton = Instance.new("TextButton") presetButton.Name = "Preset_" .. tostring(index) presetButton.Size = UDim2.new( 0, 43, 0, 34 ) -- THIS forces the exact order. presetButton.LayoutOrder = index presetButton.BackgroundColor3 = COLORS.PresetBackground presetButton.BorderSizePixel = 0 presetButton.Text = preset.Label presetButton.TextColor3 = COLORS.Text presetButton.Font = Enum.Font.GothamBold presetButton.TextSize = 11 presetButton.AutoButtonColor = false presetButton.Parent = presetFrame local presetCorner = Instance.new("UICorner") presetCorner.CornerRadius = UDim.new(0, 6) presetCorner.Parent = presetButton track( presetButton.MouseEnter:Connect( function() presetButton.BackgroundColor3 = COLORS.PresetHover end ) ) track( presetButton.MouseLeave:Connect( function() presetButton.BackgroundColor3 = COLORS.PresetBackground end ) ) track( presetButton.MouseButton1Click:Connect( function() setSpeed( preset.Value, true ) playClickSound() end ) ) end --================================================== -- TOGGLE BUTTON --================================================== track( toggleButton.MouseButton1Click:Connect( function() toggleSpeed() end ) ) --================================================== -- KEYBIND --================================================== track( UserInputService.InputBegan:Connect( function(input, gameProcessedEvent) if gameProcessedEvent then return end if CONFIG.ToggleKeybind and input.KeyCode == CONFIG.ToggleKeybind then toggleSpeed() end end ) ) --================================================== -- CHARACTER HANDLING --================================================== local function onCharacterAdded(character) if state.Terminated then return end characterState.Humanoid = character:WaitForChild( "Humanoid" ) characterState.RootPart = character:WaitForChild( "HumanoidRootPart" ) if state.Enabled then characterState.Humanoid.WalkSpeed = state.Speed startAntiSlide() else characterState.Humanoid.WalkSpeed = CONFIG.NormalSpeed end end if player.Character then onCharacterAdded( player.Character ) end track( player.CharacterAdded:Connect( onCharacterAdded ) ) --================================================== -- MINIMIZE --================================================== track( minimizeButton.MouseButton1Click:Connect( function() state.Minimized = true mainFrame.Visible = false minimizedIcon.Visible = true end ) ) --================================================== -- RESTORE --================================================== track( minimizedIcon.MouseButton1Click:Connect( function() state.Minimized = false minimizedIcon.Visible = false mainFrame.Visible = true clampMainFrameToScreen() end ) ) --================================================== -- CLOSE BUTTON HOVER --================================================== track( closeButton.MouseEnter:Connect( function() closeButton.TextColor3 = COLORS.CloseHover end ) ) track( closeButton.MouseLeave:Connect( function() closeButton.TextColor3 = Color3.fromRGB( 200, 200, 200 ) end ) ) --================================================== -- TERMINATE --================================================== local function terminateGui() if state.Terminated then return end state.Terminated = true -- Restore normal speed if characterState.Humanoid then characterState.Humanoid.WalkSpeed = CONFIG.NormalSpeed end stopAntiSlide() disconnectAll() if screenGui then screenGui:Destroy() end if script then script:Destroy() end end track( closeButton.MouseButton1Click:Connect( terminateGui ) ) --================================================== -- INITIAL STATE --================================================== state.Speed = clampSpeed( CONFIG.DefaultSpeed ) state.Enabled = false updateUI(false) if characterState.Humanoid then characterState.Humanoid.WalkSpeed = CONFIG.NormalSpeed end