-- script create BY ghost local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Camera = workspace.CurrentCamera local lp = Players.LocalPlayer local targetText = "" local baseZ = -5 local offsetY = -1.5 local swingRange = 1.5 local swingSpeed = 2 local followEnabled = false local swingEnabled = false local viewEnabled = false local crouchEnabled = false local swingTime = 0 local ap, ao, att local lastPos local lastCamSubject local sleepTrack local function getHRP(plr) return plr and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") end local function getHumanoid(plr) return plr and plr.Character and plr.Character:FindFirstChildOfClass("Humanoid") end local function findPlayerByText(txt) txt = txt:lower() for _, p in pairs(Players:GetPlayers()) do if p.Name:lower():find(txt) or p.DisplayName:lower():find(txt) then return p end end end local function clearAlign() if ap then ap:Destroy() ap = nil end if ao then ao:Destroy() ao = nil end if att then att:Destroy() att = nil end end local function setupAlign(hrp) att = Instance.new("Attachment", hrp) ap = Instance.new("AlignPosition") ap.Mode = Enum.PositionAlignmentMode.OneAttachment ap.MaxForce = 1e9 ap.Responsiveness = 200 ap.Attachment0 = att ap.Parent = hrp ao = Instance.new("AlignOrientation") ao.Mode = Enum.OrientationAlignmentMode.OneAttachment ao.MaxTorque = 1e9 ao.Responsiveness = 200 ao.Attachment0 = att ao.Parent = hrp end local function playSleep() local hum = getHumanoid(lp) if not hum then return end pcall(function() hum:PlayEmote("Sleep") end) end local function stopEmotes() local hum = getHumanoid(lp) if not hum then return end for _, t in pairs(hum:GetPlayingAnimationTracks()) do t:Stop() end end -- GUI local gui = Instance.new("ScreenGui", lp.PlayerGui) gui.ResetOnSpawn = false local openBtn = Instance.new("TextButton", gui) openBtn.Size = UDim2.new(0, 52, 0, 52) openBtn.Position = UDim2.new(0, 12, 0.5, -26) openBtn.Text = "PP" openBtn.BackgroundColor3 = Color3.fromRGB(20,20,20) openBtn.TextColor3 = Color3.new(1,1,1) openBtn.BorderSizePixel = 0 openBtn.Active = true openBtn.Draggable = true local frame = Instance.new("Frame", gui) frame.Size = UDim2.new(0, 300, 0, 330) frame.Position = UDim2.new(0, 80, 0.5, -165) frame.BackgroundColor3 = Color3.fromRGB(18,18,18) frame.Visible = false frame.Active = true frame.Draggable = true frame.BorderSizePixel = 0 Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 12) local title = Instance.new("TextLabel", frame) title.Size = UDim2.new(1, -20, 0, 40) title.Position = UDim2.new(0, 10, 0, 8) title.Text = "PP CONTROL" title.TextColor3 = Color3.new(1,1,1) title.BackgroundTransparency = 1 title.TextSize = 18 title.Font = Enum.Font.GothamBold local scroll = Instance.new("ScrollingFrame", frame) scroll.Position = UDim2.new(0, 10, 0, 55) scroll.Size = UDim2.new(1, -20, 1, -65) scroll.CanvasSize = UDim2.new(0,0,0,520) scroll.ScrollBarImageTransparency = 0.3 scroll.BorderSizePixel = 0 scroll.BackgroundTransparency = 1 local layout = Instance.new("UIListLayout", scroll) layout.Padding = UDim.new(0, 10) local function makeBox(ph) local tb = Instance.new("TextBox") tb.Size = UDim2.new(1, 0, 0, 38) tb.PlaceholderText = ph tb.Text = "" tb.BackgroundColor3 = Color3.fromRGB(30,30,30) tb.TextColor3 = Color3.new(1,1,1) tb.BorderSizePixel = 0 Instance.new("UICorner", tb).CornerRadius = UDim.new(0,8) return tb end local function makeToggle(txt) local b = Instance.new("TextButton") b.Size = UDim2.new(1, 0, 0, 38) b.Text = txt .. ": OFF" b.BackgroundColor3 = Color3.fromRGB(35,35,35) b.TextColor3 = Color3.new(1,1,1) b.BorderSizePixel = 0 Instance.new("UICorner", b).CornerRadius = UDim.new(0,8) return b end local playerBox = makeBox("Nick / Nome / Display") playerBox.Parent = scroll local distBox = makeBox("Distância PP") distBox.Parent = scroll local speedBox = makeBox("Velocidade Balançar") speedBox.Parent = scroll local followBtn = makeToggle("PP") followBtn.Parent = scroll local swingBtn = makeToggle("Balançar") swingBtn.Parent = scroll local viewBtn = makeToggle("View") viewBtn.Parent = scroll local crouchBtn = makeToggle("Abaixar") crouchBtn.Parent = scroll openBtn.MouseButton1Click:Connect(function() frame.Visible = not frame.Visible end) playerBox.FocusLost:Connect(function() targetText = playerBox.Text end) distBox.FocusLost:Connect(function() local v = tonumber(distBox.Text) if v then baseZ = -math.abs(v) end end) speedBox.FocusLost:Connect(function() local v = tonumber(speedBox.Text) if v then swingSpeed = v end end) followBtn.MouseButton1Click:Connect(function() followEnabled = not followEnabled followBtn.Text = followEnabled and "PP: ON" or "PP: OFF" local hrp = getHRP(lp) if followEnabled and hrp then lastPos = hrp.CFrame setupAlign(hrp) else if hrp and lastPos then hrp.CFrame = lastPos end clearAlign() end end) swingBtn.MouseButton1Click:Connect(function() swingEnabled = not swingEnabled swingBtn.Text = swingEnabled and "Balançar: ON" or "Balançar: OFF" end) viewBtn.MouseButton1Click:Connect(function() viewEnabled = not viewEnabled viewBtn.Text = viewEnabled and "View: ON" or "View: OFF" if viewEnabled then local t = findPlayerByText(targetText) if t and t.Character and t.Character:FindFirstChild("Humanoid") then lastCamSubject = Camera.CameraSubject Camera.CameraSubject = t.Character.Humanoid end else if lastCamSubject then Camera.CameraSubject = lastCamSubject end end end) crouchBtn.MouseButton1Click:Connect(function() crouchEnabled = not crouchEnabled crouchBtn.Text = crouchEnabled and "Abaixar: ON" or "Abaixar: OFF" if crouchEnabled then playSleep() else stopEmotes() end end) RunService.RenderStepped:Connect(function(dt) if not followEnabled then return end local target = findPlayerByText(targetText) local myHRP = getHRP(lp) local tgHRP = getHRP(target) if not myHRP or not tgHRP or not ap or not ao then return end swingTime += dt * swingSpeed local swing = swingEnabled and math.sin(swingTime) * swingRange or 0 local rotX = crouchEnabled and math.rad(-80) or math.rad(-90) local offset = CFrame.new(0, offsetY, baseZ + swing) * CFrame.Angles(rotX, 0, 0) local cf = tgHRP.CFrame * offset ap.Position = cf.Position ao.CFrame = cf end)