-- Roblox Studio Admin Test Panel
-- Fly + Noclip + White ESP with Name + Studs
-- LocalScript only

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")

local player = Players.LocalPlayer

local flying = false
local noclip = false
local espEnabled = false

local flySpeed = 80
local minSpeed = 20
local maxSpeed = 250

local keys = {}
local flyVelocity = nil
local flyGyro = nil
local espObjects = {}

-- UI

local gui = Instance.new("ScreenGui")
gui.Name = "AdminTestingPanel"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player:WaitForChild("PlayerGui")

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 270, 0, 245)
frame.Position = UDim2.new(0, 30, 0, 120)
frame.BackgroundColor3 = Color3.fromRGB(18, 18, 22)
frame.BorderSizePixel = 0
frame.Parent = gui

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 35)
title.BackgroundTransparency = 1
title.Text = "Admin Test Panel"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Font = Enum.Font.GothamBold
title.TextSize = 16
title.Parent = frame

local function makeButton(text, y)
	local btn = Instance.new("TextButton")
	btn.Size = UDim2.new(1, -20, 0, 36)
	btn.Position = UDim2.new(0, 10, 0, y)
	btn.BackgroundColor3 = Color3.fromRGB(38, 38, 45)
	btn.TextColor3 = Color3.fromRGB(255, 255, 255)
	btn.Font = Enum.Font.Gotham
	btn.TextSize = 14
	btn.Text = text
	btn.BorderSizePixel = 0
	btn.Parent = frame
	return btn
end

local flyBtn = makeButton("Fly: OFF", 45)
local noclipBtn = makeButton("Noclip: OFF", 87)
local espBtn = makeButton("ESP: OFF", 129)

local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(1, -20, 0, 24)
speedLabel.Position = UDim2.new(0, 10, 0, 172)
speedLabel.BackgroundTransparency = 1
speedLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
speedLabel.Font = Enum.Font.Gotham
speedLabel.TextSize = 13
speedLabel.Text = "Fly Speed: " .. flySpeed
speedLabel.Parent = frame

local sliderBack = Instance.new("Frame")
sliderBack.Size = UDim2.new(1, -20, 0, 8)
sliderBack.Position = UDim2.new(0, 10, 0, 205)
sliderBack.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
sliderBack.BorderSizePixel = 0
sliderBack.Parent = frame

local sliderFill = Instance.new("Frame")
sliderFill.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
sliderFill.BorderSizePixel = 0
sliderFill.Parent = sliderBack

local sliderKnob = Instance.new("TextButton")
sliderKnob.Size = UDim2.new(0, 16, 0, 16)
sliderKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
sliderKnob.Text = ""
sliderKnob.BorderSizePixel = 0
sliderKnob.Parent = sliderBack

local draggingSlider = false

local function updateSliderVisual()
	local percent = math.clamp((flySpeed - minSpeed) / (maxSpeed - minSpeed), 0, 1)
	sliderFill.Size = UDim2.new(percent, 0, 1, 0)
	sliderKnob.Position = UDim2.new(percent, -8, 0.5, -8)
	speedLabel.Text = "Fly Speed: " .. flySpeed
end

local function updateSliderFromMouse()
	local mouseX = UIS:GetMouseLocation().X
	local startX = sliderBack.AbsolutePosition.X
	local width = sliderBack.AbsoluteSize.X

	local percent = math.clamp((mouseX - startX) / width, 0, 1)
	flySpeed = math.floor(minSpeed + ((maxSpeed - minSpeed) * percent))

	updateSliderVisual()
end

updateSliderVisual()

sliderKnob.MouseButton1Down:Connect(function()
	draggingSlider = true
end)

sliderBack.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		draggingSlider = true
		updateSliderFromMouse()
	end
end)

UIS.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		draggingSlider = false
	end
end)

-- Character helpers

local function getChar()
	return player.Character
end

local function getRoot()
	local char = getChar()
	if not char then return nil end
	return char:FindFirstChild("HumanoidRootPart")
end

local function getHumanoid()
	local char = getChar()
	if not char then return nil end
	return char:FindFirstChildOfClass("Humanoid")
end

-- Fly

local function startFly()
	local root = getRoot()
	local hum = getHumanoid()
	if not root or not hum then return end

	if flyVelocity then flyVelocity:Destroy() end
	if flyGyro then flyGyro:Destroy() end

	hum.PlatformStand = true

	flyVelocity = Instance.new("BodyVelocity")
	flyVelocity.Name = "AdminFlyVelocity"
	flyVelocity.MaxForce = Vector3.new(1000000, 1000000, 1000000)
	flyVelocity.Velocity = Vector3.zero
	flyVelocity.Parent = root

	flyGyro = Instance.new("BodyGyro")
	flyGyro.Name = "AdminFlyGyro"
	flyGyro.MaxTorque = Vector3.new(1000000, 1000000, 1000000)
	flyGyro.P = 9000
	flyGyro.CFrame = root.CFrame
	flyGyro.Parent = root
end

local function stopFly()
	local hum = getHumanoid()
	local root = getRoot()

	if hum then
		hum.PlatformStand = false
	end

	if root then
		root.AssemblyLinearVelocity = Vector3.zero
		root.AssemblyAngularVelocity = Vector3.zero
	end

	if flyVelocity then
		flyVelocity:Destroy()
		flyVelocity = nil
	end

	if flyGyro then
		flyGyro:Destroy()
		flyGyro = nil
	end
end

