What's new
  • Visit Rebornbuddy
  • Visit Resources
  • Visit API Documentation
  • Visit Downloads
  • Visit Portal
  • Visit Panda Profiles
  • Visit LLamamMagic

NavGraph.GetPathAsync() Not Working in Eureka Zones - How to Get Actual Path Distance?

TheEagle

New Member
Joined
Aug 31, 2025
Messages
18
Reaction score
0
Hi everyone,


I'm working on a custom Eureka navigation helper that decides whether teleporting to an aethernet shard is faster than walking directly. The problem is that I need to calculate actual walking path distance (not straight-line distance) to make accurate decisions.

The Problem​

NavGraph.GetPathAsync() doesn't work in Eureka zones. It returns null/empty because there's no local node data:


[NavGraph] Local nodes for zone id 763 are unknown, and we cannot teleport<br>

What I'm Trying to Do​

I want to calculate the actual walking distance between two points so I can compare:


  • Direct walk: Player → Destination
  • Teleport route: Player → Nearest Shard → (teleport) → Destination Shard → Destination
If the teleport route is significantly shorter, use the aethernet. Otherwise, walk directly.
 
The functions your looking for is inside the NavigationProvider class that can be accessed via the static property Navigation.NavigationProvider



You'll need two function calls,
-> CanFullyNavigateFrom function, you pass in a list of locations you want to navigate from on a given map, and the nav server will generate the path distances to a given end location.
--use this for the player direct distance, and the shard destination distance
-> CanFullyNavigateTo function, you pass in a list of locations you want to navigate to on a given map, and the nav server will generate the path distances from a given start location.
--use this for the player to shard distance calculator

These functions should be called inside an Coroutine.ExternalTask as indicated inside the documentation.

If you are designing a custom botbase, make sure to initialize the provider
Code:
            Navigator.PlayerMover = new SlideMover();
            Navigator.NavigationProvider = new ServiceNavigationProvider();

If you are designing a plugin/quest behavior for orderbot, these are already set for you.


I'll look into adding support for this as I did add occult crescent recently, but i think that zone had different aethernet logic from all the other content zones.
 
Thanks for the info and I just tried that. However it always seems like the nav server cannot generate the path distances for me. I put some detailed logs in there. This is pagos btw
 

Attachments

Code looks like so

/// <summary>
/// Gets the actual walking path distance between two points using the navigation server.
/// Uses CanFullyNavigateTo which queries the nav server directly for path distance.
/// Returns straight-line distance if path cannot be generated.
/// </summary>
private static async Task<float> GetPathDistance(Vector3 start, Vector3 end)
{
try
{
var targets = new List<CanFullyNavigateTarget>
{
new CanFullyNavigateTarget { Id = 1, Position = end }
};
var results = await Coroutine.ExternalTask(
Navigator.NavigationProvider.CanFullyNavigateTo(
targets,
start,
(ushort)WorldManager.ZoneId
)
);
var zoneId = (ushort)WorldManager.ZoneId;
var result = results?.FirstOrDefault();
if (result != null && result.CanNavigate == 1)
{
Log.Information($"[CanFullyNavigateTo] ZoneId={zoneId}, Start={start}, End={end} => PathLength={result.PathLength:F0}, CanNavigate={result.CanNavigate}");
return result.PathLength;
}
var canNav = result?.CanNavigate ?? -1;
var pathLen = result?.PathLength ?? 0;
Log.Information($"[CanFullyNavigateTo] ZoneId={zoneId}, Start={start}, End={end} => PathLength={pathLen:F0}, CanNavigate={canNav} (NO PATH - using straight-line: {start.Distance(end):F0})");
return start.Distance(end); // Fallback to straight-line
}
catch (System.Exception ex)
{
Log.Information($"[CanFullyNavigateTo] ZoneId={(ushort)WorldManager.ZoneId}, Start={start}, End={end} => EXCEPTION: {ex.Message}");
return start.Distance(end); // Fallback on error
}
}
 
Thanks for the info and I just tried that. However it always seems like the nav server cannot generate the path distances for me. I put some detailed logs in there. This is pagos btw
You need to nudge the end point for shards, this cord is directly inside the the shard which has collision.

 
Ah, thanks — that fixed it!


I think it still can’t figure out how to get to Icebloom Cavern, though, since you have to jump off a cliff to get there. It’s also tricky because of the sleeping dragon, so you need to handle walk mode as well. Any ideas on how to deal with that?
 
can you get me cords, i may need to add a offmesh connection
 
736.2297, -629.947, -129.4532

This is only one of the areas that require jumping off the cliff. There are total of 4 I believe...
 
If you can get me start and end cords ill add the jump points
 
Also QQ what is this tooling you are using?
Custom

I assume you mean these ledges?


If you can just Log(Core.Me.Location) using the console at the top and bottom for these ledges and any others you think worthwhile and ill add them to the mesh and the bot will take them as paths.
 
