local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") if PlayerGui:FindFirstChild("PullPlayersGui") then PlayerGui:FindFirstChild("PullPlayersGui"):Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = "PullPlayersGui" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.Parent = PlayerGui -- Main Frame local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 220, 0, 175) frame.Position = UDim2.new(0.5, -110, 0.1, 0) frame.BackgroundColor3 = Color3.fromRGB(20, 20, 20) frame.BorderSizePixel = 0 frame.Active = true frame.Visible = true frame.Parent = screenGui local frameCorner = Instance.new("UICorner") frameCorner.CornerRadius = UDim.new(0, 10) frameCorner.Parent = frame local frameStroke = Instance.new("UIStroke") frameStroke.Color = Color3.fromRGB(80, 80, 80) frameStroke.Thickness = 1 frameStroke.Parent = frame -- Title Bar local titleBar = Instance.new("TextLabel") titleBar.Size = UDim2.new(1, 0, 0, 35) titleBar.Position = UDim2.new(0, 0, 0, 0) titleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35) titleBar.TextColor3 = Color3.fromRGB(255, 255, 255) titleBar.Text = " ⠿ Player Puller" titleBar.Font = Enum.Font.GothamBold titleBar.TextSize = 14 titleBar.TextXAlignment = Enum.TextXAlignment.Left titleBar.BorderSizePixel = 0 titleBar.Parent = frame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 10) titleCorner.Parent = titleBar -- Credit Label local creditLabel = Instance.new("TextLabel") creditLabel.Size = UDim2.new(1, 0, 0, 18) creditLabel.Position = UDim2.new(0, 0, 0, 35) creditLabel.BackgroundColor3 = Color3.fromRGB(25, 25, 25) creditLabel.TextColor3 = Color3.fromRGB(150, 150, 150) creditLabel.Text = "made by zsxan" creditLabel.Font = Enum.Font.Gotham creditLabel.TextSize = 11 creditLabel.BorderSizePixel = 0 creditLabel.Parent = frame -- Minimize Button local minBtn = Instance.new("TextButton") minBtn.Size = UDim2.new(0, 28, 0, 22) minBtn.Position = UDim2.new(1, -68, 0, 6) minBtn.BackgroundColor3 = Color3.fromRGB(200, 150, 0) minBtn.TextColor3 = Color3.fromRGB(255, 255, 255) minBtn.Text = "—" minBtn.Font = Enum.Font.GothamBold minBtn.TextSize = 14 minBtn.BorderSizePixel = 0 minBtn.Parent = frame local minCorner = Instance.new("UICorner") minCorner.CornerRadius = UDim.new(0, 5) minCorner.Parent = minBtn -- Close Button local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 28, 0, 22) closeBtn.Position = UDim2.new(1, -36, 0, 6) closeBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) closeBtn.Text = "✕" closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 14 closeBtn.BorderSizePixel = 0 closeBtn.Parent = frame local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 5) closeCorner.Parent = closeBtn -- Lock Button local lockBtn = Instance.new("TextButton") lockBtn.Size = UDim2.new(0, 28, 0, 22) lockBtn.Position = UDim2.new(1, -100, 0, 6) lockBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) lockBtn.TextColor3 = Color3.fromRGB(255, 255, 255) lockBtn.Text = "🔓" lockBtn.Font = Enum.Font.GothamBold lockBtn.TextSize = 12 lockBtn.BorderSizePixel = 0 lockBtn.Parent = frame local lockCorner = Instance.new("UICorner") lockCorner.CornerRadius = UDim.new(0, 5) lockCorner.Parent = lockBtn -- Pull Button local pullBtn = Instance.new("TextButton") pullBtn.Size = UDim2.new(1, -20, 0, 45) pullBtn.Position = UDim2.new(0, 10, 0, 60) pullBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 255) pullBtn.TextColor3 = Color3.fromRGB(255, 255, 255) pullBtn.Text = "⬇ Bring Players" pullBtn.Font = Enum.Font.GothamBold pullBtn.TextSize = 15 pullBtn.BorderSizePixel = 0 pullBtn.Parent = frame local pullCorner = Instance.new("UICorner") pullCorner.CornerRadius = UDim.new(0, 8) pullCorner.Parent = pullBtn -- Unbring Button local unbringBtn = Instance.new("TextButton") unbringBtn.Size = UDim2.new(1, -20, 0, 45) unbringBtn.Position = UDim2.new(0, 10, 0, 118) unbringBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40) unbringBtn.TextColor3 = Color3.fromRGB(255, 255, 255) unbringBtn.Text = "✖ Unbring Players" unbringBtn.Font = Enum.Font.GothamBold unbringBtn.TextSize = 15 unbringBtn.BorderSizePixel = 0 unbringBtn.Parent = frame local unbringCorner = Instance.new("UICorner") unbringCorner.CornerRadius = UDim.new(0, 8) unbringCorner.Parent = unbringBtn -- Minimized Bar local miniBar = Instance.new("Frame") miniBar.Size = UDim2.new(0, 160, 0, 32) miniBar.Position = frame.Position miniBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35) miniBar.BorderSizePixel = 0 miniBar.Visible = false miniBar.Active = true miniBar.Parent = screenGui local miniBarCorner = Instance.new("UICorner") miniBarCorner.CornerRadius = UDim.new(0, 8) miniBarCorner.Parent = miniBar local miniBarStroke = Instance.new("UIStroke") miniBarStroke.Color = Color3.fromRGB(80, 80, 80) miniBarStroke.Thickness = 1 miniBarStroke.Parent = miniBar local miniLabel = Instance.new("TextLabel") miniLabel.Size = UDim2.new(1, -60, 1, 0) miniLabel.Position = UDim2.new(0, 10, 0, 0) miniLabel.BackgroundTransparency = 1 miniLabel.TextColor3 = Color3.fromRGB(200, 200, 200) miniLabel.Text = "⠿ Player Puller" miniLabel.Font = Enum.Font.GothamBold miniLabel.TextSize = 13 miniLabel.TextXAlignment = Enum.TextXAlignment.Left miniLabel.Parent = miniBar local openBtn = Instance.new("TextButton") openBtn.Size = UDim2.new(0, 28, 0, 22) openBtn.Position = UDim2.new(1, -65, 0.5, -11) openBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 255) openBtn.TextColor3 = Color3.fromRGB(255, 255, 255) openBtn.Text = "▲" openBtn.Font = Enum.Font.GothamBold openBtn.TextSize = 12 openBtn.BorderSizePixel = 0 openBtn.Parent = miniBar local openCorner = Instance.new("UICorner") openCorner.CornerRadius = UDim.new(0, 5) openCorner.Parent = openBtn local miniCloseBtn = Instance.new("TextButton") miniCloseBtn.Size = UDim2.new(0, 28, 0, 22) miniCloseBtn.Position = UDim2.new(1, -33, 0.5, -11) miniCloseBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) miniCloseBtn.TextColor3 = Color3.fromRGB(255, 255, 255) miniCloseBtn.Text = "✕" miniCloseBtn.Font = Enum.Font.GothamBold miniCloseBtn.TextSize = 12 miniCloseBtn.BorderSizePixel = 0 miniCloseBtn.Parent = miniBar local miniCloseCorner = Instance.new("UICorner") miniCloseCorner.CornerRadius = UDim.new(0, 5) miniCloseCorner.Parent = miniCloseBtn -- Reopen Button local reopenBtn = Instance.new("TextButton") reopenBtn.Size = UDim2.new(0, 130, 0, 32) reopenBtn.Position = frame.Position reopenBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 255) reopenBtn.TextColor3 = Color3.fromRGB(255, 255, 255) reopenBtn.Text = "▲ Open Puller" reopenBtn.Font = Enum.Font.GothamBold reopenBtn.TextSize = 13 reopenBtn.BorderSizePixel = 0 reopenBtn.Visible = false reopenBtn.Active = true reopenBtn.Parent = screenGui local reopenCorner = Instance.new("UICorner") reopenCorner.CornerRadius = UDim.new(0, 8) reopenCorner.Parent = reopenBtn local reopenStroke = Instance.new("UIStroke") reopenStroke.Color = Color3.fromRGB(80, 80, 80) reopenStroke.Thickness = 1 reopenStroke.Parent = reopenBtn -- State local isBringing = false local isLocked = false local dragging = false local dragStart = nil local startPos = nil local dragTarget = nil local connections = {} -- Helper: Get root part local function getRootPart(character) return character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso") or character:FindFirstChild("UpperTorso") end -- Helper: Collision toggle local function setCharacterCollision(character, state) for _, part in ipairs(character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = state end end end -- Helper: Seated check local function isOnVehicleOrSeat(character) local humanoid = character:FindFirstChildOfClass("Humanoid") if not humanoid then return false end if humanoid.SeatPart ~= nil then return true end for _, part in ipairs(character:GetChildren()) do if part:IsA("BasePart") then local ok, touching = pcall(function() return part:GetTouchingParts() end) if ok then for _, t in ipairs(touching) do if t:IsA("VehicleSeat") or t:IsA("Seat") then return true end end end end end return false end -- Helper: Unseat local function unseatPlayer(character) local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.Jump = true pcall(function() humanoid.SeatPart = nil end) end end -- Dragging local function setupDrag(handle, target) handle.InputBegan:Connect(function(input) if isLocked then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragTarget = target dragStart = input.Position startPos = target.Position end end) end setupDrag(titleBar, frame) setupDrag(creditLabel, frame) setupDrag(miniLabel, miniBar) UserInputService.InputChanged:Connect(function(input) if dragging and dragTarget and not isLocked then if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart local newPos = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) dragTarget.Position = newPos if dragTarget == frame then miniBar.Position = newPos reopenBtn.Position = newPos elseif dragTarget == miniBar then frame.Position = newPos reopenBtn.Position = newPos end end end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false dragTarget = nil end end) -- Lock lockBtn.MouseButton1Click:Connect(function() isLocked = not isLocked if isLocked then lockBtn.Text = "🔒" lockBtn.BackgroundColor3 = Color3.fromRGB(200, 150, 0) else lockBtn.Text = "🔓" lockBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) end end) -- Minimize minBtn.MouseButton1Click:Connect(function() frame.Visible = false miniBar.Visible = true reopenBtn.Visible = false end) -- Close from main closeBtn.MouseButton1Click:Connect(function() frame.Visible = false miniBar.Visible = false reopenBtn.Visible = true end) -- Open from mini bar openBtn.MouseButton1Click:Connect(function() frame.Visible = true miniBar.Visible = false reopenBtn.Visible = false end) -- Close from mini bar miniCloseBtn.MouseButton1Click:Connect(function() frame.Visible = false miniBar.Visible = false reopenBtn.Visible = true end) -- Reopen reopenBtn.MouseButton1Click:Connect(function() frame.Visible = true miniBar.Visible = false reopenBtn.Visible = false end) -- Bring Logic pullBtn.MouseButton1Click:Connect(function() if isBringing then return end isBringing = true pullBtn.Text = "✔ Bringing..." pullBtn.BackgroundColor3 = Color3.fromRGB(0, 160, 0) for _, c in pairs(connections) do c:Disconnect() end connections = {} local loopConn = RunService.Heartbeat:Connect(function() if not isBringing then return end local myChar = LocalPlayer.Character if not myChar then return end local myRoot = getRootPart(myChar) if not myRoot then return end local myLockedCFrame = myRoot.CFrame local frontPosition = (myLockedCFrame * CFrame.new(0, 0, -3)).Position local targetCFrame = CFrame.new(frontPosition.X, myLockedCFrame.Position.Y, frontPosition.Z) for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then local otherChar = player.Character if otherChar then local otherRoot = getRootPart(otherChar) if otherRoot then if isOnVehicleOrSeat(otherChar) then unseatPlayer(otherChar) end setCharacterCollision(otherChar, false) otherRoot.CFrame = targetCFrame end end end end myRoot.CFrame = myLockedCFrame end) table.insert(connections, loopConn) end) -- Unbring Logic unbringBtn.MouseButton1Click:Connect(function() isBringing = false for _, c in pairs(connections) do c:Disconnect() end connections = {} for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then local otherChar = player.Character if otherChar then setCharacterCollision(otherChar, true) end end end pullBtn.Text = "⬇ Bring Players" pullBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 255) end)