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

pathfinding script will not work right? [unanswered]

while true do
	v = game.Workspace.target
	path = game:GetService("PathfindingService"):ComputeSmoothPathAsync(script.Parent.Torso.Position, game.Workspace.target.Position, 500)
	points= path:GetPointCoordinates()
	if path.Status.Name == "Success" then
		game.Workspace.Points:ClearAllChildren()
		for p = 1, #points do
			part = Instance.new("Part")
			part.CanCollide = false
			part.Size = Vector3.new(1,1,1)
			part.Position = points[p]
			part.Anchored = true
			part.BrickColor = BrickColor.Black()
			part.Parent = game.Workspace.Points
			end
			for i=1,10 do
				local part,point=workspace:FindPartOnRay(Ray.new(points[math.min(#points,i)],Vector3.new(0,-10,0)))
				local part,point2=workspace:FindPartOnRay(Ray.new(points[math.min(#points,i+1)],Vector3.new(0,-10,0)))
				local count=0
				while math.min((point2-v.Position).magnitude,(point*Vector3.new(1,0,1)-v.Position*Vector3.new(1,0,1)).magnitude)>3 and count<50 do
					count=count+1
					script.Parent:FindFirstChild("Humanoid"):MoveTo(point2)
					if workspace:FindPartOnRay(Ray.new(v.Position,CFrame.new(v.Position*Vector3.new(1,0,1),point2*Vector3.new(1,0,1)).lookVector*4))then
						script.Parent:FindFirstChild("Humanoid"):MoveTo(point)
				end
			end
		end
	end
	wait(0.1)
end

i want to make a pathfinding NPC that goes to its target in workspace i tried to make this script above but this script moves the npc but does not make it follow the points. basically it doesnt follow the path the computer computes for it. please help me.

1 answer

✓ Accepted answer

Here is something I was working on, it's not smooth but maybe you can learn from it.

Script in the Mob

local AI = require(game.ServerScriptService.MobAI)
local Mob = game.Workspace.Mob
local Config = Mob.Configuration

while wait(0.1) do
	for i, v in pairs (game.Players:GetPlayers()) do
		if (v.Character.Torso.Position - Mob.Torso.Position).magnitude >= 10 then
			AI.CreatePath(Mob.Torso.Position, v.Character.Torso.Position, Mob, 0.2, 200)
		end
	end
end

ModuleScript in the ServerScriptService

local MobAI = {}

local pathfinding = game:GetService("PathfindingService")

function MobAI.CreatePath(start, finish, mob, speed, distance) --// Start Point : End Point : Mob : Speed of Mob : Mob Range
	game.Workspace.Points:ClearAllChildren()
	local path = pathfinding:ComputeSmoothPathAsync(start, finish, distance) -- Creates the path
	local points = path:GetPointCoordinates() -- Gets the points
	
	if path.Status == Enum.PathStatus.Success then
		for i = 1, #points do -- Loops through the points
			local part = Instance.new("Part", game.Workspace.Points)  -- This whole section is creating visible bricks where the points are located
			part.Size = Vector3.new(0.5,0.5,0.5)
			part.Transparency = 0
			part.BrickColor = BrickColor.new("Institutional white")
			part.CanCollide = false
			part.Anchored = true
			part.Position = points[i]
		end
--[[		local anim = mob.Enemy:LoadAnimation(mob.Enemy.WalkAnim)
		anim:Play()		--]] -- Not neccessary, for more aesthetic reasons.
		for i = 1, #points do -- Loop to make the Mob walk to the points
			mob.Enemy.WalkToPoint = points[i]
			wait(speed)
		end
	-- 	anim:Stop()
	end
end

return MobAI

2 comments

0

Hopefully this helped!!

0

ty

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