local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart") local targetPosition = nil local teleporting = false local function isPositionValid(position) local rayOrigin = position + Vector3.new(0, 5, 0) local rayDirection = Vector3.new(0, -10, 0) local raycastParams = RaycastParams.new() raycastParams.FilterDescendantsInstances = {workspace} raycastParams.FilterType = Enum.RaycastFilterType.Whitelist local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams) return raycastResult and raycastResult.Instance ~= nil end local function moveToMouse() local mouse = LocalPlayer:GetMouse() targetPosition = mouse.Hit.Position if isPositionValid(targetPosition) then HumanoidRootPart.CFrame = CFrame.new(targetPosition) teleporting = true end end local function checkPosition() while teleporting do wait(0.1) if (HumanoidRootPart.Position - targetPosition).magnitude > 2 then if isPositionValid(targetPosition) then HumanoidRootPart.CFrame = CFrame.new(targetPosition) end else teleporting = false end end end UserInputService.InputBegan:Connect(function(input, gameProcessedEvent) if input.KeyCode == Enum.KeyCode.M and not gameProcessedEvent then moveToMouse() checkPosition() end end)