Build 0.20.15.0

This commit is contained in:
Markus Isberg
2022-12-14 13:44:15 +02:00
parent 6f788fb8b4
commit 2f7205fb4b
12 changed files with 101 additions and 62 deletions
@@ -118,7 +118,11 @@ namespace Barotrauma
Abandon = true;
return;
}
ItemToContain = item ?? character.Inventory.FindItem(i => CheckItem(i) && i.Container != container.Item, recursive: true);
ItemToContain = item ?? character.Inventory.FindItem(it =>
CheckItem(it) &&
//ignore items already in the container, unless we're trying to place to a specific slot, and the item's not in it
(it.Container != container.Item || (TargetSlot.HasValue && it.Container.OwnInventory.FindIndex(it) != TargetSlot)),
recursive: true);
if (ItemToContain != null)
{
if (!character.CanInteractWith(ItemToContain, checkLinked: false))
@@ -146,12 +146,6 @@ namespace Barotrauma
{
return minVitality;
}
if (Character.HasAbilityFlag(AbilityFlags.CanNotDieToAfflictions))
{
return Math.Max(vitality, MinVitality + 1);
}
return vitality;
}
@@ -587,6 +581,15 @@ namespace Barotrauma
}
}
private void KillIfOutOfVitality()
{
if (Vitality <= MinVitality &&
!Character.HasAbilityFlag(AbilityFlags.CanNotDieToAfflictions))
{
Kill();
}
}
private readonly static List<Affliction> afflictionsToRemove = new List<Affliction>();
private readonly static List<KeyValuePair<Affliction, LimbHealth>> afflictionsToUpdate = new List<KeyValuePair<Affliction, LimbHealth>>();
public void SetAllDamage(float damageAmount, float bleedingDamageAmount, float burnDamageAmount)
@@ -611,7 +614,7 @@ namespace Barotrauma
}
CalculateVitality();
if (Vitality <= MinVitality) { Kill(); }
KillIfOutOfVitality();
}
public float GetLimbDamage(Limb limb, string afflictionType = null)
@@ -735,10 +738,7 @@ namespace Barotrauma
existingAffliction.Duration = existingAffliction.Prefab.Duration;
if (newAffliction.Source != null) { existingAffliction.Source = newAffliction.Source; }
CalculateVitality();
if (Vitality <= MinVitality)
{
Kill();
}
KillIfOutOfVitality();
return;
}
@@ -752,10 +752,7 @@ namespace Barotrauma
Character.HealthUpdateInterval = 0.0f;
CalculateVitality();
if (Vitality <= MinVitality)
{
Kill();
}
KillIfOutOfVitality();
#if CLIENT
if (OpenHealthWindow != this && limbHealth != null)
{
@@ -850,11 +847,7 @@ namespace Barotrauma
}
#endif
CalculateVitality();
if (Vitality <= MinVitality)
{
Kill();
}
KillIfOutOfVitality();
}
}
@@ -1,5 +1,6 @@
#nullable enable
using System;
using Barotrauma.Extensions;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -16,6 +17,9 @@ namespace Barotrauma.Abilities
{
if (!addingFirstTime) { return; }
// do not run client-side in multiplayer
if (GameMain.NetworkMember is { IsClient: true }) { return; }
JobPrefab? apprentice = CharacterAbilityApplyStatusEffectsToApprenticeship.GetApprenticeJob(Character, JobPrefab.Prefabs.ToImmutableHashSet());
if (apprentice is null)
{
@@ -49,6 +49,16 @@ namespace Barotrauma.Abilities
break;
}
}
switch (abilityEffectType)
{
case AbilityEffectType.OnDieToCharacter:
if (characterAbilities.Any(a => a.RequiresAlive))
{
DebugConsole.AddWarning($"Potential error in talent {characterTalent}: an ability group has the type {AbilityEffectType.OnDieToCharacter}, but includes abilities that require the character to be alive, meaning they will never execute.");
}
break;
}
}
public void ActivateAbilityGroup(bool addingFirstTime)
@@ -762,7 +762,6 @@ namespace Barotrauma.Items.Components
var relatedItem = FindContainableItem(contained);
if (relatedItem != null)
{
if (relatedItem.Hide.HasValue && relatedItem.Hide.Value) { continue; }
if (relatedItem.ItemPos.HasValue)
{
Vector2 pos = relatedItem.ItemPos.Value;