From 930fb331dbfa5bb011048feb4d40b90d89339434 Mon Sep 17 00:00:00 2001 From: moneyl <8206401+Moneyl@users.noreply.github.com> Date: Tue, 21 Jan 2020 12:13:57 -0500 Subject: [PATCH] Fix crash / debug assertion failure from explosions (#535) When explosions are spawned they grab all entities in range and interact with them. They don't check if entities are deleted before doing so which can cause a crash. To reproduce, place several grenades on the ground, pick one up and detonate it on top of the others so they detonate as well. The debug assertion in ContainerHelpers.IsInContainer will fail due to one of the accessed entities having been deleted. This fixes that by ignoring deleted entities when making explosions. --- Content.Server/Explosions/ExplosionHelper.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Server/Explosions/ExplosionHelper.cs b/Content.Server/Explosions/ExplosionHelper.cs index 6c68c3d94a..7ca0b329d2 100644 --- a/Content.Server/Explosions/ExplosionHelper.cs +++ b/Content.Server/Explosions/ExplosionHelper.cs @@ -34,10 +34,11 @@ namespace Content.Server.Explosions foreach (var entity in entitiesAll) { - //if (entity == Owner) - // continue; + if (entity.Deleted) + continue; if (!entity.Transform.IsMapTransform) continue; + var distanceFromEntity = (int)entity.Transform.GridPosition.Distance(mapManager, coords); var exAct = entitySystemManager.GetEntitySystem(); var severity = ExplosionSeverity.Destruction;