[DataField("container")] public string Container { get; private set; } = string.Empty;
// TODO use or generalize ConstructionSystem.ChangeEntity();
+ // TODO pass in node/edge & graph ID for better error logs.
public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager)
{
if (!entityManager.TryGetComponent(uid, out ContainerManagerComponent? containerManager))
{
- Logger.Warning($"Computer entity {uid} did not have a container manager! Aborting build computer action.");
+ Logger.Error($"Computer entity {entityManager.ToPrettyString(uid)} did not have a container manager! Aborting build computer action.");
return;
}
if (!containerSystem.TryGetContainer(uid, Container, out var container, containerManager))
{
- Logger.Warning($"Computer entity {uid} did not have the specified '{Container}' container! Aborting build computer action.");
+ Logger.Error($"Computer entity {entityManager.ToPrettyString(uid)} did not have the specified '{Container}' container! Aborting build computer action.");
return;
}
if (container.ContainedEntities.Count != 1)
{
- Logger.Warning($"Computer entity {uid} did not have exactly one item in the specified '{Container}' container! Aborting build computer action.");
+ Logger.Error($"Computer entity {entityManager.ToPrettyString(uid)} did not have exactly one item in the specified '{Container}' container! Aborting build computer action.");
+ return;
}
var board = container.ContainedEntities[0];
if (!entityManager.TryGetComponent(board, out ComputerBoardComponent? boardComponent))
{
- Logger.Warning($"Computer entity {uid} had an invalid entity in container \"{Container}\"! Aborting build computer action.");
+ Logger.Error($"Computer entity {entityManager.ToPrettyString(uid)} had an invalid entity in container \"{Container}\"! Aborting build computer action.");
return;
}
if (step == null)
{
- _sawmill.Warning($"Called {nameof(HandleEdge)} on entity {uid} but the current state is not valid for that!");
+ _sawmill.Warning($"Called {nameof(HandleEdge)} on entity {ToPrettyString(uid)} but the current state is not valid for that!");
return HandleResult.False;
}
{
// Edge finished!
PerformActions(uid, user, edge.Completed);
+
+ if (construction.Deleted)
+ return HandleResult.True;
+
construction.TargetEdgeIndex = null;
construction.EdgeIndex = null;
construction.StepIndex = 0;
{
#endif
- // temporary code for debugging a grafana exception. Something is fishy with the girder graph.
- object? prev = null;
- var queued = string.Join(", ", construction.InteractionQueue.Select(x => x.GetType().Name));
-
// Handle all queued interactions!
while (construction.InteractionQueue.TryDequeue(out var interaction))
{
if (construction.Deleted)
{
- // I suspect the error might just happen if two users try to deconstruction or otherwise modify an entity at the exact same tick?
- // In which case this isn't really an error, but should just be a `if (deleted) -> break`
- // But might as well verify this.
-
_sawmill.Error($"Construction component was deleted while still processing interactions." +
$"Entity {ToPrettyString(uid)}, graph: {construction.Graph}, " +
- $"Previous: {prev?.GetType()?.Name ?? "null"}, " +
$"Next: {interaction.GetType().Name}, " +
- $"Initial Queue: {queued}, " +
$"Remaining Queue: {string.Join(", ", construction.InteractionQueue.Select(x => x.GetType().Name))}");
break;
}
- prev = interaction;
// We set validation to false because we actually want to perform the interaction here.
HandleEvent(uid, interaction, false, construction);