Jump point 1
Location: <534.33575, -586.10516, -68.78349>
- Lots of mobs nearby.
- If you get aggro, fall damage will kill you.
Landing point near dragon
Location: <541.36414, -625.59906, -68.26468>
- Dragon nearby.
- Toggle walk mode before jumping to avoid waking it. Until to the deeper side of the cave.

Jump point 2
Location: <-618.83154, -620.5188, -3.0762475>
- Some mobs nearby.
- If you get aggro, fall damage will kill you.
Landing point
Location: <-630.87476, -655.5463, 7.031849>
- Sleeping dragon around: <-703.3903, -646.9541, 39.00199>
Jump point 3
Location: <-570.39984, -621.0804, -6.3381805>
- Mobs around.
- If you get aggro, fall damage will kill you.
Lower point
Location: <-568.5267, -655.72534, -1.821416>
- Need to wait a while to heal before proceeding deep into the cave.
Jump point 4
Location: <407.46765, -586.0723, -46.468006>
- Lots of mobs nearby.
- If you get aggro, fall damage will kill you.
Landing point with dragon
Location: <408.51877, -625.3868, -39.217182>
- Dragon is right there.
- Toggle walk mode before jumping to avoid waking it.

Tried my best... This map is really hard to bot lol
 
Jump point 1
Location: <534.33575, -586.10516, -68.78349>
- Lots of mobs nearby.
- If you get aggro, fall damage will kill you.
Landing point near dragon
Location: <541.36414, -625.59906, -68.26468>
- Dragon nearby.
- Toggle walk mode before jumping to avoid waking it. Until to the deeper side of the cave.

Jump point 2
Location: <-618.83154, -620.5188, -3.0762475>
- Some mobs nearby.
- If you get aggro, fall damage will kill you.
Landing point
Location: <-630.87476, -655.5463, 7.031849>
- Sleeping dragon around: <-703.3903, -646.9541, 39.00199>
Jump point 3
Location: <-570.39984, -621.0804, -6.3381805>
- Mobs around.
- If you get aggro, fall damage will kill you.
Lower point
Location: <-568.5267, -655.72534, -1.821416>
- Need to wait a while to heal before proceeding deep into the cave.
Jump point 4
Location: <407.46765, -586.0723, -46.468006>
- Lots of mobs nearby.
- If you get aggro, fall damage will kill you.
Landing point with dragon
Location: <408.51877, -625.3868, -39.217182>
- Dragon is right there.
- Toggle walk mode before jumping to avoid waking it.

Tried my best... This map is really hard to bot lol
I've added these jump points to the navigation mesh for the zone. The navigator doesn't currently support annotations like walk mode, but it should be something you can do via a orderbot hook.

As for general mob avoidance you should look at maybe working on enhancing duty mechanic , https://github.com/LlamaMagic/DutyMechanic/blob/master/Dungeons/OccultCrescentSouthHorn.cs

has some logic that i worked on to use the local avoidance to help not walk into the cones and dangers of mobs.
 
Re: The navigator doesn't currently support annotations like walk mode, but it should be something you can do via a orderbot hook.

Mind giving an example?
 
Also, maybe a dumb question, but is there a more efficient way to get a list of all mobs in the entire area—or even just a dictionary of all possible NPC IDs and there names—other than iterating over nearby NPCs?


And is there a way to convert an in-game coordinate into XYZ?
 
Re: The navigator doesn't currently support annotations like walk mode, but it should be something you can do via a orderbot hook.

Mind giving an example?
I added the Eureka zones into Duty Mechanic for you here. I attempted to make a function to have it toggle walking when near the sleeping Frozen Void Dragon and it detects it and attempts to toggle Walk but it doesn't have the desired affect I would have liked to see. I've gotta head out now, but I pushed the code I made so you can fiddle with it.
 
Re: The navigator doesn't currently support annotations like walk mode, but it should be something you can do via a orderbot hook.

Mind giving an example?

I'd look at making an extension to duty manager at this point, it would let you create avoidance logic for the zone as well as adding logic for walking near monsters using Llamammagics setwalk and setrun core.player extension functions.
But as domestic indicated, there seems to be aproblem with their function.

Also, maybe a dumb question, but is there a more efficient way to get a list of all mobs in the entire area—or even just a dictionary of all possible NPC IDs and there names—other than iterating over nearby NPCs?

https://github.com/xivapi/SaintCoinach looking at the bnpcname sheet

In the console
Code:
fLog(GameObjectManager.GameObjects);

And is there a way to convert an in-game coordinate into XYZ?

Copy and paste? I'm not sure what you mean
 
Thanks. I’ve tried a bunch, but I think this is a bit beyond my capabilities. I’ll just wait for you to put something together and I’ll help test it.
 
Back
Top