From 90e6cf063de43b9810832848009f63e920666a27 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Tue, 24 May 2022 22:31:15 -0400 Subject: [PATCH] Prevent dead mobs from healing in beds (#8419) Co-authored-by: metalgearsloth --- Content.Server/Bed/BedSystem.cs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Content.Server/Bed/BedSystem.cs b/Content.Server/Bed/BedSystem.cs index 45696d4985..6936fcfdbe 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Body.Components; using Content.Shared.Bed; using Content.Server.Power.Components; using Content.Shared.Emag.Systems; +using Content.Shared.MobState.Components; namespace Content.Server.Bed { @@ -39,21 +40,24 @@ namespace Content.Server.Bed { base.Update(frameTime); - foreach (var healingComp in EntityQuery(true)) + foreach (var (_, bedComponent, strapComponent) in EntityQuery()) { - var bed = healingComp.Owner; - var bedComponent = EntityManager.GetComponent(bed); - var strapComponent = EntityManager.GetComponent(bed); - bedComponent.Accumulator += frameTime; if (bedComponent.Accumulator < bedComponent.HealTime) - { continue; - } + bedComponent.Accumulator -= bedComponent.HealTime; - foreach (EntityUid healedEntity in strapComponent.BuckledEntities) + + if (strapComponent.BuckledEntities.Count == 0) continue; + + var mobStateQuery = GetEntityQuery(); + + foreach (var healedEntity in strapComponent.BuckledEntities) { + if (mobStateQuery.TryGetComponent(healedEntity, out var state) && state.IsDead()) + continue; + _damageableSystem.TryChangeDamage(healedEntity, bedComponent.Damage, true); } } @@ -90,8 +94,8 @@ namespace Content.Server.Bed private void OnEmagged(EntityUid uid, StasisBedComponent component, GotEmaggedEvent args) { - ///Repeatable - ///Reset any metabolisms first so they receive the multiplier correctly + // Repeatable + // Reset any metabolisms first so they receive the multiplier correctly UpdateMetabolisms(uid, component, false); component.Multiplier = 1 / component.Multiplier; UpdateMetabolisms(uid, component, true);