Why isn't :MoveTo working?

Why isn’t my script working?

local larm = script.Parent:FindFirstChild("HumanoidRootPart")
local rarm = script.Parent:FindFirstChild("HumanoidRootPart")

function findNearestTorso(pos)
	local list = game.Workspace:children()
	local torso = nil
	local dist = 10000
	local temp = nil
	local human = nil
	local temp2 = nil
	for x = 1, #list do
		temp2 = list[x]
		if (temp2.className == "Model") and (temp2 ~= script.Parent) then
			temp = temp2:findFirstChild("HumanoidRootPart")
			human = temp2:findFirstChild("Humanoid")
			if (temp ~= nil) and (human ~= nil) and (human.Health > 0) then
				if (temp.Position - pos).magnitude < dist then
					torso = temp
					dist = (temp.Position - pos).magnitude
				end
			end
		end
	end
	return torso
end




while true do
	wait(math.random(1,5))
	local target = findNearestTorso(script.Parent.HumanoidRootPart.Position)
	
	if target ~= nil then
		local path = game:GetService("PathfindingService"):CreatePath()
		path:ComputeAsync(script.Parent.Torso.Position, target.Position)
		local waypoints = path:GetWaypoints()

		if path.Status == Enum.PathStatus.Success then
			for _, waypoint in pairs(waypoints) do
				if waypoint.Action == Enum.PathWaypointAction.Jump then
					script.Parent.Humanoid.Jump = true
				end
				script.Parent.Humanoid:MoveTo(waypoint.Position, waypoint)
				script.Parent.Humanoid.MoveToFinished:Wait(2)
			end
		else
			print("Path unsuccessful")
			wait(2)
		end
	end
end

I get this error:
image

Line 44 is:

script.Parent.Humanoid:MoveTo(waypoint.Position, waypoint)

i’m pretty sure you only put the target position on :MoveTo()

Try to remove the last waypoint of the line

image

What do you mean?

||||||||||||||||||||

well i always use it without the second thing and it works, so…
you can always try it out, it won’t cost more than a minute or two

I mean the last waypoint (waypoint.Position, WAYPOINT)

And I THINK you forgot to check if the target isnt the npc

It does check on findNearestTorso

Oh nevermind, I see it only now

Alright, gonna check it out.

|||||||||

:GetWatpoints() returns an ARRAY, which is found on the documentation
Path:GetWaypoints (roblox.com)

This array does not have a .Position value, only objects have it

Hence you are returning nil

I did local waypoints:GetWaypoints() and then for _, waypoint in pairs(waypoints) do

local waypoints = path:GetWaypoints()

		if path.Status == Enum.PathStatus.Success then
			for _, waypoint in pairs(waypoints) do
				if waypoint.Action == Enum.PathWaypointAction.Jump then
					script.Parent.Humanoid.Jump = true
				end
				script.Parent.Humanoid:MoveTo(waypoint.Position, waypoint)
				script.Parent.Humanoid.MoveToFinished:Wait(2)
			end
		else

Oh i noticed that, my apologies

I looked into it further, and :MoveTo() is meant to be used with a model, you’re trying to use it on a Humanoid

image


Huh thats strange, i thought something needed to have a PrimaryPart Value for it to work properly

Humanoid has a function named MoveTo and models also have it but they work differently

Thank you! It worked just as i wanted it to!

1 Like