-- Place this in StarterPlayerScripts or StarterGui as a LocalScript --// SERVICES local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Stats = game:GetService("Stats") --// VARIABLES local player = Players.LocalPlayer local guiParent = player:WaitForChild("PlayerGui") --// CHARACTER HELPERS local character = player.Character local humanoid local function onCharacterAdded(char) character = char humanoid = character:FindFirstChildWhichIsA("Humanoid") or character:WaitForChild("Humanoid") -- Ensure current noclip state is applied to the new character if noclipEnabled ~= nil then -- call local function defined below; safe to call because it's defined later setNoclip(noclipEnabled) end end if not character or not character.Parent then character = player.CharacterAdded:Wait() end humanoid = character:FindFirstChildWhichIsA("Humanoid") or character:WaitForChild("Humanoid") player.CharacterAdded:Connect(onCharacterAdded) --// SCREEN GUI local screenGui = Instance.new("ScreenGui") screenGui.Name = "RGBEpicMenu" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = true screenGui.Parent = guiParent --// MAIN FRAME local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 320, 0, 140) frame.Position = UDim2.new(0.5, -160, 0.15, 0) frame.AnchorPoint = Vector2.new(0.5, 0) frame.BackgroundColor3 = Color3.fromRGB(0, 0, 0) frame.Active = true frame.Draggable = true frame.Parent = screenGui Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10) local outline = Instance.new("UIStroke", frame) outline.Thickness = 3 --// TITLE local title = Instance.new("TextLabel", frame) title.Size = UDim2.new(1, -20, 0, 28) title.Position = UDim2.new(0, 10, 0, 6) title.BackgroundTransparency = 1 title.Text = "Epic Menu Made by 98ikidds" title.Font = Enum.Font.Arcade title.TextSize = 16 --// MINIMIZE BUTTON local minimizeBtn = Instance.new("TextButton", frame) minimizeBtn.Size = UDim2.new(0, 24, 0, 24) minimizeBtn.Position = UDim2.new(1, -30, 0, 6) minimizeBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20) minimizeBtn.Font = Enum.Font.Arcade minimizeBtn.Text = "-" minimizeBtn.TextSize = 20 Instance.new("UICorner", minimizeBtn).CornerRadius = UDim.new(0, 6) --// NOCLIP BUTTON local noclipBtn = Instance.new("TextButton", frame) noclipBtn.Size = UDim2.new(0.9, 0, 0, 40) noclipBtn.Position = UDim2.new(0.5, 0, 0, 45) noclipBtn.AnchorPoint = Vector2.new(0.5, 0) noclipBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20) noclipBtn.Font = Enum.Font.Arcade noclipBtn.Text = "Toggle Noclip" noclipBtn.TextSize = 20 Instance.new("UICorner", noclipBtn).CornerRadius = UDim.new(0, 8) local noclipStroke = Instance.new("UIStroke", noclipBtn) noclipStroke.Thickness = 2 --// FPS BUTTON local fpsBtn = Instance.new("TextButton", frame) fpsBtn.Size = UDim2.new(0.9, 0, 0, 40) fpsBtn.Position = UDim2.new(0.5, 0, 0, 95) fpsBtn.AnchorPoint = Vector2.new(0.5, 0) fpsBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20) fpsBtn.Font = Enum.Font.Arcade fpsBtn.Text = "Show FPS & Ping" fpsBtn.TextSize = 20 Instance.new("UICorner", fpsBtn).CornerRadius = UDim.new(0, 8) local fpsStroke = Instance.new("UIStroke", fpsBtn) fpsStroke.Thickness = 2 --// STATE LABEL local stateLabel = Instance.new("TextLabel", frame) stateLabel.Size = UDim2.new(0.9, 0, 0, 18) stateLabel.Position = UDim2.new(0.5, 0, 1, -20) stateLabel.AnchorPoint = Vector2.new(0.5, 0) stateLabel.BackgroundTransparency = 1 stateLabel.Font = Enum.Font.Arcade stateLabel.TextSize = 14 stateLabel.Text = "OFF" --// KEY FRAME local keyFrame = Instance.new("Frame", screenGui) keyFrame.Size = UDim2.new(0, 300, 0, 140) keyFrame.Position = UDim2.new(0.5, -150, 0.5, -70) keyFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0) keyFrame.Visible = false keyFrame.Active = true keyFrame.Draggable = true Instance.new("UICorner", keyFrame).CornerRadius = UDim.new(0, 10) local keyOutline = Instance.new("UIStroke", keyFrame) keyOutline.Thickness = 2 local keyTitle = Instance.new("TextLabel", keyFrame) keyTitle.Size = UDim2.new(1, -20, 0, 28) keyTitle.Position = UDim2.new(0, 10, 0, 6) keyTitle.BackgroundTransparency = 1 keyTitle.Font = Enum.Font.Arcade keyTitle.TextSize = 16 keyTitle.Text = "Enter Noclip Key:" local keyWarning = Instance.new("TextLabel", keyFrame) keyWarning.Size = UDim2.new(1, -20, 0, 18) keyWarning.Position = UDim2.new(0, 10, 0, 36) keyWarning.BackgroundTransparency = 1 keyWarning.Font = Enum.Font.Arcade keyWarning.TextSize = 12 keyWarning.TextColor3 = Color3.fromRGB(255, 0, 0) keyWarning.Text = "" keyWarning.Visible = false local keyBox = Instance.new("TextBox", keyFrame) keyBox.Size = UDim2.new(0.8, 0, 0, 30) keyBox.Position = UDim2.new(0.5, 0, 0, 60) keyBox.AnchorPoint = Vector2.new(0.5, 0) keyBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40) keyBox.TextColor3 = Color3.fromRGB(255, 255, 255) keyBox.PlaceholderText = "Type key here..." keyBox.Font = Enum.Font.Arcade keyBox.TextSize = 16 Instance.new("UICorner", keyBox).CornerRadius = UDim.new(0, 5) local submitBtn = Instance.new("TextButton", keyFrame) submitBtn.Size = UDim2.new(0.5, 0, 0, 30) submitBtn.Position = UDim2.new(0.5, 0, 1, -35) submitBtn.AnchorPoint = Vector2.new(0.5, 0) submitBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20) submitBtn.Font = Enum.Font.Arcade submitBtn.TextSize = 16 submitBtn.Text = "Submit" Instance.new("UICorner", submitBtn).CornerRadius = UDim.new(0, 5) local submitOutline = Instance.new("UIStroke", submitBtn) submitOutline.Thickness = 2 --// FPS FRAME (DRAGGABLE) local fpsFrame = Instance.new("Frame", screenGui) fpsFrame.Size = UDim2.new(0, 180, 0, 60) fpsFrame.Position = UDim2.new(1, -190, 0.2, 0) fpsFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0) fpsFrame.Visible = false fpsFrame.Active = true fpsFrame.Draggable = true Instance.new("UICorner", fpsFrame).CornerRadius = UDim.new(0, 10) local fpsOutline = Instance.new("UIStroke", fpsFrame) fpsOutline.Thickness = 2 local fpsLabel = Instance.new("TextLabel", fpsFrame) fpsLabel.Size = UDim2.new(1, -20, 0, 25) fpsLabel.Position = UDim2.new(0, 10, 0, 5) fpsLabel.BackgroundTransparency = 1 fpsLabel.Font = Enum.Font.Arcade fpsLabel.TextSize = 16 fpsLabel.TextColor3 = Color3.fromRGB(255, 255, 255) fpsLabel.Text = "FPS: 0" local pingLabel = Instance.new("TextLabel", fpsFrame) pingLabel.Size = UDim2.new(1, -20, 0, 25) pingLabel.Position = UDim2.new(0, 10, 0, 30) pingLabel.BackgroundTransparency = 1 pingLabel.Font = Enum.Font.Arcade pingLabel.TextSize = 16 pingLabel.TextColor3 = Color3.fromRGB(255, 255, 255) pingLabel.Text = "Ping: 0ms" --// LOGIC noclipEnabled = false -- global-ish for onCharacterAdded access local correctKey = "Unreleased!!!" -- helper to set CanCollide for all character BaseParts immediately function setNoclip(enabled) if not character then return end for _, part in ipairs(character:GetDescendants()) do if part:IsA("BasePart") then -- Avoid changing the HumanoidRootPart's collision if nil or locked, but typically fine pcall(function() part.CanCollide = not enabled end) end end end local function toggleNoclip() noclipEnabled = not noclipEnabled stateLabel.Text = noclipEnabled and "ON" or "OFF" -- apply immediately setNoclip(noclipEnabled) end submitBtn.MouseButton1Click:Connect(function() keyWarning.Visible = false if keyBox.Text == correctKey then toggleNoclip() keyFrame.Visible = false keyBox.Text = "" else keyWarning.Text = "Wrong key, try again!" keyWarning.Visible = true end end) noclipBtn.MouseButton1Click:Connect(function() -- if currently enabled -> turn off immediately (no key) if noclipEnabled then toggleNoclip() else -- turning on requires key keyWarning.Visible = false keyBox.Text = "" keyFrame.Visible = true keyBox:CaptureFocus() end end) -- ensure noclip state is applied each time character spawns player.CharacterAdded:Connect(function(char) character = char humanoid = character:WaitForChild("Humanoid") -- small delay to allow parts to be created wait(0.1) setNoclip(noclipEnabled) end) --// FPS/Ping Toggle local showStats = false fpsBtn.MouseButton1Click:Connect(function() showStats = not showStats fpsFrame.Visible = showStats end) -- FPS & Ping Update (stable counting) local lastTime = tick() local frames = 0 RunService.RenderStepped:Connect(function(dt) frames = frames + 1 if tick() - lastTime >= 1 then local fps = frames frames = 0 lastTime = tick() if fpsFrame.Visible then local pingValue = 0 local ok, data = pcall(function() return Stats.Network.ServerStatsItem["Data Ping"]:GetValue() end) if ok and data then pingValue = math.floor(data) end fpsLabel.Text = "FPS: " .. tostring(fps) pingLabel.Text = "Ping: " .. tostring(pingValue) .. "ms" end end end) --// MINIMIZE LOGIC local minimized = false minimizeBtn.MouseButton1Click:Connect(function() minimized = not minimized if minimized then minimizeBtn.Text = "+" noclipBtn.Visible = false fpsBtn.Visible = false stateLabel.Visible = false keyFrame.Visible = false frame.Size = UDim2.new(0, 320, 0, 40) else minimizeBtn.Text = "-" noclipBtn.Visible = true fpsBtn.Visible = true stateLabel.Visible = true frame.Size = UDim2.new(0, 320, 0, 140) end end) --// RGB EFFECT local hue = 0 RunService.RenderStepped:Connect(function(dt) hue = (hue + dt * 0.25) % 1 local color = Color3.fromHSV(hue, 1, 1) outline.Color = color title.TextColor3 = color noclipBtn.TextColor3 = color fpsBtn.TextColor3 = color stateLabel.TextColor3 = color minimizeBtn.TextColor3 = color noclipStroke.Color = color fpsStroke.Color = color keyOutline.Color = color submitOutline.Color = color fpsOutline.Color = color -- keep warning readable (red) unless you want rainbow for it: keyWarning.TextColor3 = Color3.fromRGB(255, 0, 0) end)