Merge branch 'master' of https://github.com/Regalis11/Barotrauma into develop-unstable

This commit is contained in:
EvilFactory
2022-12-14 12:10:23 -03:00
13 changed files with 104 additions and 63 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))
@@ -151,12 +151,6 @@ namespace Barotrauma
{
return minVitality;
}
if (Character.HasAbilityFlag(AbilityFlags.CanNotDieToAfflictions))
{
return Math.Max(vitality, MinVitality + 1);
}
return vitality;
}
@@ -598,6 +592,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)
@@ -622,7 +625,7 @@ namespace Barotrauma
}
CalculateVitality();
if (Vitality <= MinVitality) { Kill(); }
KillIfOutOfVitality();
}
public float GetLimbDamage(Limb limb, string afflictionType = null)
@@ -751,10 +754,7 @@ namespace Barotrauma
existingAffliction.Duration = existingAffliction.Prefab.Duration;
if (newAffliction.Source != null) { existingAffliction.Source = newAffliction.Source; }
CalculateVitality();
if (Vitality <= MinVitality)
{
Kill();
}
KillIfOutOfVitality();
return;
}
@@ -768,10 +768,7 @@ namespace Barotrauma
Character.HealthUpdateInterval = 0.0f;
CalculateVitality();
if (Vitality <= MinVitality)
{
Kill();
}
KillIfOutOfVitality();
#if CLIENT
if (OpenHealthWindow != this && limbHealth != null)
{
@@ -866,11 +863,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;