Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I use Pathfinding?

Asked by 10 years ago

How would I make it work with an npc?

2 answers

Log in to vote
1
Answered by 10 years ago

Create a script inside of ServerScriptService and put this code into it:

local pathfindingService = game:GetService("PathfindingService")
local pointModel = Instance.new("Model")
pointModel.Name = "Points"
pointModel.Parent = game.Workspace

-- Setup remote function
local remoteFunction = Instance.new("RemoteFunction")
remoteFunction.Parent = game.ReplicatedStorage

function visualizePath(path)
    -- clear old path visualization
    for _, point in pairs(pointModel:GetChildren()) do
        point:Destroy()
    end

    -- calculate new visualization  
    local points = path:GetPointCoordinates()
    for _, point in pairs(points) do
        local part = Instance.new("Part")
        part.Parent = pointModel
        part.FormFactor = Enum.FormFactor.Custom
        part.Size = Vector3.new(1,1,1)
        part.Position = point
        part.Anchored = true
        part.CanCollide = false
    end
end

game.ReplicatedStorage.RemoteFunction.OnServerInvoke = function(player, target)
    local start = player.Character.Torso.Position
    local path = pathfindingService:ComputeRawPathAsync(start, target, 500)

    visualizePath(path)
    -- Check to see if the path was computed correctly
    if path.Status == Enum.PathStatus.FailStartNotEmpty or path.Status == Enum.PathStatus.FailFinishNotEmpty then
        print("Compute failed")
        return {}
    end

    return path:GetPointCoordinates()       
end

Then make a Local Script and put it into Starter Pack and put this code in it:

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()

local followingPath = false
mouse.Button1Down:connect(function()
    if not followingPath then
        followingPath = true

        -- Ask the server to calculate a path for us
        local points = game.ReplicatedStorage.RemoteFunction:InvokeServer(mouse.Hit.p)

        for _, point in pairs(points) do
            print("moving to: ", point)
            player.Character.Humanoid:MoveTo(point)
            -- Don't try moving to the next point until we are close enough to the current point in the path
            repeat
                distance = (point - player.Character.Torso.Position).magnitude
                wait()
            until distance < 3
        end
        followingPath = false
    end
end)

For more information go too the Roblox Wiki and search up PathFinding.

Ad
Log in to vote
0
Answered by 10 years ago
0
Read the first one, then go to the second link to see it in action. Wizzi0GoKartBOT 0 — 10y
0
Thanks. robloxer8282 25 — 10y

Answer this question