Hi guys, I have finished coding my NPC script. I have made it so the NPC is local (inside the CurrentCamera) and have used pathfinding to make the character move around in an random part of an area (outlined by an invisible brick.)

It works when I use it in Play Solo, but when I test it in a server, it refuses to work. Nothing is printed or errors out, even if I add prints to my code. I don't understand why it doesn't work. I even tried my code in a LocalScript with little success.

Here is my script:

math.randomseed(tick())

local paths = game.Lighting.Paths:GetChildren()
local npc = script.Parent
local hum = npc.Humanoid
local torso = npc.Torso
local head = npc.Head
local dialog = head.ChatDialog
local player

function RandomiseLocation(part)
	local function r(a,b)
		return a + (b-a) * math.random()
	end
	local c1 = part.Position + (part.Size/2)
	local c2 = part.Position - (part.Size/2)
	return Vector3.new(r(c1.X,c2.X),r(c1.Y,c2.Y),r(c1.Z,c2.Z))
end

player = npc.Player.Value
while true do
	wait()
	print("Doing eet")
	if dialog.InUse ~= true then
		wait()
		hum.WalkSpeed = 16
		print("Doing eet2")
		local rand = math.random(1,#paths)
		local randLoc = RandomiseLocation(paths[rand])
		print("Doing eet3")
		if (randLoc - torso.Position).magnitude < 10 then repeat wait() randLoc = RandomiseLocation(paths[rand]) until (randLoc - torso.Position).magnitude >= 10 end
		randLoc = Vector3.new(randLoc.X, torso.Position.Y, randLoc.Z)
		print(randLoc.X, randLoc.Y, randLoc.Z)
		local path = game:GetService("PathfindingService"):ComputeRawPathAsync(torso.Position,randLoc,500)
		if path.Status == Enum.PathStatus.Success then
			local points = path:GetPointCoordinates()
			for _,pos in pairs(points) do
				hum:MoveTo(pos)
				repeat wait() until (pos - torso.Position).magnitude <= 3
			end
			hum:MoveTo(randLoc)
			local speed = hum.Running:wait()
			if speed ~= 0 then repeat if dialog.InUse ~= true then speed = hum.Running:wait() end until speed == 0 end
			wait(.25)
		end
	else
		wait()
		hum.WalkSpeed = 0
		torso.CFrame = CFrame.new(torso.Position, Vector3.new(player.Character.Torso.Position.X,torso.Position.Y,player.Character.Torso.Position.Z))
	end
end

Any help is appreciated, thanks!