improve spawnpoint error logging (#40021)
This commit is contained in:
@@ -6,11 +6,15 @@ namespace Content.Server.Spawners.Components;
|
|||||||
[RegisterComponent]
|
[RegisterComponent]
|
||||||
public sealed partial class SpawnPointComponent : Component, ISpawnPoint
|
public sealed partial class SpawnPointComponent : Component, ISpawnPoint
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The job this spawn point is valid for.
|
||||||
|
/// Null will allow all jobs to spawn here.
|
||||||
|
/// </summary>
|
||||||
[DataField("job_id")]
|
[DataField("job_id")]
|
||||||
public ProtoId<JobPrototype>? Job;
|
public ProtoId<JobPrototype>? Job;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The type of spawn point
|
/// The type of spawn point.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("spawn_type"), ViewVariables(VVAccess.ReadWrite)]
|
[DataField("spawn_type"), ViewVariables(VVAccess.ReadWrite)]
|
||||||
public SpawnPointType SpawnType { get; set; } = SpawnPointType.Unset;
|
public SpawnPointType SpawnType { get; set; } = SpawnPointType.Unset;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public sealed class SpawnPointSystem : EntitySystem
|
|||||||
var points = EntityQueryEnumerator<SpawnPointComponent, TransformComponent>();
|
var points = EntityQueryEnumerator<SpawnPointComponent, TransformComponent>();
|
||||||
var possiblePositions = new List<EntityCoordinates>();
|
var possiblePositions = new List<EntityCoordinates>();
|
||||||
|
|
||||||
while ( points.MoveNext(out var uid, out var spawnPoint, out var xform))
|
while (points.MoveNext(out var uid, out var spawnPoint, out var xform))
|
||||||
{
|
{
|
||||||
if (args.Station != null && _stationSystem.GetOwningStation(uid, xform) != args.Station)
|
if (args.Station != null && _stationSystem.GetOwningStation(uid, xform) != args.Station)
|
||||||
continue;
|
continue;
|
||||||
@@ -39,7 +39,7 @@ public sealed class SpawnPointSystem : EntitySystem
|
|||||||
|
|
||||||
if (_gameTicker.RunLevel != GameRunLevel.InRound &&
|
if (_gameTicker.RunLevel != GameRunLevel.InRound &&
|
||||||
spawnPoint.SpawnType == SpawnPointType.Job &&
|
spawnPoint.SpawnType == SpawnPointType.Job &&
|
||||||
(args.Job == null || spawnPoint.Job == args.Job))
|
(args.Job == null || spawnPoint.Job == null || spawnPoint.Job == args.Job))
|
||||||
{
|
{
|
||||||
possiblePositions.Add(xform.Coordinates);
|
possiblePositions.Add(xform.Coordinates);
|
||||||
}
|
}
|
||||||
@@ -51,13 +51,14 @@ public sealed class SpawnPointSystem : EntitySystem
|
|||||||
// TODO: Refactor gameticker spawning code so we don't have to do this!
|
// TODO: Refactor gameticker spawning code so we don't have to do this!
|
||||||
var points2 = EntityQueryEnumerator<SpawnPointComponent, TransformComponent>();
|
var points2 = EntityQueryEnumerator<SpawnPointComponent, TransformComponent>();
|
||||||
|
|
||||||
if (points2.MoveNext(out var spawnPoint, out var xform))
|
if (points2.MoveNext(out _, out var xform))
|
||||||
{
|
{
|
||||||
|
Log.Error($"Unable to pick a valid spawn point, picking random spawner as a backup.\nRunLevel: {_gameTicker.RunLevel} Station: {ToPrettyString(args.Station)} Job: {args.Job}");
|
||||||
possiblePositions.Add(xform.Coordinates);
|
possiblePositions.Add(xform.Coordinates);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.Error("No spawn points were available!");
|
Log.Error($"No spawn points were available!\nRunLevel: {_gameTicker.RunLevel} Station: {ToPrettyString(args.Station)} Job: {args.Job}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
meta:
|
meta:
|
||||||
format: 6
|
format: 7
|
||||||
postmapinit: false
|
category: Map
|
||||||
|
engineVersion: 266.0.0
|
||||||
|
forkId: ""
|
||||||
|
forkVersion: ""
|
||||||
|
time: 08/31/2025 14:22:33
|
||||||
|
entityCount: 4
|
||||||
|
maps:
|
||||||
|
- 3
|
||||||
|
grids:
|
||||||
|
- 2
|
||||||
|
orphans: []
|
||||||
|
nullspace: []
|
||||||
tilemap:
|
tilemap:
|
||||||
0: Space
|
0: Space
|
||||||
89: FloorSteel
|
89: FloorSteel
|
||||||
@@ -16,8 +27,8 @@ entities:
|
|||||||
chunks:
|
chunks:
|
||||||
-1,-1:
|
-1,-1:
|
||||||
ind: -1,-1
|
ind: -1,-1
|
||||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAA
|
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAAA==
|
||||||
version: 6
|
version: 7
|
||||||
- type: Broadphase
|
- type: Broadphase
|
||||||
- type: Physics
|
- type: Physics
|
||||||
bodyStatus: InAir
|
bodyStatus: InAir
|
||||||
@@ -31,6 +42,7 @@ entities:
|
|||||||
id: Empty
|
id: Empty
|
||||||
- type: OccluderTree
|
- type: OccluderTree
|
||||||
- type: Shuttle
|
- type: Shuttle
|
||||||
|
dampingModifier: 0.25
|
||||||
- type: GridPathfinding
|
- type: GridPathfinding
|
||||||
- type: Gravity
|
- type: Gravity
|
||||||
gravityShakeSound: !type:SoundPathSpecifier
|
gravityShakeSound: !type:SoundPathSpecifier
|
||||||
@@ -40,20 +52,29 @@ entities:
|
|||||||
version: 2
|
version: 2
|
||||||
nodes: []
|
nodes: []
|
||||||
- type: SpreaderGrid
|
- type: SpreaderGrid
|
||||||
|
- type: ImplicitRoof
|
||||||
- uid: 3
|
- uid: 3
|
||||||
components:
|
components:
|
||||||
- type: MetaData
|
- type: MetaData
|
||||||
name: map 89
|
name: map 89
|
||||||
- type: Transform
|
- type: Transform
|
||||||
- type: Map
|
- type: Map
|
||||||
|
mapPaused: True
|
||||||
- type: GridTree
|
- type: GridTree
|
||||||
- type: Broadphase
|
- type: Broadphase
|
||||||
- type: OccluderTree
|
- type: OccluderTree
|
||||||
|
- proto: SpawnPointAnyJob
|
||||||
|
entities:
|
||||||
|
- uid: 4
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
pos: -0.5,-0.5
|
||||||
|
parent: 2
|
||||||
- proto: SpawnPointLatejoin
|
- proto: SpawnPointLatejoin
|
||||||
entities:
|
entities:
|
||||||
- uid: 1
|
- uid: 1
|
||||||
components:
|
components:
|
||||||
- type: Transform
|
- type: Transform
|
||||||
anchored: False
|
pos: -0.5,-0.5
|
||||||
parent: 3
|
parent: 2
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -36,6 +36,17 @@
|
|||||||
- type: SpawnPoint
|
- type: SpawnPoint
|
||||||
spawn_type: LateJoin
|
spawn_type: LateJoin
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: any job spawn point
|
||||||
|
id: SpawnPointAnyJob # used for integration tests so we don't need to map every single job spawner on the test map
|
||||||
|
parent: SpawnPointJobBase
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
state: green
|
||||||
|
- type: SpawnPoint
|
||||||
|
spawn_type: Job
|
||||||
|
job_id: null # any job can spawn here
|
||||||
|
|
||||||
# Cargo
|
# Cargo
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
Reference in New Issue
Block a user