flyBtn.MouseButton1Click:Connect(function()
	flying = not flying
	flyBtn.Text = flying and "Fly: ON" or "Fly: OFF"

	if flying then
		startFly()
	else
		stopFly()
	end
end)

-- Noclip

noclipBtn.MouseButton1Click:Connect(function()
	noclip = not noclip
	noclipBtn.Text = noclip and "Noclip: ON" or "Noclip: OFF"
end)

-- ESP

local function removeESP(plr)
	local data = espObjects[plr]
	if not data then return end

	if data.Highlight then
		data.Highlight:Destroy()
	end

	if data.Billboard then
		data.Billboard:Destroy()
	end

	espObjects[plr] = nil
end

local function clearESP()
	for plr in pairs(espObjects) do
		removeESP(plr)
	end
end

local function addESP(plr)
	if plr == player then return end
	if espObjects[plr] then return end

	local char = plr.Character
	if not char then return end

	local root = char:FindFirstChild("HumanoidRootPart")
	if not root then return end

	local highlight = Instance.new("Highlight")
	highlight.Name = "WhitePlayerESP"
	highlight.Adornee = char
	highlight.FillColor = Color3.fromRGB(255, 255, 255)
	highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
	highlight.FillTransparency = 0.85
	highlight.OutlineTransparency = 0
	highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
	highlight.Parent = gui

	local billboard = Instance.new("BillboardGui")
	billboard.Name = "WhitePlayerESPInfo"
	billboard.Adornee = root
	billboard.Size = UDim2.new(0, 220, 0, 45)
	billboard.StudsOffset = Vector3.new(0, 3.5, 0)
	billboard.AlwaysOnTop = true
	billboard.Parent = gui

	local text = Instance.new("TextLabel")
	text.Name = "Info"
	text.Size = UDim2.new(1, 0, 1, 0)
	text.BackgroundTransparency = 1
	text.TextColor3 = Color3.fromRGB(255, 255, 255)
	text.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
	text.TextStrokeTransparency = 0
	text.Font = Enum.Font.GothamBold
	text.TextSize = 13
	text.Text = plr.Name .. " | Loading..."
	text.Parent = billboard

	espObjects[plr] = {
		Highlight = highlight,
		Billboard = billboard,
		Text = text,
		Root = root,
	}
end

espBtn.MouseButton1Click:Connect(function()
	espEnabled = not espEnabled
	espBtn.Text = espEnabled and "ESP: ON" or "ESP: OFF"

	if not espEnabled then
		clearESP()
	end
end)

-- Input

UIS.InputBegan:Connect(function(input, typing)
	if typing then return end
	keys[input.KeyCode] = true
end)

UIS.InputEnded:Connect(function(input)
	keys[input.KeyCode] = false
end)

-- Main loop

RunService.Stepped:Connect(function()
	if not noclip then return end

	local char = getChar()
	if not char then return end

	for _, part in ipairs(char:GetDescendants()) do
		if part:IsA("BasePart") then
			part.CanCollide = false
		end
	end
end)

RunService.RenderStepped:Connect(function()
	if draggingSlider then
		updateSliderFromMouse()
	end

	if flying then
		local cam = workspace.CurrentCamera

		if not flyVelocity or not flyGyro then
			startFly()
		end

		if cam and flyVelocity and flyGyro then
			local move = Vector3.zero

			if keys[Enum.KeyCode.W] then
				move += cam.CFrame.LookVector
			end

			if keys[Enum.KeyCode.S] then
				move -= cam.CFrame.LookVector
			end

			if keys[Enum.KeyCode.A] then
				move -= cam.CFrame.RightVector
			end

			if keys[Enum.KeyCode.D] then
				move += cam.CFrame.RightVector
			end

			if keys[Enum.KeyCode.Space] then
				move += Vector3.new(0, 1, 0)
			end

			if keys[Enum.KeyCode.LeftControl] then
				move -= Vector3.new(0, 1, 0)
			end

			if move.Magnitude > 0 then
				flyVelocity.Velocity = move.Unit * flySpeed
			else
				flyVelocity.Velocity = Vector3.zero
			end

			flyGyro.CFrame = cam.CFrame
		end
	end

	if espEnabled then
		local myRoot = getRoot()

		for _, plr in ipairs(Players:GetPlayers()) do
			if plr ~= player then
				local char = plr.Character
				local root = char and char:FindFirstChild("HumanoidRootPart")

				if not char or not root then
					removeESP(plr)
				else
					if not espObjects[plr] then
						addESP(plr)
					end

					local data = espObjects[plr]

					if data and data.Text and myRoot and root then
						local studs = math.floor((myRoot.Position - root.Position).Magnitude)
						data.Text.Text = plr.Name .. " | " .. studs .. " studs"
					elseif data and data.Text then
						data.Text.Text = plr.Name .. " | Loading..."
					end
				end
			end
		end
	end
end)

-- Player handling

Players.PlayerRemoving:Connect(function(plr)
	removeESP(plr)
end)

local function setupPlayer(plr)
	if plr == player then return end

	plr.CharacterAdded:Connect(function()
		removeESP(plr)

		task.wait(0.5)

		if espEnabled then
			addESP(plr)
		end
	end)

	plr.CharacterRemoving:Connect(function()
		removeESP(plr)
	end)
end

for _, plr in ipairs(Players:GetPlayers()) do
	setupPlayer(plr)
end

Players.PlayerAdded:Connect(setupPlayer)

player.CharacterAdded:Connect(function()
	flying = false
	noclip = false

	flyBtn.Text = "Fly: OFF"
	noclipBtn.Text = "Noclip: OFF"

	stopFly()
end)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: