. 📦 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