
KeylessUniversal

.
📦 How to use
1) Insert this as a LocalScript under StarterPlayer > StarterPlayerScripts.
(It will create the ScreenGui in PlayerGui at runtime.)
2) Play test. You’ll see the GUI at the top‑right, above the mobile thumbstick area.
3) Use Settings to change default IDs (music, particle texture, skybox).
Notes
• All changes here are client‑side visuals/controls unless otherwise noted.
• “Change name” sets Humanoid.DisplayName, which is a local visual.
• Orbiting orb is client‑side and shows simple join/leave notifications.
• Changes will be made in the future.
--]]
--// Services
local Players = game:GetService("Players")
local StarterGui = game:GetService("StarterGui")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local SoundService = game:GetService("SoundService")
local Lighting = game:GetService("Lighting")
local LOCAL_PLAYER = Players.LocalPlayer
local PlayerGui = LOCAL_PLAYER:WaitForChild("PlayerGui")
--// Config (defaults; editable from Settings page)
local Config = {
GUIName = "p0pgui",
Colors = {
Text = Color3.fromRGB(255,255,255),
FrameBg = Color3.fromRGB(0,0,0),
Stroke = Color3.fromRGB(255,0,0),
},
StrokeThickness = 3,
DefaultMusicId = "1843520914", -- any valid asset id, change in Settings
DefaultParticleTexture = "rbxassetid://121309010086801", -- your provided id
DefaultSkyboxId = "rbxassetid://121309010086801", -- used for all faces
}
-- Utilities
local function makeStroke(parent)
local s = Instance.new("UIStroke")
s.Color = Config.Colors.Stroke
s.Thickness = Config.StrokeThickness
s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
s.Parent = parent
return s
end
local function pad(parent, p)
local ui = Instance.new("UIPadding")
ui.PaddingTop = UDim.new(0,p)
ui.PaddingBottom = UDim.new(0,p)
ui.PaddingLeft = UDim.new(0,p)
ui.PaddingRight = UDim.new(0,p)
ui.Parent = parent
return ui
end
local function vlist(parent, spacing)
local lay = Instance.new("UIListLayout")
lay.FillDirection = Enum.FillDirection.Vertical
lay.Padding = UDim.new(0, spacing)
lay.SortOrder = Enum.SortOrder.LayoutOrder
lay.Parent = parent
return lay
end
local function hlist(parent, spacing)
local lay = Instance.new("UIListLayout")
lay.FillDirection = Enum.FillDirection.Horizontal
lay.Padding = UDim.new(0, spacing)
lay.SortOrder = Enum.SortOrder.LayoutOrder
lay.Parent = parent
return lay
end
local function makeButton(text, onClick)
local b = Instance.new("TextButton")
b.Size = UDim2.new(1,0,0,36)
b.BackgroundColor3 = Config.Colors.FrameBg
b.TextColor3 = Config.Colors.Text
b.Text = text
b.AutoButtonColor = true
b.Font = Enum.Font.GothamBold
b.TextSize = 14
makeStroke(b)
b.MouseButton1Click:Connect(function()
pcall(onClick)
end)
return b
end
local function makeTextbox(placeholder)
local tb = Instance.new("TextBox")
tb.Size = UDim2.new(1,0,0,36)
tb.BackgroundColor3 = Config.Colors.FrameBg
tb.TextColor3 = Config.Colors.Text
tb.PlaceholderText = placeholder
tb.ClearTextOnFocus = false
tb.Text = ""
tb.Font = Enum.Font.Gotham
tb.TextSize = 14
makeStroke(tb)
return tb
end
local function notify(title, text)
pcall(function()
StarterGui:SetCore("SendNotification", {Title = title, Text = text, Duration = 4})
end)
end
--// Build ScreenGui
local gui = Instance.new("ScreenGui")
gui.Name = Config.GUIName
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = false -- respect safe areas
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = PlayerGui
-- master container (top‑right)
local root = Instance.new("Frame")
root.BackgroundColor3 = Config.Colors.FrameBg
root.Size = UDim2.new(0, 380, 0, 420)
root.AnchorPoint = Vector2.new(1,0)
root.Position = UDim2.new(1, -12, 0, 12)
root.Active = true
root.Draggable = true
makeStroke(root)
root.Parent = gui
pad(root, 8)
-- header
local header = Instance.new("Frame")
header.BackgroundTransparency = 1
header.Size = UDim2.new(1,0,0,28)
header.Parent = root
local title = Instance.new("TextLabel")
title.BackgroundTransparency = 1
title.Size = UDim2.new(1,-100,1,0)
title.TextXAlignment = Enum.TextXAlignment.Left
title.TextColor3 = Config.Colors.Text
title.Font = Enum.Font.GothamBlack
title.TextSize = 18
title.Text = "p0pgui"
title.Parent = header
local nav = Instance.new("Frame")
nav.BackgroundTransparency = 1
nav.Size = UDim2.new(0,96,1,0)
nav.AnchorPoint = Vector2.new(1,0)
nav.Position = UDim2.new(1,0,0,0)
nav.Parent = header
hlist(nav, 8)
local leftBtn = makeButton("◀", function() end)
leftBtn.Size = UDim2.new(0,44,1,0)
leftBtn.Parent = nav
local rightBtn = makeButton("▶", function() end)
rightBtn.Size = UDim2.new(0,44,1,0)
rightBtn.Parent = nav
-- content area
local content = Instance.new("Frame")
content.BackgroundTransparency = 1
content.Size = UDim2.new(1,0,1,-36)
content.Position = UDim2.new(0,0,0,36)
content.Parent = root
local pagesFolder = Instance.new("Folder")
pagesFolder.Name = "Pages"
pagesFolder.Parent = content
local pageOrder = {"Movement","Character","Visuals","Audio","Utilities","Settings","About"}
local currentIndex = 1
local function makePage(name)
local page = Instance.new("Frame")
page.Name = name
page.BackgroundTransparency = 1
page.Size = UDim2.new(1,0,1,0)
page.Visible = false
page.Parent = pagesFolder
local scroll = Instance.new("ScrollingFrame")
scroll.BackgroundTransparency = 1
scroll.Size = UDim2.new(1,0,1,0)
scroll.CanvasSize = UDim2.new(0,0,0,0)
scroll.ScrollBarThickness = 6
scroll.Parent = page
pad(scroll, 6)
local list = vlist(scroll, 6)
list:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
scroll.CanvasSize = UDim2.new(0,0,0,list.AbsoluteContentSize.Y + 12)
end)
return page, scroll
end
local function showPage(i)
for _,n in ipairs(pageOrder) do
pagesFolder[n].Visible = false
end
currentIndex = ((i - 1) % #pageOrder) + 1
pagesFolder[pageOrder[currentIndex]].Visible = true
title.Text = (". p0pgui • %s"):format(pageOrder[currentIndex])
end
leftBtn.MouseButton1Click:Connect(function()
showPage(currentIndex - 1)
end)
rightBtn.MouseButton1Click:Connect(function()
showPage(currentIndex + 1)
end)
--// Helpers: Character access
local function getHumanoid()
local char = LOCAL_PLAYER.Character or LOCAL_PLAYER.CharacterAdded:Wait()
return char:FindFirstChildOfClass("Humanoid")
end
local function forCharacterParts(fn)
local char = LOCAL_PLAYER.Character or LOCAL_PLAYER.CharacterAdded:Wait()
for _,inst in ipairs(char:GetDescendants()) do
if inst:IsA("BasePart") then fn(inst) end
end
end
--// State
local State = {
InfiniteJump = false,
Noclip = false,
Billboard = nil,
Orb = nil,
MusicSound = nil,
}
-- Infinite Jump
UserInputService.JumpRequest:Connect(function()
if State.InfiniteJump then
local hum = getHumanoid()
if hum then hum:ChangeState(Enum.HumanoidStateType.Jumping) end
end
end)
-- Noclip heartbeat
RunService.Stepped:Connect(function()
if State.Noclip then
forCharacterParts(function(p)
p.CanCollide = false
end)
end
end)
--// Build Pages
-- Movement
local movementPage, movementScroll = makePage("Movement")
makeButton("Set WalkSpeed (16 default)", function() end).Parent = movementScroll
local wsBox = makeTextbox("Enter WalkSpeed (e.g. 16, 24, 50)")
wsBox.Parent = movementScroll
wsBox.FocusLost:Connect(function(enterPressed)
if enterPressed then
local hum = getHumanoid()
local n = tonumber(wsBox.Text)
if hum and n then hum.WalkSpeed = n notify("WalkSpeed", "Set to "..n) end
end
end)
local infJumpBtn = makeButton("Toggle Infinite Jump", function()
State.InfiniteJump = not State.InfiniteJump
notify("Infinite Jump", State.InfiniteJump and "Enabled" or "Disabled")
end)
infJumpBtn.Parent = movementScroll
local noclipBtn = makeButton("Toggle Noclip", function()
State.Noclip = not State.Noclip
notify("Noclip", State.Noclip and "Enabled" or "Disabled")
end)
noclipBtn.Parent = movementScroll
-- Character
local charPage, charScroll = makePage("Character")
local visBtn = makeButton("Visible", function()
forCharacterParts(function(p)
p.LocalTransparencyModifier = 0
end)
end)
visBtn.Parent = charScroll
local invisBtn = makeButton("Invisible (local)", function()
forCharacterParts(function(p)
p.LocalTransparencyModifier = 1
end)
end)
invisBtn.Parent = charScroll
local nameBox = makeTextbox("Change Display Name (local)")
nameBox.Parent = charScroll
nameBox.FocusLost:Connect(function(enter)
if enter then
local hum = getHumanoid()
if hum then
hum.DisplayName = nameBox.Text ~= "" and nameBox.Text or hum.DisplayName
notify("Name", "DisplayName set (local)")
end
end
end)
local billboardBtn = makeButton("Billboard above head: popularkidd", function()
local char = LOCAL_PLAYER.Character or LOCAL_PLAYER.CharacterAdded:Wait()
if State.Billboard then State.Billboard:Destroy() State.Billboard = nil end
local head = char:FindFirstChild("Head")
if not head then return end
local bb = Instance.new("BillboardGui")
bb.Size = UDim2.new(0, 160, 0, 36)
bb.StudsOffset = Vector3.new(0, 2.5, 0)
bb.AlwaysOnTop = true
bb.Name = "p0pBillboard"
bb.Parent = head
local label = Instance.new("TextLabel")
label.BackgroundColor3 = Config.Colors.FrameBg
label.TextColor3 = Config.Colors.Text
label.Text = "popularkidd"
label.Font = Enum.Font.GothamBold
label.TextScaled = true
label.Size = UDim2.new(1,0,1,0)
label.Parent = bb
makeStroke(label)
State.Billboard = bb
notify("Billboard", "Placed above your head")
end)
billboardBtn.Parent = charScroll
-- Visuals
local visualsPage, visualsScroll = makePage("Visuals")
local particlesBtn = makeButton("Toggle Red Particles (on your character)", function()
local char = LOCAL_PLAYER.Character or LOCAL_PLAYER.CharacterAdded:Wait()
local existing = char:FindFirstChild("p0pParticles", true)
if existing then
existing.Parent:Destroy()
notify("Particles", "Removed")
return
end
forCharacterParts(function(p)
local att = Instance.new("Attachment")
att.Name = "p0pParticles"
att.Parent = p
local pe = Instance.new("ParticleEmitter")
pe.Name = "p0pParticlesEmitter"
pe.Texture = Config.DefaultParticleTexture
pe.Color = ColorSequence.new(Color3.fromRGB(255,0,0))
pe.Rate = 12
pe.Lifetime = NumberRange.new(1.2, 1.8)
pe.Speed = NumberRange.new(1,3)
pe.Size = NumberSequence.new({NumberSequenceKeypoint.new(0,0.6), NumberSequenceKeypoint.new(1,0.1)})
pe.Parent = att
end)
notify("Particles", "Applied to your character")
end)
particlesBtn.Parent = visualsScroll
local skyBtn = makeButton("Change Skybox (uses one ID for all faces)", function()
local sky = Lighting:FindFirstChildOfClass("Sky") or Instance.new("Sky")
sky.SkyboxBk = Config.DefaultSkyboxId
sky.SkyboxDn = Config.DefaultSkyboxId
sky.SkyboxFt = Config.DefaultSkyboxId
sky.SkyboxLf = Config.DefaultSkyboxId
sky.SkyboxRt = Config.DefaultSkyboxId
sky.SkyboxUp = Config.DefaultSkyboxId
sky.Parent = Lighting
notify("Skybox", "Updated")
end)
skyBtn.Parent = visualsScroll
-- Audio
local audioPage, audioScroll = makePage("Audio")
local musicIdBox = makeTextbox("Music ID (number only)")
musicIdBox.Text = Config.DefaultMusicId:gsub("rbxassetid://","")
musicIdBox.Parent = audioScroll
local playBtn = makeButton("Play Music", function()
local idNum = musicIdBox.Text:match("%d+") or Config.DefaultMusicId
Config.DefaultMusicId = idNum
if not State.MusicSound then
local s = Instance.new("Sound")
s.Name = "p0pguiMusic"
s.Looped = true
s.SoundId = "rbxassetid://"..idNum
s.Parent = SoundService
State.MusicSound = s
end
State.MusicSound.SoundId = "rbxassetid://"..idNum
State.MusicSound:Play()
notify("Music", "Playing ID "..idNum)
end)
playBtn.Parent = audioScroll
local stopBtn = makeButton("Stop Music", function()
if State.MusicSound then State.MusicSound:Stop() end
end)
stopBtn.Parent = audioScroll
local volumeBox = makeTextbox("Volume (0.0 - 10)")
volumeBox.Parent = audioScroll
volumeBox.FocusLost:Connect(function(enter)
if enter and State.MusicSound then
local v = tonumber(volumeBox.Text)
if v then State.MusicSound.Volume = math.clamp(v,0,10) notify("Volume", tostring(State.MusicSound.Volume)) end
end
end)
local pitchBox = makeTextbox("Pitch / PlaybackSpeed (0.5 - 2.0)")
pitchBox.Parent = audioScroll
pitchBox.FocusLost:Connect(function(enter)
if enter and State.MusicSound then
local p = tonumber(pitchBox.Text)
if p then State.MusicSound.PlaybackSpeed = math.clamp(p, 0.5, 2) notify("Pitch", tostring(State.MusicSound.PlaybackSpeed)) end
end
end)
-- Utilities
local utilsPage, utilsScroll = makePage("Utilities")
local orbBtn = makeButton("Toggle Orbiting Orb + Join/Leave notifications", function()
if State.Orb then
State.Orb:Destroy()
State.Orb = nil
notify("Orb", "Removed")
return
end
local orb = Instance.new("Part")
orb.Shape = Enum.PartType.Ball
orb.Size = Vector3.new(0.6,0.6,0.6)
orb.Material = Enum.Material.Neon
orb.Color = Color3.fromRGB(255,0,0)
orb.Anchored = true
orb.CanCollide = false
orb.Name = "p0pOrb"
orb.Parent = workspace
State.Orb = orb
local angle = 0
RunService.RenderStepped:Connect(function(dt)
if not State.Orb then return end
local char = LOCAL_PLAYER.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp then
angle += dt * 2
local radius = 2.5
local offset = Vector3.new(math.cos(angle)*radius, 2, math.sin(angle)*radius)
orb.CFrame = CFrame.new(hrp.Position + offset)
end
end)
-- Notifications
Players.PlayerAdded:Connect(function(p)
notify("Player Joined", p.Name)
end)
Players.PlayerRemoving:Connect(function(p)
notify("Player Left", p.Name)
end)
notify("Orb", "Enabled")
end)
orbBtn.Parent = utilsScroll
-- Settings
local settingsPage, settingsScroll = makePage("Settings")
local particleBox = makeTextbox("Particle Texture ID (number)")
particleBox.Text = Config.DefaultParticleTexture:gsub("rbxassetid://","")
particleBox.Parent = settingsScroll
particleBox.FocusLost:Connect(function(enter)
if enter then
local id = particleBox.Text:match("%d+")
if id then
Config.DefaultParticleTexture = "rbxassetid://"..id
notify("Particles", "Texture set to "..id)
end
end
end)
local skyIdBox = makeTextbox("Skybox ID (number)")
skyIdBox.Text = Config.DefaultSkyboxId:gsub("rbxassetid://","")
skyIdBox.Parent = settingsScroll
skyIdBox.FocusLost:Connect(function(enter)
if enter then
local id = skyIdBox.Text:match("%d+")
if id then
Config.DefaultSkyboxId = "rbxassetid://"..id
notify("Skybox", "ID set to "..id)
end
end
end)
local aboutPage, aboutScroll = makePage("About")
local about = Instance.new("TextLabel")
about.BackgroundTransparency = 1
about.Size = UDim2.new(1,0,0,120)
about.TextWrapped = true
about.TextColor3 = Config.Colors.Text
about.Font = Enum.Font.Gotham
about.TextSize = 14
about.Text = [[
This is a safe, TOS‑friendly admin GUI for your place.
• White text, red borders (3), black boxes
• Pages: Movement, Character, Visuals, Audio, Utilities, Settings
• Mobile + PC compatible, positioned top‑right (drag to move)
Expand by adding your own safe actions in the script tables.
]]
about.Parent = aboutScroll
-- create all page frames in Folder
for _,n in ipairs(pageOrder) do
if not pagesFolder:FindFirstChild(n) then
if n == "Movement" then movementPage.Parent = pagesFolder end
if n == "Character" then charPage.Parent = pagesFolder end
if n == "Visuals" then visualsPage.Parent = pagesFolder end
if n == "Audio" then audioPage.Parent = pagesFolder end
if n == "Utilities" then utilsPage.Parent = pagesFolder end
if n == "Settings" then settingsPage.Parent = pagesFolder end
if n == "About" then aboutPage.Parent = pagesFolder end
end
end
-- Show first page
showPage(1)
-- Optional: minimize button
local minimize = makeButton("—", function()
content.Visible = not content.Visible
root.Size = content.Visible and UDim2.new(0,380,0,420) or UDim2.new(0,220,0,50)
end)
minimize.Size = UDim2.new(0,36,1,0)
minimize.Parent = header
minimize.LayoutOrder = -1



epic
"Safe Admin GUI Template" Bet ChatGPT told you "lets make a safe version of blah blah blah" learn to script skid
@iamsuchafunnylad I was 8 when I made this 🧛
Uuuh... I think Its AI. :/