local Players = game:GetService("Players") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local rootPart = character:WaitForChild("HumanoidRootPart") local screenGui = Instance.new("ScreenGui") screenGui.Name = "CheckpointGui" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 200, 0, 100) frame.Position = UDim2.new(0.5, -100, 0.5, -50) frame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) frame.BorderSizePixel = 0 frame.Active = true frame.Draggable = true frame.Parent = screenGui local UIS = game:GetService("UserInputService") local dragging, dragInput, dragStart, startPos local function update(input) 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 frame.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 input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UIS.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0.3, 0) title.BackgroundTransparency = 1 title.Text = "Get All Checkpoints" title.TextColor3 = Color3.new(1, 1, 1) title.Font = Enum.Font.SourceSansBold title.TextSize = 18 title.Parent = frame local startButton = Instance.new("TextButton") startButton.Size = UDim2.new(0.8, 0, 0.4, 0) startButton.Position = UDim2.new(0.1, 0, 0.5, 0) startButton.Text = "Start" startButton.BackgroundColor3 = Color3.fromRGB(0, 170, 0) startButton.TextColor3 = Color3.new(1, 1, 1) startButton.Font = Enum.Font.SourceSansBold startButton.TextSize = 20 startButton.Parent = frame local function simulateEPress(part) for _, prompt in ipairs(part:GetDescendants()) do if prompt:IsA("ProximityPrompt") then prompt:InputHoldBegin() task.wait(0.2) prompt:InputHoldEnd() end end end local function teleportToCheckpoints() local checkpointers = {} for _, obj in ipairs(workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Name:lower() == "checkpointer" then table.insert(checkpointers, obj) end end for _, checkpoint in ipairs(checkpointers) do if checkpoint and checkpoint:IsDescendantOf(workspace) then local targetPosition = checkpoint.Position - Vector3.new(0, 10, 0) rootPart.CFrame = CFrame.new(targetPosition) task.wait(0.2) simulateEPress(checkpoint) task.wait(0.5) end end end startButton.MouseButton1Click:Connect(function() screenGui:Destroy() teleportToCheckpoints() end)