(241123ab2) Some checks to prevent crashing if a limb has an invalid health index

This commit is contained in:
Joonas Rikkonen
2019-04-18 12:04:24 +03:00
parent 04791aa8e6
commit ade4ef48b6
2 changed files with 15 additions and 1 deletions
@@ -1427,6 +1427,8 @@ namespace Barotrauma
{ {
foreach (Limb limb in Character.AnimController.Limbs) foreach (Limb limb in Character.AnimController.Limbs)
{ {
if (limb.HealthIndex < 0 || limb.HealthIndex >= limbHealths.Count) { continue; }
limb.BurnOverlayStrength = 0.0f; limb.BurnOverlayStrength = 0.0f;
limb.DamageOverlayStrength = 0.0f; limb.DamageOverlayStrength = 0.0f;
if (limbHealths[limb.HealthIndex].Afflictions.Count == 0) continue; if (limbHealths[limb.HealthIndex].Afflictions.Count == 0) continue;
@@ -266,6 +266,12 @@ namespace Barotrauma
public Affliction GetAffliction(string afflictionType, Limb limb) 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) foreach (Affliction affliction in limbHealths[limb.HealthIndex].Afflictions)
{ {
if (affliction.Prefab.AfflictionType == afflictionType) return affliction; if (affliction.Prefab.AfflictionType == afflictionType) return affliction;
@@ -467,7 +473,13 @@ namespace Barotrauma
private void AddLimbAffliction(Limb limb, Affliction newAffliction) 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); AddLimbAffliction(limbHealths[limb.HealthIndex], newAffliction);
} }