Fix pathfinding exception (#11228)

This commit is contained in:
Leon Friedrich
2022-09-14 19:06:24 +12:00
committed by GitHub
parent e060b2cf41
commit 6b05861068
2 changed files with 12 additions and 10 deletions

View File

@@ -77,6 +77,9 @@ public sealed class PickAccessibleComponentOperator : HTNOperator
// TODO: God the path api sucks PLUS I need some fast way to get this. // TODO: God the path api sucks PLUS I need some fast way to get this.
var job = _path.RequestPath(owner, target.Owner, CancellationToken.None); var job = _path.RequestPath(owner, target.Owner, CancellationToken.None);
if (job == null)
continue;
await job.AsTask; await job.AsTask;
if (job.Result == null || !_entManager.TryGetComponent<TransformComponent>(target.Owner, out var targetXform)) if (job.Result == null || !_entManager.TryGetComponent<TransformComponent>(target.Owner, out var targetXform))

View File

@@ -37,7 +37,7 @@ namespace Content.Server.NPC.Pathfinding
return job; return job;
} }
public Job<Queue<TileRef>> RequestPath(EntityUid source, EntityUid target, CancellationToken cancellationToken) public Job<Queue<TileRef>>? RequestPath(EntityUid source, EntityUid target, CancellationToken cancellationToken)
{ {
var collisionMask = 0; var collisionMask = 0;
@@ -46,18 +46,17 @@ namespace Content.Server.NPC.Pathfinding
collisionMask = body.CollisionMask; collisionMask = body.CollisionMask;
} }
var start = TileRef.Zero; if (!TryComp<TransformComponent>(source, out var xform) ||
var end = TileRef.Zero; !_mapManager.TryGetGrid(xform.GridUid, out var grid) ||
!TryComp<TransformComponent>(target, out var targetXform) ||
if (TryComp<TransformComponent>(source, out var xform) && !_mapManager.TryGetGrid(targetXform.GridUid, out var targetGrid))
_mapManager.TryGetGrid(xform.GridUid, out var grid) &&
TryComp<TransformComponent>(target, out var targetXform) &&
_mapManager.TryGetGrid(targetXform.GridUid, out var targetGrid))
{ {
start = grid.GetTileRef(xform.Coordinates); return null;
end = grid.GetTileRef(targetXform.Coordinates);
} }
var start = grid.GetTileRef(xform.Coordinates);
var end = targetGrid.GetTileRef(targetXform.Coordinates);
var args = new PathfindingArgs(source, _access.FindAccessTags(source), collisionMask, start, end); var args = new PathfindingArgs(source, _access.FindAccessTags(source), collisionMask, start, end);
var startNode = GetNode(start); var startNode = GetNode(start);