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

is there a way I can make a pathfinding npc avoid other humanoids?

Asked by 5 years ago
local PathfindingService = game:GetService("PathfindingService")
local ship = script.Parent.Parent.Parent
local humanoid = ship.Humanoid
local goal = script.Parent
local path = PathfindingService:CreatePath()
local waypoints
local currentWaypointIndex
 local showpoints = false --if true shows the waypoints.
local waypointcontainer = Instance.new("Model")
local cleanpoints = false







function FollowPath(goal)
    path:ComputeAsync(ship.HumanoidRootPart.Position, goal.Value)
    waypoints = {}

    if path.Status == Enum.PathStatus.Success then
        waypoints = path:GetWaypoints()
        currentWaypointIndex = 1
        humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
    else
        humanoid:MoveTo(ship.HumanoidRootPart.Position)
        cleanpoints = true
    end
end




function onWaypointReached(reached)
    if reached and currentWaypointIndex < #waypoints then
        currentWaypointIndex = currentWaypointIndex + 1
        humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
    elseif reached and waypointcontainer and currentWaypointIndex == #waypoints then
        cleanpoints = true
    end
end


function showwaypoints()
    spawn(function()
    waypointcontainer.Parent = game.Workspace
local waypoints = path:GetWaypoints()
for _, waypoint in pairs(waypoints) do
    local part = Instance.new("Part")
    part.Shape = "Ball"
    part.Material = "Neon"
    part.Size = Vector3.new(0.6, 0.6, 0.6)
    part.Position = waypoint.Position
    part.Anchored = true
    part.CanCollide = false
    part.Parent = waypointcontainer
end
repeat
    wait()
until
cleanpoints == true
if cleanpoints == true then
    waypointcontainer:Destroy()
    cleanpoints = false
    waypointcontainer = Instance.new("Model")
end
end)
end





humanoid.MoveToFinished:Connect(onWaypointReached)



script.Parent.Changed:Connect(function()
    if script.Parent.Value ~= Vector3.new(0,0,0) then
FollowPath(goal)
if showpoints == true then
showwaypoints()
end
end
end)

(I apologize if the script above is long, but I needed to include all the functions so my problem can be better understood)

this is my pathfinding script. and it works fine except for one problem. instead of going around other humanoids it attempts to go through them as if they dont exist. this is a problem because the npc is a ship following a waypoint, and the planets around it have humanoids in them. and while one option is to make them all cancollide false, this is also not possible because if the ship touches the planet it will attempt to land in it. is there a way I can get the npc to treat other humanoids like any other blocking barrier?

0
There's a lot of errors near the end, the "end", "end)"s are lined up, and that can cause problems for your script you should space them out like you have on the top... panichub 29 — 5y

Answer this question