Yes, I was able to get it working, Although minor code changes are needed on the simple path module
I have changed InvokeWaypointReached function to this so I can retrieve Last, Current, Next Waypoints.
I believe the original one only sends the Last and Current waypoints, not the next waypoint. I noticed this since I was trying to check if the current waypoint label was == “Door” and it doesn’t return anything, But the next waypoint does. Although I haven’t fully understood if SimplePath does traverse every single waypoint or skips the Current Waypoint if it’s the last waypoint and goes to the target Position instead.
So, doing this way works. Let me know if you found a better solution. So far this works wonders.
Lastly, Listen for path.WaypointReached:Connect(function(lastWaypoint, currentWaypoint, nextWaypoint) and check it’s waypoint Label
eg: nextWaypoint.Label == "Door" then do the rest.
Hope it helps!
Edit:
One thing to note is to use Agent Parameters when using pathfinding links make sure its weight is 0.001 on Agent Parmaters if its the highest priority to traverse. Never go 0. As you can see my Link is DoorwayEnter.
When you Enable Show Navigation Mesh in Studio Settings to see the waypoints you will notice the waypoints will stop from the Start of the Pathfinding Link and the last waypoint will be the end of the Pathfinding Link and won’t continue to generate waypoints to the target. I haven’t figured this out yet. But believe this is caused by the module. Work around is just call Path:Run() again when every single waypointReached event.
Yes, Since you need to listen to Path.WaypointReached event and call path:Run(target) to continue the waypoints, Instead I call a function to open the door and make the NPC move forward a bit when Waypoint Label is “Door” and do animation, After the animation I call Path:Run(target) again to continue
Use this to check repeatedly for the nearest player:
local function FindNearestPlayer()
while wait(0.5) do
local found
local last = math.huge
for _,plyr in pairs(game.Players:GetPlayers()) do
local distance = plyr:DistanceFromCharacter(script.Parent.HumanoidRootPart.Position)
if distance < last then
found = plyr
last = distance
end
end
Goal = found.Character.HumanoidRootPart
return Goal
end
end
I’ve since found the solution to the replied issue. For everyone who utilizes this module, please refer to this post, it may save you a headache in the future:
It was issue with my script, the model was supposed to have attributes for speeds, like RunSpeed and WalkSpeed, but I forgot to add them so speed was always 0, I’m just really dumb.
I got inspired by this module, and i used it on my first AI chaser for some testings.
and now ill tryna implement my own pathfinding module using this service, thx for sharing us your creation!
im having a bit of trouble with this.
when using this module on characters that are extremely large (nearly 230 studs tall), the module just doesnt work.
humanoid:moveto() works, but when i try to use path:run() the character just doesnt move.