This is the first time I've ever worked with pathfinding and npcs but I went in and worked on it until I got results but when running it's clear that it's poor optimised. It does what it needs to do but is there any way I can put less stress on the server?
local pathFindingService = game:GetService("PathfindingService") local humanoid = script.Parent.Humanoid local body = script.Parent:FindFirstChild("HumanoidRootPart") or script.Parent:FindFirstChild("Torso") local path = pathFindingService:CreatePath() function ClothingStore() local path = pathFindingService:CreatePath() -- Enter Shop local cse = game.Workspace.clothingstoreenter local csl = game.Workspace.clothingstoreleave path:ComputeAsync(body.Position, cse.Position) local waypoints = path:GetWaypoints() for k, waypoint in pairs(waypoints) do humanoid:MoveTo(waypoint.Position) if waypoints.Action == Enum.PathWaypointAction.Jump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end humanoid.MoveToFinished:Wait() end body.CFrame = csl.CFrame -- Find Clothing local csp = game.Workspace.points:GetChildren() local cspd = csp[math.random(1, #csp)] path:ComputeAsync(body.Position, cspd.Position) local waypoints = path:GetWaypoints() for k, waypoint in pairs(waypoints) do humanoid:MoveTo(waypoint.Position) if waypoints.Action == Enum.PathWaypointAction.Jump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end humanoid.MoveToFinished:Wait() end -- Purchase Clothing wait(math.random(3, 7)) local csc = game.Workspace.clothingstorecashpoint path:ComputeAsync(body.Position, csc.Position) local waypoints = path:GetWaypoints() for k, waypoint in pairs(waypoints) do humanoid:MoveTo(waypoint.Position) if waypoints.Action == Enum.PathWaypointAction.Jump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end humanoid.MoveToFinished:Wait() end -- Leave wait(math.random(3, 7)) local cse = game.Workspace.clothingstoreenter local csl = game.Workspace.clothingstoreleave path:ComputeAsync(body.Position, csl.Position) local waypoints = path:GetWaypoints() for k, waypoint in pairs(waypoints) do humanoid:MoveTo(waypoint.Position) if waypoints.Action == Enum.PathWaypointAction.Jump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end humanoid.MoveToFinished:Wait() end body.CFrame = cse.CFrame -- Home local sp = game.Workspace.spawnpoint path:ComputeAsync(body.Position, sp.Position) local waypoints = path:GetWaypoints() for k, waypoint in pairs(waypoints) do humanoid:MoveTo(waypoint.Position) if waypoints.Action == Enum.PathWaypointAction.Jump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end humanoid.MoveToFinished:Wait() end script.Parent:remove() end ClothingStore()