Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Pathfinding 'lags' online?

I have this Pathfinding Script inside a character Model (NPC) which, for the time being, loops around the map. It works 100% in general.

However, online it seems to stop for a second before going to the next co-ordinate to the location, and in Studio it proceeds normally. How come?

local curnode = workspace.PathNodes.PathNode1 --Current location variable
local nextnode = workspace.PathNodes.PathNode2 --Next location variable

function getCurrentPos() --Get the current location
	for _,node in pairs(workspace.PathNodes:GetChildren()) do
		if (node.Position - script.Parent.Torso.Position).magnitude < 4 then curnode = node end
	end
end
function getNextPos() -Decide the next one based on your current
	if curnode == workspace.PathNodes.PathNode1 then
		local rnd = math.random(1,2)
		if rnd == 1 then nextnode = workspace.PathNodes.PathNode2 else nextnode = workspace.PathNodes.PathNode15 end --Yes, the nodes are a bit messy
	elseif curnode == workspace.PathNodes.PathNode2 then
		local rnd = math.random(1,2)
		if rnd == 1 then nextnode = workspace.PathNodes.PathNode10 else nextnode = workspace.PathNodes.PathNode11 end
	elseif curnode == workspace.PathNodes.PathNode3 then
		nextnode = workspace.PathNodes.PathNode4
	elseif curnode == workspace.PathNodes.PathNode4 then
		nextnode = workspace.PathNodes.PathNode5
	elseif curnode == workspace.PathNodes.PathNode5 then
		local rnd = math.random(1,2)
		if rnd == 1 then nextnode = workspace.PathNodes.PathNode13 else nextnode = workspace.PathNodes.PathNode6 end
	elseif curnode == workspace.PathNodes.PathNode6 then
		nextnode = workspace.PathNodes.PathNode7
	elseif curnode == workspace.PathNodes.PathNode7 then
		nextnode = workspace.PathNodes.PathNode8
	elseif curnode == workspace.PathNodes.PathNode8 then
		nextnode = workspace.PathNodes.PathNode9
	elseif curnode == workspace.PathNodes.PathNode9 then
		nextnode = workspace.PathNodes.PathNode10
	elseif curnode == workspace.PathNodes.PathNode10 then
		nextnode = workspace.PathNodes.PathNode14
	elseif curnode == workspace.PathNodes.PathNode11 then
		nextnode = workspace.PathNodes.PathNode7
	elseif curnode == workspace.PathNodes.PathNode12 then
		nextnode = workspace.PathNodes.PathNode8
	elseif curnode == workspace.PathNodes.PathNode13 then
		nextnode = workspace.PathNodes.PathNode16
	elseif curnode == workspace.PathNodes.PathNode14 then
		nextnode = workspace.PathNodes.PathNode1
	elseif curnode == workspace.PathNodes.PathNode15 then
		nextnode = workspace.PathNodes.PathNode3
	else nextnode = workspace.PathNodes.PathNode12
	end
end
function moveToPos() --Find the path to the destination and go for it
	for _,point in pairs(game:GetService("PathfindingService"):ComputeRawPathAsync(curnode.Position,nextnode.Position,130):GetPointCoordinates()) do
		script.Parent.Humanoid.WalkToPoint = point
		repeat wait() until (point - script.Parent.Torso.Position).magnitude < 3
	end
end

while game.Players.NumPlayers > 0 do --This loop is here so i can do more stuff later
	getCurrentPos()
	getNextPos()
	moveToPos()
end

--General reminder that this script works.

1 answer

You could store the curnode values in a table and make this script easily half as long.

1 comment

0

Doesn't answer the question. Comment instead - you are previleged to do that [5 rep]

This discussion is preserved as it was. New answers, comments, and votes are closed.