So recently I've made my first attempt at making a little pathfinding ai using roblox's pathfindingservice. It's still a little bit buggy sometimes. And recently I found out that sometimes it first walks to a weird point on the map before actually walking to the destination.

Here's the script, it's quite long.

ServerSided script in ServerScriptService:

--by blacksmiley0

local Rex = game.Workspace:WaitForChild("Rex")
local Humanoid = Rex.Humanoid
local Delay = 1
local ObjectiveReached = false
local y1 = 0
local y2 = 0
local Time = 0
local Time2 = 0
local distance2 = 0
local ShowPath = false --Show Path
local times = 0
local NewDistance = 1 

function WalkTo(Start, Objective)
	local path = game:GetService("PathfindingService"):ComputeRawPathAsync(Start, Objective, 500) --Create a Path
	local points = path:GetPointCoordinates() --Create Table with Coordinates
	
	if Enum.PathStatus.Success then --Check if we could compute a Path	
		if ShowPath then --Create blocks on the points to visualize path, set this to true if you want to see the path the npc will take.
			for p = 1, #points do
				local part = Instance.new("Part")
				part.FormFactor = Enum.FormFactor.Symmetric
				part.CanCollide = false
				part.Size = Vector3.new(1,1,1)
				part.Position = points[p]
				part.Anchored = true
				part.Parent = game.Workspace.Points
			end
		end
		
		for p = 1, #points do
			local path = game:GetService("PathfindingService"):ComputeRawPathAsync(Start, Objective, 500) --Create a Path
			local points = path:GetPointCoordinates() --Create Table with Coordinates
			

			if ShowPath then --Create blocks on the points to visualize path, set this to true if you want to see the path the npc will take.
				for p = 1, #points do
					local part = Instance.new("Part")
					part.FormFactor = Enum.FormFactor.Symmetric
					part.CanCollide = false
					part.Size = Vector3.new(1,1,1)
					part.Position = points[p]
					part.Anchored = true
					part.BrickColor = BrickColor.new(0, 0, 0)
					part.Parent = game.Workspace.Points
				end
			end
			
			
			if points[p] ~= nil then
				if (Rex.Torso.Position - points[p]).Magnitude > 9 then
					local path2 = game:GetService("PathfindingService"):ComputeRawPathAsync(Rex.Torso.Position, points[p], 100) --Create a Path
					local points2 = path2:GetPointCoordinates() --Create Table with Coordinates
							
					for i = 1, #points2 do		
						if ShowPath then --Create blocks on the points to visualize path, set this to true if you want to see the path the npc will take.
							for i = 1, #points2 do
								local part = Instance.new("Part")
								part.FormFactor = Enum.FormFactor.Symmetric
								part.CanCollide = false
								part.Size = Vector3.new(1,1,1)
								part.Position = points2[i]
								part.Anchored = true
								part.BrickColor = BrickColor.new(1, 0, 0)
								part.Parent = game.Workspace.Points2
							end
						end
						if points2[i] ~= nil then
							Humanoid:MoveTo(points2[i]) --Move to the desired position
							if i ~= 1 then --Checking if he needs to jump. Make sure you do not try to index p - 1 when p = 1 because then you get 0
								local y1 = points2[i - 1]			
								local y2 = points2[i]
								
								if y1.Y < y2.Y then --Check if Y coordinate has changed to see if we need to jump
									wait(0.3)
									Rex.Humanoid.Jump = true
								end 
							end
	
							repeat
								wait()
								NewDistance = (Rex.Torso.Position - points2[i]).Magnitude
							until NewDistance < 4
						end
					end
				end
				
				Humanoid:MoveTo(points[p]) --Move to the desired position
				if p ~= 1 then --Checking if he needs to jump. Make sure you do not try to index p - 1 when p = 1 because then you get 0
					local y1 = points[p - 1]			
					local y2 = points[p]
					
					if y1.Y < y2.Y then --Check if Y coordinate has changed to see if we need to jump
						wait(0.3)
						Rex.Humanoid.Jump = true
					end 
				end
			
				repeat
					wait()
					local distance = (game.Workspace.Rex.Torso.Position - points[p]).Magnitude
					if p ~= #points then
						distance2 = (game.Workspace.Rex.Torso.Position - points[p + 1]).Magnitude
					else
						distance2 = 7
					end
					
					Time = Time + 1
					if Time >= 25  then --If Rex takes to much time to get to the next position, he will jump.
						Rex.Humanoid.Jump = true
					end
					
					
				until distance < 4 or distance2 < 4 --Check if we are close enough to the point
			end
			Time = 0
		end
	end
end

script.Activate.Changed:connect(function(Value) --This is so we can activate the pathfinding from another script by simply changing the values inside the script. 
	if Value then
		script.Activate.Value = false
		WalkTo(script.Start.Value, script.Finish.Value)
		Rex.Torso.Anchored = true
		script.Finished.Value = true
	end
end)

if you see anything that I should change, please tell me.