diff --git a/Barotrauma/BarotraumaShared/Source/Map/Explosion.cs b/Barotrauma/BarotraumaShared/Source/Map/Explosion.cs index ae4401112..5c3a6999c 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Explosion.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Explosion.cs @@ -74,6 +74,15 @@ namespace Barotrauma { if (item.CurrentHull != hull || item.FireProof || item.Condition <= 0.0f) continue; + //don't apply OnFire effects if the item is inside a fireproof container + //(or if it's inside a container that's inside a fireproof container, etc) + Item container = item.Container; + while (container != null) + { + if (container.FireProof) return; + container = container.Container; + } + if (Vector2.Distance(item.WorldPosition, worldPosition) > attack.Range * 0.1f) continue; item.ApplyStatusEffects(ActionType.OnFire, 1.0f); diff --git a/Barotrauma/BarotraumaShared/Source/Map/FireSource.cs b/Barotrauma/BarotraumaShared/Source/Map/FireSource.cs index bfa7eb231..4f0a684ce 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/FireSource.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/FireSource.cs @@ -217,7 +217,15 @@ namespace Barotrauma foreach (Item item in Item.ItemList) { if (item.CurrentHull != hull || item.FireProof || item.Condition <= 0.0f) continue; - if (item.ParentInventory != null && item.ParentInventory.Owner is Character) return; + + //don't apply OnFire effects if the item is inside a fireproof container + //(or if it's inside a container that's inside a fireproof container, etc) + Item container = item.Container; + while (container != null) + { + if (container.FireProof) return; + container = container.Container; + } float range = (float)Math.Sqrt(size.X) * 10.0f; if (item.Position.X < position.X - range || item.Position.X > position.X + size.X + range) continue;