From ade4ef48b6087a2b6315fbbb5a29b19f61c46e48 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 18 Apr 2019 12:04:24 +0300 Subject: [PATCH] (241123ab2) Some checks to prevent crashing if a limb has an invalid health index --- .../Source/Characters/Health/CharacterHealth.cs | 2 ++ .../Source/Characters/Health/CharacterHealth.cs | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs index 2bcb03cb3..3799e1756 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs @@ -1427,6 +1427,8 @@ namespace Barotrauma { foreach (Limb limb in Character.AnimController.Limbs) { + if (limb.HealthIndex < 0 || limb.HealthIndex >= limbHealths.Count) { continue; } + limb.BurnOverlayStrength = 0.0f; limb.DamageOverlayStrength = 0.0f; if (limbHealths[limb.HealthIndex].Afflictions.Count == 0) continue; diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs index 8a2aa9ca9..4f5769f34 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Health/CharacterHealth.cs @@ -266,6 +266,12 @@ namespace Barotrauma public Affliction GetAffliction(string afflictionType, Limb limb) { + if (limb.HealthIndex < 0 || limb.HealthIndex >= limbHealths.Count) + { + DebugConsole.ThrowError("Limb health index out of bounds. Character\"" + Character.Name + + "\" only has health configured for" + limbHealths.Count + " limbs but the limb " + limb.type + " is targeting index " + limb.HealthIndex); + return null; + } foreach (Affliction affliction in limbHealths[limb.HealthIndex].Afflictions) { if (affliction.Prefab.AfflictionType == afflictionType) return affliction; @@ -467,7 +473,13 @@ namespace Barotrauma private void AddLimbAffliction(Limb limb, Affliction newAffliction) { - if (!newAffliction.Prefab.LimbSpecific) return; + if (!newAffliction.Prefab.LimbSpecific || limb == null) return; + if (limb.HealthIndex < 0 || limb.HealthIndex >= limbHealths.Count) + { + DebugConsole.ThrowError("Limb health index out of bounds. Character\"" + Character.Name + + "\" only has health configured for" + limbHealths.Count + " limbs but the limb " + limb.type + " is targeting index " + limb.HealthIndex); + return; + } AddLimbAffliction(limbHealths[limb.HealthIndex], newAffliction); }