Pathfinding Not Working

My pathfinding system doesnt work like its supposed to

  • It just keeps on looping
  • And it doesnt even let it finish
-- Variables --

local Pathfinding = game:GetService("PathfindingService")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local path = Pathfinding:CreatePath({
	AgentHeight = 6;
	AgentRadius = 3;
	AgentCanJump = false;
	
	Cost = {
		Water = 100;
		DangerZone = math.huge
	}
})

local Character = script.Parent
local humanoid = Character:WaitForChild("Humanoid")

local waypoints
local nextWaypointIndex
local reachedConnection
local blockedConnection


local function followPath(destination)
	
	local success, errormessage = pcall(function()
		path:ComputeAsync(Character.PrimaryPart.Position, destination)
	end)
	
	if success and path.Status == Enum.PathStatus.Success then
		waypoints = path:GetWaypoints()
		
		blockedConnection = path.Blocked:Connect(function(blockedWaypointIndex)
			if blockedWaypointIndex >= nextWaypointIndex then
				blockedConnection:Disconnect()
				followPath(destination)
			end
		end)
		
		if not reachedConnection then
			reachedConnection = humanoid.MoveToFinished:Connect(function(reached)
				if reached and nextWaypointIndex < #waypoints then
					nextWaypointIndex += 1
					humanoid:MoveTo(waypoints[nextWaypointIndex].Position)
				else
					reachedConnection:Disconnect()
					blockedConnection:Disconnect()
				end
			end)
		end
		
		nextWaypointIndex = 2
		humanoid:MoveTo(waypoints[nextWaypointIndex].Position)
	else
		warn("Path not Computed!", errormessage)
	end
	
end

local ran = math.random(1, #game.Workspace.Waypoints.Normal:GetChildren())
followPath(game.Workspace.Waypoints.Normal[ran].Position)

humanoid.MoveToFinished:Connect(function()	
	
	local ran = math.random(1, #game.Workspace.Waypoints.Normal:GetChildren())
		
	followPath(game.Workspace.Waypoints.Normal[ran].Position)

end)
1 Like

You didn’t check if humanoid finished moving to a ‘waypoint of a path’ or ‘waypoint of game.Workspace.Waypoints.Normal’ in the second MoveToFinished connection. So when you reached ‘first waypoint of a path’ to ‘waypoint game.Workspace.Waypoints.Normal[ran].Position’, the first MoveToFinished connection walk you to next waypoint of the path but the second MoveToFinished connection just path find to next random ‘waypoint of game.Workspace.Waypoints.Normal’.