-- PLAYER TELEPORTER X + ESP + THRU -- Single LocalScript | Mobile-friendly | Movable UI local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local espEnabled = true local espObjects = {} local gui = Instance.new("ScreenGui") gui.Name = "PlayerTeleporterX" gui.ResetOnSpawn = false gui.DisplayOrder = 100 gui.Parent = playerGui local function round(obj, radius) local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, radius) c.Parent = obj end local function makeDraggable(frame, handle) local dragging = false local dragStart, startPos, activeInput handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position activeInput = input end end) UserInputService.InputChanged:Connect(function(input) if dragging and ( input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch ) then local delta = input.Position - dragStart frame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) UserInputService.InputEnded:Connect(function(input) if input == activeInput then dragging = false activeInput = nil end end) end -- MAIN WINDOW local main = Instance.new("Frame") main.Size = UDim2.new(0, 280, 0, 405) main.Position = UDim2.new(0.5, -140, 0.5, -202) main.BackgroundColor3 = Color3.fromRGB(25, 27, 36) main.BorderSizePixel = 0 main.Active = true main.Parent = gui round(main, 12) local header = Instance.new("Frame") header.Size = UDim2.new(1, 0, 0, 45) header.BackgroundColor3 = Color3.fromRGB(43, 49, 70) header.BorderSizePixel = 0 header.Active = true header.Parent = main round(header, 12) local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -95, 1, 0) title.Position = UDim2.new(0, 12, 0, 0) title.BackgroundTransparency = 1 title.Text = "Teleporter X + ESP" title.TextColor3 = Color3.new(1, 1, 1) title.TextSize = 16 title.Font = Enum.Font.GothamBold title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = header local minimize = Instance.new("TextButton") minimize.Size = UDim2.new(0, 36, 0, 32) minimize.Position = UDim2.new(1, -43, 0, 6) minimize.BackgroundColor3 = Color3.fromRGB(75, 110, 180) minimize.Text = "_" minimize.TextColor3 = Color3.new(1, 1, 1) minimize.TextSize = 22 minimize.Font = Enum.Font.GothamBold minimize.Parent = header round(minimize, 8) -- THRU BUTTON local thru = Instance.new("TextButton") thru.Name = "ThruButton" thru.Size = UDim2.new(1, -20, 0, 36) thru.Position = UDim2.new(0, 10, 0, 52) thru.BackgroundColor3 = Color3.fromRGB(30, 145, 105) thru.Text = "thru" thru.TextColor3 = Color3.new(1, 1, 1) thru.TextSize = 16 thru.Font = Enum.Font.GothamBold thru.Parent = main round(thru, 8) thru.Activated:Connect(function() local character = player.Character local root = character and character:FindFirstChild("HumanoidRootPart") if root then -- Move 5 studs forward, based on facing direction. root.CFrame = root.CFrame + root.CFrame.LookVector * 5 end end) -- ESP TOGGLE local espButton = Instance.new("TextButton") espButton.Size = UDim2.new(1, -20, 0, 36) espButton.Position = UDim2.new(0, 10, 0, 94) espButton.BackgroundColor3 = Color3.fromRGB(160, 45, 45) espButton.Text = "ESP: ON" espButton.TextColor3 = Color3.new(1, 1, 1) espButton.TextSize = 15 espButton.Font = Enum.Font.GothamBold espButton.Parent = main round(espButton, 8) -- PLAYER LIST local list = Instance.new("ScrollingFrame") list.Size = UDim2.new(1, -20, 1, -142) list.Position = UDim2.new(0, 10, 0, 136) list.BackgroundColor3 = Color3.fromRGB(35, 38, 49) list.BorderSizePixel = 0 list.ScrollBarThickness = 5 list.AutomaticCanvasSize = Enum.AutomaticSize.Y list.CanvasSize = UDim2.new(0, 0, 0, 0) list.Parent = main round(list, 8) local padding = Instance.new("UIPadding") padding.PaddingTop = UDim.new(0, 7) padding.PaddingBottom = UDim.new(0, 7) padding.PaddingLeft = UDim.new(0, 7) padding.PaddingRight = UDim.new(0, 7) padding.Parent = list local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 6) layout.SortOrder = Enum.SortOrder.Name layout.Parent = list -- MINIMIZED BOX local mini = Instance.new("TextButton") mini.Name = "MinimizedBox" mini.Size = UDim2.new(0, 145, 0, 42) mini.Position = UDim2.new(0, 15, 0.5, 0) mini.AnchorPoint = Vector2.new(0, 0.5) mini.BackgroundColor3 = Color3.fromRGB(43, 49, 70) mini.Text = "Players +" mini.TextColor3 = Color3.new(1, 1, 1) mini.TextSize = 15 mini.Font = Enum.Font.GothamBold mini.Visible = false mini.Active = true mini.Parent = gui round(mini, 10) makeDraggable(main, header) makeDraggable(mini, mini) minimize.Activated:Connect(function() main.Visible = false mini.Visible = true end) mini.Activated:Connect(function() mini.Visible = false main.Visible = true end) -- ESP local function removeESP(target) local objects = espObjects[target] if objects then for _, obj in ipairs(objects) do if obj and obj.Parent then obj:Destroy() end end espObjects[target] = nil end end local function createESP(target) removeESP(target) if target == player or not espEnabled then return end local character = target.Character if not character then return end local root = character:FindFirstChild("HumanoidRootPart") local head = character:FindFirstChild("Head") if not root or not head then return end local objects = {} espObjects[target] = objects local highlight = Instance.new("Highlight") highlight.Adornee = character highlight.FillTransparency = 1 highlight.OutlineColor = Color3.fromRGB(255, 0, 0) highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = gui table.insert(objects, highlight) local box = Instance.new("BoxHandleAdornment") box.Adornee = root box.Size = Vector3.new(4, 6, 2) box.Color3 = Color3.fromRGB(255, 0, 0) box.Transparency = 0.25 box.AlwaysOnTop = true box.ZIndex = 5 box.Parent = gui table.insert(objects, box) local billboard = Instance.new("BillboardGui") billboard.Adornee = head billboard.Size = UDim2.new(0, 200, 0, 32) billboard.StudsOffset = Vector3.new(0, 2.5, 0) billboard.AlwaysOnTop = true billboard.MaxDistance = 100000 billboard.Parent = gui table.insert(objects, billboard) local nameLabel = Instance.new("TextLabel") nameLabel.Size = UDim2.new(1, 0, 1, 0) nameLabel.BackgroundTransparency = 1 nameLabel.Text = target.Name nameLabel.TextColor3 = Color3.fromRGB(255, 40, 40) nameLabel.TextStrokeColor3 = Color3.new(0, 0, 0) nameLabel.TextStrokeTransparency = 0 nameLabel.TextScaled = true nameLabel.Font = Enum.Font.GothamBold nameLabel.Parent = billboard end local function updateESP() for _, target in ipairs(Players:GetPlayers()) do if target ~= player then if espEnabled then createESP(target) else removeESP(target) end end end end espButton.Activated:Connect(function() espEnabled = not espEnabled espButton.Text = espEnabled and "ESP: ON" or "ESP: OFF" espButton.BackgroundColor3 = espEnabled and Color3.fromRGB(160, 45, 45) or Color3.fromRGB(65, 65, 75) updateESP() end) -- TELEPORT TO SELECTED PLAYER local function teleportTo(target) if target == player then return end local character = player.Character local targetCharacter = target.Character if not character or not targetCharacter then return end local root = character:FindFirstChild("HumanoidRootPart") local targetRoot = targetCharacter:FindFirstChild("HumanoidRootPart") if root and targetRoot then root.CFrame = targetRoot.CFrame * CFrame.new(3, 0, 0) end end local function refreshPlayers() for _, child in ipairs(list:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end for _, target in ipairs(Players:GetPlayers()) do if target ~= player then local button = Instance.new("TextButton") button.Name = "Player_" .. target.UserId button.Size = UDim2.new(1, 0, 0, 44) button.BackgroundColor3 = Color3.fromRGB(58, 80, 125) button.Text = target.Name button.TextColor3 = Color3.new(1, 1, 1) button.TextSize = 15 button.Font = Enum.Font.GothamMedium button.Parent = list round(button, 8) button.Activated:Connect(function() teleportTo(target) end) end end end local function watchPlayer(target) if target == player then return end target.CharacterAdded:Connect(function() task.wait(0.5) if target.Parent == Players then createESP(target) end end) if target.Character then createESP(target) end end Players.PlayerAdded:Connect(function(target) watchPlayer(target) refreshPlayers() end) Players.PlayerRemoving:Connect(function(target) removeESP(target) refreshPlayers() end) for _, target in ipairs(Players:GetPlayers()) do watchPlayer(target) end refreshPlayers()