--// StarterPlayerScripts LocalScript local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local player = Players.LocalPlayer -- Prevent duplicate menus if player:WaitForChild("PlayerGui"):FindFirstChild("CustomMenuGui") then return end -- Default attributes if player:GetAttribute("SpeedActive") == nil then player:SetAttribute("SpeedActive", false) end if player:GetAttribute("InfiniteJump") == nil then player:SetAttribute("InfiniteJump", false) end if player:GetAttribute("NoclipActive") == nil then player:SetAttribute("NoclipActive", false) end -- ScreenGui local screenGui = Instance.new("ScreenGui") screenGui.Name = "CustomMenuGui" screenGui.Parent = player:WaitForChild("PlayerGui") screenGui.ResetOnSpawn = false -- Menu frame local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 220, 0, 260) mainFrame.Position = UDim2.new(0.1, 0, 0.1, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(0,0,0) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Draggable = true mainFrame.Parent = screenGui -- Grey outline for main frame local outlineFrame = Instance.new("UICorner") outlineFrame.CornerRadius = UDim.new(0,15) outlineFrame.Parent = mainFrame local border = Instance.new("UIStroke") border.Thickness = 2 border.Color = Color3.fromRGB(128,128,128) border.Parent = mainFrame -- Rainbow player label local playerLabel = Instance.new("TextLabel") playerLabel.Size = UDim2.new(0, 200, 0, 30) playerLabel.Position = UDim2.new(0.5, -100, 0, 5) playerLabel.Text = player.Name playerLabel.BackgroundTransparency = 1 playerLabel.TextScaled = true playerLabel.Font = Enum.Font.SourceSansBold playerLabel.Parent = mainFrame local hue = 0 RunService.RenderStepped:Connect(function() hue = (hue + 0.5) % 360 playerLabel.TextColor3 = Color3.fromHSV(hue/360,1,1) end) -- Toggle button local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.new(0,30,0,30) toggleBtn.Position = UDim2.new(1,-35,0,5) toggleBtn.Text = "-" toggleBtn.BackgroundColor3 = Color3.fromRGB(255,255,255) toggleBtn.TextColor3 = Color3.fromRGB(0,0,0) toggleBtn.Parent = mainFrame local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0,8) toggleCorner.Parent = toggleBtn -- Button creation with outline local function createButton(name,yOffset) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0,180,0,40) btn.Position = UDim2.new(0.5,-90,0,yOffset) btn.Text = name btn.BackgroundColor3 = Color3.fromRGB(255,255,255) btn.TextColor3 = Color3.fromRGB(0,0,0) btn.Parent = mainFrame local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0,10) corner.Parent = btn local stroke = Instance.new("UIStroke") stroke.Thickness = 2 stroke.Color = Color3.fromRGB(128,128,128) stroke.Parent = btn return btn end -- Buttons local teleportBtn = createButton("Teleport 10 Studs Forward",50) local speedBtn = createButton("Speed: OFF",100) local jumpBtn = createButton("Infinite Jump: OFF",150) local noclipBtn = createButton("Noclip: OFF",200) -- Character references local function getCharacter() local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local hrp = character:WaitForChild("HumanoidRootPart") return character, humanoid, hrp end -- Update button color based on active state local function updateButtonColor(btn, active) if active then btn.BackgroundColor3 = Color3.fromRGB(0,255,0) else btn.BackgroundColor3 = Color3.fromRGB(255,255,255) end end -- Teleport teleportBtn.MouseButton1Click:Connect(function() local _,_,hrp = getCharacter() if hrp then hrp.CFrame = hrp.CFrame + hrp.CFrame.LookVector*10 end teleportBtn.BackgroundColor3 = Color3.fromRGB(0,255,0) task.delay(0.5,function() teleportBtn.BackgroundColor3 = Color3.fromRGB(255,255,255) end) end) -- Speed toggle speedBtn.MouseButton1Click:Connect(function() local _,humanoid,_ = getCharacter() local current = player:GetAttribute("SpeedActive") player:SetAttribute("SpeedActive", not current) if not current then humanoid.WalkSpeed = 50 speedBtn.Text = "Speed: ON" else humanoid.WalkSpeed = 16 speedBtn.Text = "Speed: OFF" end updateButtonColor(speedBtn, not current) end) -- Infinite Jump toggle jumpBtn.MouseButton1Click:Connect(function() local current = player:GetAttribute("InfiniteJump") player:SetAttribute("InfiniteJump", not current) if not current then jumpBtn.Text = "Infinite Jump: ON" else jumpBtn.Text = "Infinite Jump: OFF" end updateButtonColor(jumpBtn, not current) end) -- Noclip toggle noclipBtn.MouseButton1Click:Connect(function() local current = player:GetAttribute("NoclipActive") player:SetAttribute("NoclipActive", not current) if not current then noclipBtn.Text = "Noclip: ON" else noclipBtn.Text = "Noclip: OFF" end updateButtonColor(noclipBtn, not current) end) -- Infinite jump input UserInputService.JumpRequest:Connect(function() if player:GetAttribute("InfiniteJump") then local _,humanoid,_ = getCharacter() humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end) -- Noclip functionality RunService.Stepped:Connect(function() local character,_,_ = getCharacter() if player:GetAttribute("NoclipActive") and character then for _, part in pairs(character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end else for _, part in pairs(character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = true end end end end) -- Restore states local function restoreStates() local _,humanoid,_ = getCharacter() humanoid.WalkSpeed = player:GetAttribute("SpeedActive") and 50 or 16 speedBtn.Text = player:GetAttribute("SpeedActive") and "Speed: ON" or "Speed: OFF" jumpBtn.Text = player:GetAttribute("InfiniteJump") and "Infinite Jump: ON" or "Infinite Jump: OFF" noclipBtn.Text = player:GetAttribute("NoclipActive") and "Noclip: ON" or "Noclip: OFF" updateButtonColor(speedBtn, player:GetAttribute("SpeedActive")) updateButtonColor(jumpBtn, player:GetAttribute("InfiniteJump")) updateButtonColor(noclipBtn, player:GetAttribute("NoclipActive")) end player.CharacterAdded:Connect(restoreStates) restoreStates() -- Toggle menu open/close local menuOpen = true toggleBtn.MouseButton1Click:Connect(function() menuOpen = not menuOpen if menuOpen then mainFrame.Size = UDim2.new(0,220,0,260) toggleBtn.Text = "-" teleportBtn.Visible = true speedBtn.Visible = true jumpBtn.Visible = true noclipBtn.Visible = true playerLabel.Visible = true toggleBtn.Position = UDim2.new(1,-35,0,5) else mainFrame.Size = UDim2.new(0,220,0,50) toggleBtn.Text = "+" teleportBtn.Visible = false speedBtn.Visible = false jumpBtn.Visible = false noclipBtn.Visible = false playerLabel.Visible = true -- Vertically center toggle button on collapsed menu toggleBtn.Position = UDim2.new(1,-35,0.5,-15) end end)