How to detect if npc moved

What is the best approach for me based on this script to detect if the NPC is in the following state or not?

local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")


function findNearestTorso(pos)
	local list = game.Workspace:children()
	local torso = nil
	local dist = 100
	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(0.1)
	local target = findNearestTorso(script.Parent.HumanoidRootPart.Position)
	if target ~= nil then
		script.Parent.Humanoid:MoveTo(target.Position, target)
		
	end
end

Listen to Humanoid.MoveToFinished()

If this event never occurs / hasn’t occured after :MoveTo() has been called then it means that the NPC never reached / hasn’t yet reached the destination. You can set a variable accordingly (e.g. local reached = false), and set it to true…

local reached = false
script.Parent.Humanoid.MoveToFinished:Connect(function()
    reached = true
end)
1 Like

Thanks, it worked like a cherm.

1 Like