diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index 3cacc8013..35bf2fc4c 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -1218,18 +1218,25 @@ namespace Barotrauma.Networking errorLines.Add(""); errorLines.Add("EntitySpawner events:"); - foreach (var entityEvent in entityEventManager.UniqueEvents.ToList()) + try { - if (entityEvent.Entity is EntitySpawner) + foreach (var entityEvent in entityEventManager.UniqueEvents.ToList()) { - var spawnData = entityEvent.Data as EntitySpawner.SpawnOrRemove; - errorLines.Add( - entityEvent.ID + ": " + - (spawnData is EntitySpawner.RemoveEntity ? "Remove " : "Create ") + - spawnData.Entity.ToString() + - " (" + spawnData.ID + ", " + spawnData.Entity.ID + ")"); + if (entityEvent.Entity is EntitySpawner) + { + var spawnData = entityEvent.Data as EntitySpawner.SpawnOrRemove; + errorLines.Add( + entityEvent.ID + ": " + + (spawnData is EntitySpawner.RemoveEntity ? "Remove " : "Create ") + + spawnData.Entity.ToString() + + " (" + spawnData.ID + ", " + spawnData.Entity.ID + ")"); + } } } + finally + { + errorLines.Add("Catch event snapshot failed."); + } errorLines.Add(""); errorLines.Add("Last debug messages:"); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs index 0e3e8ae0a..c30142d51 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs @@ -170,16 +170,22 @@ namespace Barotrauma #if SERVER if (GameMain.Server != null && Entity.Spawner != null) { - if (GameMain.Server.EntityEventManager.UniqueEvents.ToList().Any(ev => ev.Entity == item)) + try { - string errorMsg = $"Error while spawning job items. Item {item.Name} created network events before the spawn event had been created."; - DebugConsole.ThrowError(errorMsg); - GameAnalyticsManager.AddErrorEventOnce("Job.InitializeJobItem:EventsBeforeSpawning", GameAnalyticsManager.ErrorSeverity.Error, errorMsg); - GameMain.Server.EntityEventManager.UniqueEvents.RemoveAll(ev => ev.Entity == item); - GameMain.Server.EntityEventManager.Events.RemoveAll(ev => ev.Entity == item); + if (GameMain.Server.EntityEventManager.UniqueEvents.ToList().Any(ev => ev.Entity == item)) + { + string errorMsg = $"Error while spawning job items. Item {item.Name} created network events before the spawn event had been created."; + DebugConsole.ThrowError(errorMsg); + GameAnalyticsManager.AddErrorEventOnce("Job.InitializeJobItem:EventsBeforeSpawning", GameAnalyticsManager.ErrorSeverity.Error, errorMsg); + GameMain.Server.EntityEventManager.UniqueEvents.RemoveAll(ev => ev.Entity == item); + GameMain.Server.EntityEventManager.Events.RemoveAll(ev => ev.Entity == item); + } } - - Entity.Spawner.CreateNetworkEvent(new EntitySpawner.SpawnEntity(item)); + finally + { + Entity.Spawner.CreateNetworkEvent(new EntitySpawner.SpawnEntity(item)); + } + } #endif