local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") -- CLEANUP OLD GUIS local oldGui = playerGui:FindFirstChild("PPSAutoMini") while oldGui do oldGui:Destroy() oldGui = playerGui:FindFirstChild("PPSAutoMini") end -- GUI SETUP local gui = Instance.new("ScreenGui") gui.Name = "PPSAutoMini" gui.ResetOnSpawn = false -- MAIN FRAME local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 180, 0, 100) frame.Position = UDim2.new(0.5, -90, 0.5, -50) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) frame.Active = true frame.Visible = false frame.Parent = gui local frameCorner = Instance.new("UICorner", frame) frameCorner.CornerRadius = UDim.new(0, 8) -- MODE SELECTION FRAME local modeFrame = Instance.new("Frame") modeFrame.Size = UDim2.new(0, 220, 0, 150) modeFrame.Position = UDim2.new(0.5, -110, 0.5, -75) modeFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) modeFrame.Active = true modeFrame.Parent = gui local modeCorner = Instance.new("UICorner", modeFrame) modeCorner.CornerRadius = UDim.new(0, 8) local modeTitle = Instance.new("TextLabel") modeTitle.Size = UDim2.new(1, 0, 0, 35) modeTitle.BackgroundTransparency = 1 modeTitle.Text = "Select Mode" modeTitle.TextColor3 = Color3.new(1, 1, 1) modeTitle.TextScaled = true modeTitle.Font = Enum.Font.SourceSansBold modeTitle.Parent = modeFrame -- MODE 1 BUTTON local mode1Btn = Instance.new("TextButton") mode1Btn.Size = UDim2.new(1, -20, 0, 40) mode1Btn.Position = UDim2.new(0, 10, 0, 45) mode1Btn.Text = "Mode 1 (Normal)" mode1Btn.BackgroundColor3 = Color3.fromRGB(40, 40, 40) mode1Btn.TextColor3 = Color3.new(1, 1, 1) mode1Btn.TextScaled = true mode1Btn.Parent = modeFrame Instance.new("UICorner", mode1Btn).CornerRadius = UDim.new(0, 6) -- MODE 2 BUTTON local mode2Btn = Instance.new("TextButton") mode2Btn.Size = UDim2.new(1, -20, 0, 40) mode2Btn.Position = UDim2.new(0, 10, 0, 95) mode2Btn.Text = "Mode 2 (Teleport)" mode2Btn.BackgroundColor3 = Color3.fromRGB(40, 40, 40) mode2Btn.TextColor3 = Color3.new(1, 1, 1) mode2Btn.TextScaled = true mode2Btn.Parent = modeFrame Instance.new("UICorner", mode2Btn).CornerRadius = UDim.new(0, 6) -- TITLE local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 25) title.BackgroundTransparency = 1 title.Text = "PPS Controller" title.TextColor3 = Color3.new(1, 1, 1) title.TextScaled = true title.Font = Enum.Font.SourceSansBold title.Parent = frame -- TOGGLE BUTTON local toggle = Instance.new("TextButton") toggle.Size = UDim2.new(1, -10, 0, 35) toggle.Position = UDim2.new(0, 5, 0, 35) toggle.Text = "OFF" toggle.BackgroundColor3 = Color3.fromRGB(40, 40, 40) toggle.TextColor3 = Color3.new(1, 1, 1) toggle.TextScaled = true toggle.Parent = frame Instance.new("UICorner", toggle).CornerRadius = UDim.new(0, 6) -- MINIMIZE BUTTON local minimize = Instance.new("TextButton") minimize.Size = UDim2.new(0, 25, 0, 25) minimize.Position = UDim2.new(1, -30, 0, 0) minimize.Text = "-" minimize.BackgroundColor3 = Color3.fromRGB(60, 60, 60) minimize.TextColor3 = Color3.new(1, 1, 1) minimize.Parent = frame -- HIDE BUTTON local hide = Instance.new("TextButton") hide.Size = UDim2.new(0, 25, 0, 25) hide.Position = UDim2.new(1, -60, 0, 0) hide.Text = "O" hide.BackgroundColor3 = Color3.fromRGB(60, 60, 60) hide.TextColor3 = Color3.new(1, 1, 1) hide.Parent = frame -- CIRCLE BUTTON local circle = Instance.new("TextButton") circle.Size = UDim2.new(0, 50, 0, 50) circle.Position = UDim2.new(1, -60, 0.5, -25) circle.BackgroundColor3 = Color3.fromRGB(25, 25, 25) circle.Text = "PPS" circle.TextColor3 = Color3.new(1, 1, 1) circle.Visible = false circle.Active = true circle.Parent = gui local circleCorner = Instance.new("UICorner", circle) circleCorner.CornerRadius = UDim.new(1, 0) gui.Parent = playerGui -- DRAGGABLE SYSTEM local function makeDraggable(obj) local UserInputService = game:GetService("UserInputService") local dragging, dragInput, dragStart, startPos obj.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = obj.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) obj.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart obj.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end makeDraggable(frame) makeDraggable(modeFrame) makeDraggable(circle) -- CONFIG AND STATES local enabled = false local minimized = false local selectedMode = 1 -- MODE BUTTON LOGIC mode1Btn.MouseButton1Click:Connect(function() selectedMode = 1 title.Text = "PPS (Normal)" modeFrame.Visible = false frame.Visible = true end) mode2Btn.MouseButton1Click:Connect(function() selectedMode = 2 title.Text = "PPS (Teleport)" modeFrame.Visible = false frame.Visible = true end) -- CONTROLS LOGIC toggle.MouseButton1Click:Connect(function() enabled = not enabled toggle.Text = enabled and "ON" or "OFF" toggle.BackgroundColor3 = enabled and Color3.fromRGB(46, 117, 89) or Color3.fromRGB(40, 40, 40) end) minimize.MouseButton1Click:Connect(function() minimized = not minimized frame.Size = minimized and UDim2.new(0, 180, 0, 30) or UDim2.new(0, 180, 0, 100) toggle.Visible = not minimized end) hide.MouseButton1Click:Connect(function() frame.Visible = false circle.Visible = true end) circle.MouseButton1Click:Connect(function() frame.Visible = true circle.Visible = false end) -- ========================================== -- PROMPT SYSTEM -- ========================================== local prompts = {} local function isTargetPrompt(v) if v:IsA("ProximityPrompt") then local text = ((v.ActionText or "") .. " " .. (v.ObjectText or "")):lower() return text:find("close") or text:find("remove") or text:find("revive") end return false end local function addPrompt(v) if isTargetPrompt(v) then prompts[v] = true end end local function scanWorkspace() for _, v in ipairs(Workspace:GetDescendants()) do addPrompt(v) end end scanWorkspace() Workspace.DescendantAdded:Connect(addPrompt) Workspace.DescendantRemoving:Connect(function(v) prompts[v] = nil end) local function getPromptPosition(v) local p = v.Parent if not p then return nil end if p:IsA("Attachment") then return p.WorldPosition elseif p:IsA("BasePart") or p:IsA("Model") then return p:GetPivot().Position end return nil end -- BACKEND LOOP local lastScan = 0 task.spawn(function() while true do task.wait() -- Minimal engine yield if tick() - lastScan > 3 then lastScan = tick() scanWorkspace() end if enabled then local character = player.Character local rootPart = character and character:FindFirstChild("HumanoidRootPart") if rootPart then for v in pairs(prompts) do if v and v.Parent then local pos = getPromptPosition(v) if pos then pcall(function() v.MaxActivationDistance = 9999999 v.RequiresLineOfSight = false if selectedMode == 2 then local currentPos = rootPart.Position local direction = (currentPos - pos).Unit if direction.Magnitude == 0 or tostring(direction) == "NAN" then direction = Vector3.new(1, 0, 0) else direction = Vector3.new(direction.X, 0, direction.Z).Unit end local teleportOffset = pos + (direction * 9) + Vector3.new(0, 2, 0) rootPart.CFrame = CFrame.new(teleportOffset, pos) rootPart.AssemblyLinearVelocity = Vector3.zero end fireproximityprompt(v, 0) end) -- Fixed the syntax error here end else prompts[v] = nil end end end end end end)