P0pgui v05
Key RequiredUniversal Patched

P0pgui v05

Universal Scriptp0pulark1ddp0pulark1dd 1.2K views 146 executesUpdated Aug 23, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•540 lines (16089 chars)
.
  📦 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

Features & Information

Includes client scripts: isn't the official version.
#Popularkidd#Team popularkidd#Coolkidd#Clkidd#Team clkidd

Community Comments (4)

notwinnotwinAug 24, 2025

epic

iamsuchafunnyladiamsuchafunnyladAug 24, 2025

"Safe Admin GUI Template" Bet ChatGPT told you "lets make a safe version of blah blah blah" learn to script skid

Replying to @iamsuchafunnylad
p0pulark1ddp0pulark1ddDec 10, 2025

@iamsuchafunnylad I was 8 when I made this 🧛

X4RLl0_8X4RLl0_8Sep 23, 2026

Uuuh... I think Its AI. :/

More Scripts for Universal Scripts