From 3956c1d7a02acd670a1243803f8ec778c46b4c58 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Mon, 6 Aug 2018 11:09:06 +0300 Subject: [PATCH] StatusEffects with a duration ignore removed targets and automatically stop if all targets have been removed. Closes #571 --- .../Source/StatusEffects/StatusEffect.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs index 4293ee1b3..16c1079d1 100644 --- a/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs @@ -484,7 +484,14 @@ namespace Barotrauma if (element.Parent.CheckConditionalAlways && !element.Parent.HasRequiredConditions(element.Targets)) { - DurationList.Remove(element); + DurationList.RemoveAt(i); + continue; + } + + element.Targets.RemoveAll(t => t is Entity entity && entity.Removed); + if (element.Targets.Count == 0) + { + DurationList.RemoveAt(i); continue; } @@ -492,9 +499,7 @@ namespace Barotrauma { for (int n = 0; n < element.Parent.propertyNames.Length; n++) { - SerializableProperty property; - - if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(element.Parent.propertyNames[n], out property)) continue; + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(element.Parent.propertyNames[n], out SerializableProperty property)) continue; element.Parent.ApplyToProperty(property, element.Parent.propertyEffects[n], CoroutineManager.UnscaledDeltaTime); }