-- Services local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local CoreGui = game:GetService("CoreGui") local LocalPlayer = Players.LocalPlayer -- Global State local savedCFrame = nil local isMinimized = false local targetSpeed = 16 -- Our default starting speed -- Clean up old GUI if it exists local existing = (gethui and gethui() or CoreGui):FindFirstChild("WaypointHub") if existing then existing:Destroy() end --------------------------------------------------------- -- UI BUILDER --------------------------------------------------------- local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "WaypointHub" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = (gethui and gethui()) or CoreGui or LocalPlayer:WaitForChild("PlayerGui") -- Main Draggable Frame local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 220, 0, 180) MainFrame.Position = UDim2.new(0.5, -110, 0.8, -140) MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Draggable = true MainFrame.ClipsDescendants = true MainFrame.Parent = ScreenGui local MainCorner = Instance.new("UICorner", MainFrame) MainCorner.CornerRadius = UDim.new(0, 6) -- Top Bar local TopBar = Instance.new("Frame") TopBar.Size = UDim2.new(1, 0, 0, 30) TopBar.BackgroundColor3 = Color3.fromRGB(30, 30, 30) TopBar.BorderSizePixel = 0 TopBar.Parent = MainFrame local TopBarCorner = Instance.new("UICorner", TopBar) TopBarCorner.CornerRadius = UDim.new(0, 6) local TopBarFix = Instance.new("Frame") TopBarFix.Size = UDim2.new(1, 0, 0, 5) TopBarFix.Position = UDim2.new(0, 0, 1, -5) TopBarFix.BackgroundColor3 = Color3.fromRGB(30, 30, 30) TopBarFix.BorderSizePixel = 0 TopBarFix.Parent = TopBar local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, -40, 1, 0) Title.Position = UDim2.new(0, 10, 0, 0) Title.Text = "Waypoint Manager" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.Font = Enum.Font.GothamBold Title.TextSize = 13 Title.TextXAlignment = Enum.TextXAlignment.Left Title.BackgroundTransparency = 1 Title.Parent = TopBar -- Minimize Button local MinimizeBtn = Instance.new("TextButton") MinimizeBtn.Size = UDim2.new(0, 30, 0, 30) MinimizeBtn.Position = UDim2.new(1, -30, 0, 0) MinimizeBtn.BackgroundTransparency = 1 MinimizeBtn.Text = "-" MinimizeBtn.TextColor3 = Color3.fromRGB(200, 200, 200) MinimizeBtn.Font = Enum.Font.GothamBlack MinimizeBtn.TextSize = 16 MinimizeBtn.Parent = TopBar -- Container for the buttons local ContentFrame = Instance.new("Frame") ContentFrame.Size = UDim2.new(1, 0, 1, -30) ContentFrame.Position = UDim2.new(0, 0, 0, 30) ContentFrame.BackgroundTransparency = 1 ContentFrame.Parent = MainFrame local UIListLayout = Instance.new("UIListLayout") UIListLayout.Parent = ContentFrame UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.Padding = UDim.new(0, 8) UIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center local Spacer = Instance.new("Frame") Spacer.Size = UDim2.new(1, 0, 0, 2) Spacer.BackgroundTransparency = 1 Spacer.Parent = ContentFrame -- Button Creator Function local function CreateButton(text, color) local Btn = Instance.new("TextButton") Btn.Size = UDim2.new(0.9, 0, 0, 32) Btn.BackgroundColor3 = color Btn.TextColor3 = Color3.fromRGB(255, 255, 255) Btn.Font = Enum.Font.GothamBold Btn.TextSize = 13 Btn.Text = text Btn.Parent = ContentFrame local Corner = Instance.new("UICorner", Btn) Corner.CornerRadius = UDim.new(0, 4) return Btn end local MarkBtn = CreateButton("📍 Mark Location", Color3.fromRGB(45, 100, 200)) local TeleportBtn = CreateButton("⚡ Teleport to Mark", Color3.fromRGB(40, 40, 40)) -- Create TextBox for Custom Speed local SpeedInput = Instance.new("TextBox") SpeedInput.Size = UDim2.new(0.9, 0, 0, 32) SpeedInput.BackgroundColor3 = Color3.fromRGB(40, 40, 40) SpeedInput.TextColor3 = Color3.fromRGB(255, 255, 255) SpeedInput.Font = Enum.Font.GothamBold SpeedInput.TextSize = 13 SpeedInput.Text = "Speed: 16" SpeedInput.PlaceholderText = "Type Speed (1-300)" SpeedInput.ClearTextOnFocus = true SpeedInput.Parent = ContentFrame local SpeedCorner = Instance.new("UICorner", SpeedInput) SpeedCorner.CornerRadius = UDim.new(0, 4) local StatusLabel = Instance.new("TextLabel") StatusLabel.Size = UDim2.new(0.9, 0, 0, 15) StatusLabel.Text = "No location marked yet." StatusLabel.TextColor3 = Color3.fromRGB(150, 150, 150) StatusLabel.Font = Enum.Font.Gotham StatusLabel.TextSize = 11 StatusLabel.BackgroundTransparency = 1 StatusLabel.Parent = ContentFrame --------------------------------------------------------- -- LOGIC & MECHANICS --------------------------------------------------------- -- Minimize Logic MinimizeBtn.MouseButton1Click:Connect(function() isMinimized = not isMinimized local targetSize = isMinimized and UDim2.new(0, 220, 0, 30) or UDim2.new(0, 220, 0, 180) local tween = TweenService:Create(MainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = targetSize}) tween:Play() MinimizeBtn.Text = isMinimized and "+" or "-" end) -- Mark Location Logic MarkBtn.MouseButton1Click:Connect(function() local char = LocalPlayer.Character if char and char:FindFirstChild("HumanoidRootPart") then savedCFrame = char.HumanoidRootPart.CFrame StatusLabel.Text = "Location marked successfully!" StatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100) MarkBtn.Text = "📍 Location Saved" task.wait(1.5) MarkBtn.Text = "📍 Update Mark" StatusLabel.TextColor3 = Color3.fromRGB(150, 150, 150) StatusLabel.Text = "Ready to teleport." end end) -- Teleport Logic TeleportBtn.MouseButton1Click:Connect(function() if savedCFrame then local char = LocalPlayer.Character if char and char:FindFirstChild("HumanoidRootPart") then char:PivotTo(savedCFrame) local originalColor = TeleportBtn.BackgroundColor3 TeleportBtn.BackgroundColor3 = Color3.fromRGB(200, 150, 40) task.wait(0.2) TeleportBtn.BackgroundColor3 = originalColor end else StatusLabel.Text = "Error: Mark a location first!" StatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100) task.wait(2) if not savedCFrame then StatusLabel.Text = "No location marked yet." StatusLabel.TextColor3 = Color3.fromRGB(150, 150, 150) end end end) -- Speed Input Logic (with validation!) SpeedInput.FocusLost:Connect(function() local newSpeed = tonumber(SpeedInput.Text) -- Check if it's a real number AND fits in our safe range if newSpeed ~= nil and newSpeed >= 1 and newSpeed <= 300 then targetSpeed = newSpeed SpeedInput.Text = "Speed: " .. tostring(targetSpeed) SpeedInput.TextColor3 = Color3.fromRGB(100, 255, 100) -- Flash green on success task.wait(0.5) SpeedInput.TextColor3 = Color3.fromRGB(255, 255, 255) else -- Invalid input, revert to the last working speed SpeedInput.Text = "Speed: " .. tostring(targetSpeed) SpeedInput.TextColor3 = Color3.fromRGB(255, 100, 100) -- Flash red on error task.wait(0.5) SpeedInput.TextColor3 = Color3.fromRGB(255, 255, 255) end end) -- Background Loop (Always-On NoClip & Speed Enforcer) RunService.Stepped:Connect(function() local char = LocalPlayer.Character if char then -- Enforce NoClip for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") and part.CanCollide then part.CanCollide = false end end -- Enforce Speed local humanoid = char:FindFirstChild("Humanoid") if humanoid and humanoid.WalkSpeed ~= targetSpeed then humanoid.WalkSpeed = targetSpeed end end end)