From 05df798f1127a0b601087b83fa925f83d04c3744 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Tue, 11 Jan 2022 17:55:27 +1300 Subject: [PATCH] Fix body bags not taking humans (#6125) --- Content.Server/Foldable/FoldableSystem.cs | 8 ++++++-- .../Storage/Components/EntityStorageComponent.cs | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Content.Server/Foldable/FoldableSystem.cs b/Content.Server/Foldable/FoldableSystem.cs index f6c96a191f..37020281f9 100644 --- a/Content.Server/Foldable/FoldableSystem.cs +++ b/Content.Server/Foldable/FoldableSystem.cs @@ -48,9 +48,13 @@ namespace Content.Server.Foldable if (TryComp(uid, out StrapComponent? strap) && strap.BuckledEntities.Any()) return false; - // Also check if this entity is "open" (e.g., body bags) - return !TryComp(uid, out EntityStorageComponent? storage) || !storage.Open; + if (!TryComp(uid, out EntityStorageComponent? storage)) + return true; + if (storage.Open) + return false; + + return !storage.Contents.ContainedEntities.Any(); } /// diff --git a/Content.Server/Storage/Components/EntityStorageComponent.cs b/Content.Server/Storage/Components/EntityStorageComponent.cs index 67d99a880c..cf94a6cb6d 100644 --- a/Content.Server/Storage/Components/EntityStorageComponent.cs +++ b/Content.Server/Storage/Components/EntityStorageComponent.cs @@ -8,6 +8,7 @@ using Content.Server.Ghost.Components; using Content.Server.Tools; using Content.Shared.Acts; using Content.Shared.Body.Components; +using Content.Shared.Foldable; using Content.Shared.Interaction; using Content.Shared.Item; using Content.Shared.Physics; @@ -233,11 +234,13 @@ namespace Content.Server.Storage.Components continue; // conditions are complicated because of pizzabox-related issues, so follow this guide + // 0. Accomplish your goals at all costs. // 1. AddToContents can block anything // 2. maximum item count can block anything // 3. ghosts can NEVER be eaten // 4. items can always be eaten unless a previous law prevents it // 5. if this is NOT AN ITEM, then mobs can always be eaten unless unless a previous law prevents it + // 6. if this is an item, then mobs must only be eaten if some other component prevents pick-up interactions while a mob is inside (e.g. foldable) // Let's not insert admin ghosts, yeah? This is really a a hack and should be replaced by attempt events if (_entMan.HasComponent(entity)) @@ -259,8 +262,16 @@ namespace Content.Server.Storage.Components // Seriously, it is insanely hacky and weird to get someone out of a backpack once they end up in there. // And to be clear, they should NOT be in there. // For the record, what you need to do is empty the backpack onto a PlacableSurface (table, rack) - if (targetIsMob && !storageIsItem) - allowedToEat = true; + if (targetIsMob) + { + if (!storageIsItem) + allowedToEat = true; + else + { + // make an exception if this is a foldable-item that is currently un-folded (e.g., body bags). + allowedToEat = _entMan.TryGetComponent(Owner, out FoldableComponent? foldable) && !foldable.IsFolded; + } + } if (!allowedToEat) continue;