Unstable 0.17.1.0

This commit is contained in:
Markus Isberg
2022-03-17 01:25:04 +09:00
parent 3974067915
commit 6d410cc1b7
302 changed files with 5878 additions and 3317 deletions
@@ -41,9 +41,11 @@ namespace Barotrauma
if (previousValue > 0.0f && value <= 0.0f)
{
DeactivateHusk();
highestStrength = 0;
}
}
}
private float highestStrength;
public InfectionState State
{
@@ -75,6 +77,7 @@ namespace Barotrauma
{
if (HuskPrefab == null) { return; }
base.Update(characterHealth, targetLimb, deltaTime);
highestStrength = Math.Max(_strength, highestStrength);
character = characterHealth.Character;
if (character == null) { return; }
@@ -98,7 +101,7 @@ namespace Barotrauma
DeactivateHusk();
if (Prefab is AfflictionPrefabHusk { CauseSpeechImpediment: true })
{
character.SpeechImpediment = 100;
character.SpeechImpediment = 30;
}
State = InfectionState.Transition;
}
@@ -108,6 +111,10 @@ namespace Barotrauma
{
character.SetStun(Rand.Range(2f, 3f));
}
if (Prefab is AfflictionPrefabHusk { CauseSpeechImpediment: true })
{
character.SpeechImpediment = 100;
}
State = InfectionState.Active;
ActivateHusk();
}
@@ -120,7 +127,57 @@ namespace Barotrauma
}
}
partial void UpdateMessages();
private InfectionState? prevDisplayedMessage;
private void UpdateMessages()
{
if (Prefab is AfflictionPrefabHusk { SendMessages: false }) { return; }
if (prevDisplayedMessage.HasValue && prevDisplayedMessage.Value == State) { return; }
if (highestStrength > Strength) { return; }
switch (State)
{
case InfectionState.Dormant:
if (Strength < DormantThreshold * 0.5f)
{
return;
}
if (character == Character.Controlled)
{
#if CLIENT
GUI.AddMessage(TextManager.Get("HuskDormant"), GUIStyle.Red);
#endif
}
else if (character.IsBot)
{
character.Speak(TextManager.Get("dialoghuskdormant").Value, delay: Rand.Range(0.5f, 5.0f), identifier: "huskdormant".ToIdentifier());
}
break;
case InfectionState.Transition:
if (character == Character.Controlled)
{
#if CLIENT
GUI.AddMessage(TextManager.Get("HuskCantSpeak"), GUIStyle.Red);
#endif
}
else if (character.IsBot)
{
character.Speak(TextManager.Get("dialoghuskcantspeak").Value, delay: Rand.Range(0.5f, 5.0f), identifier: "huskcantspeak".ToIdentifier());
}
break;
case InfectionState.Active:
#if CLIENT
if (character == Character.Controlled && character.Params.UseHuskAppendage)
{
GUI.AddMessage(TextManager.GetWithVariable("HuskActivate", "[Attack]", GameSettings.CurrentConfig.KeyMap.KeyBindText(InputType.Attack)), GUIStyle.Red);
}
#endif
break;
case InfectionState.Final:
default:
break;
}
prevDisplayedMessage = State;
}
private void ApplyDamage(float deltaTime, bool applyForce)
{
@@ -209,7 +266,9 @@ namespace Barotrauma
{
yield return CoroutineStatus.Success;
}
#if SERVER
var client = GameMain.Server?.ConnectedClients.FirstOrDefault(c => c.Character == character);
#endif
character.Enabled = false;
Entity.Spawner.AddEntityToRemoveQueue(character);
UnsubscribeFromDeathEvent();
@@ -246,7 +305,6 @@ namespace Barotrauma
if (huskPrefab.ControlHusk)
{
#if SERVER
var client = GameMain.Server?.ConnectedClients.FirstOrDefault(c => c.Character == character);
if (client != null)
{
GameMain.Server.SetClientCharacter(client, husk);
@@ -657,6 +657,7 @@ namespace Barotrauma
if (!DoesBleed && newAffliction is AfflictionBleeding) { return; }
if (!Character.NeedsOxygen && newAffliction.Prefab == AfflictionPrefab.OxygenLow) { return; }
if (Character.Params.Health.StunImmunity && newAffliction.Prefab.AfflictionType == "stun") { return; }
if (Character.Params.Health.PoisonImmunity && newAffliction.Prefab.AfflictionType == "poison") { return; }
if (newAffliction.Prefab is AfflictionPrefabHusk huskPrefab)
{
if (huskPrefab.TargetSpecies.None(s => s == Character.SpeciesName))
@@ -731,48 +732,47 @@ namespace Barotrauma
StunTimer = Stun > 0 ? StunTimer + deltaTime : 0;
if (Character.GodMode) { return; }
afflictionsToRemove.Clear();
afflictionsToUpdate.Clear();
foreach (KeyValuePair<Affliction, LimbHealth> kvp in afflictions)
if (!Character.GodMode)
{
var affliction = kvp.Key;
if (affliction.Strength <= 0.0f)
afflictionsToRemove.Clear();
afflictionsToUpdate.Clear();
foreach (KeyValuePair<Affliction, LimbHealth> kvp in afflictions)
{
SteamAchievementManager.OnAfflictionRemoved(affliction, Character);
if (!irremovableAfflictions.Contains(affliction)) { afflictionsToRemove.Add(affliction); }
continue;
var affliction = kvp.Key;
if (affliction.Strength <= 0.0f)
{
SteamAchievementManager.OnAfflictionRemoved(affliction, Character);
if (!irremovableAfflictions.Contains(affliction)) { afflictionsToRemove.Add(affliction); }
continue;
}
afflictionsToUpdate.Add(kvp);
}
afflictionsToUpdate.Add(kvp);
}
foreach (KeyValuePair<Affliction, LimbHealth> kvp in afflictionsToUpdate)
{
var affliction = kvp.Key;
Limb targetLimb = null;
if (kvp.Value != null)
foreach (KeyValuePair<Affliction, LimbHealth> kvp in afflictionsToUpdate)
{
int healthIndex = limbHealths.IndexOf(kvp.Value);
targetLimb =
Character.AnimController.Limbs.LastOrDefault(l => !l.IsSevered && !l.Hidden && l.HealthIndex == healthIndex) ??
Character.AnimController.MainLimb;
var affliction = kvp.Key;
Limb targetLimb = null;
if (kvp.Value != null)
{
int healthIndex = limbHealths.IndexOf(kvp.Value);
targetLimb =
Character.AnimController.Limbs.LastOrDefault(l => !l.IsSevered && !l.Hidden && l.HealthIndex == healthIndex) ??
Character.AnimController.MainLimb;
}
affliction.Update(this, targetLimb, deltaTime);
affliction.DamagePerSecondTimer += deltaTime;
if (affliction is AfflictionBleeding bleeding)
{
UpdateBleedingProjSpecific(bleeding, targetLimb, deltaTime);
}
Character.StackSpeedMultiplier(affliction.GetSpeedMultiplier());
}
affliction.Update(this, targetLimb, deltaTime);
affliction.DamagePerSecondTimer += deltaTime;
if (affliction is AfflictionBleeding bleeding)
foreach (var affliction in afflictionsToRemove)
{
UpdateBleedingProjSpecific(bleeding, targetLimb, deltaTime);
}
Character.StackSpeedMultiplier(affliction.GetSpeedMultiplier());
}
foreach (var affliction in afflictionsToRemove)
{
afflictions.Remove(affliction);
afflictions.Remove(affliction);
}
}
Character.StackSpeedMultiplier(1f + Character.GetStatValue(StatTypes.MovementSpeed));
if (Character.InWater)
{
Character.StackSpeedMultiplier(1f + Character.GetStatValue(StatTypes.SwimmingSpeed));
@@ -782,13 +782,16 @@ namespace Barotrauma
Character.StackSpeedMultiplier(1f + Character.GetStatValue(StatTypes.WalkingSpeed));
}
UpdateLimbAfflictionOverlays();
UpdateSkinTint();
CalculateVitality();
if (Vitality <= MinVitality)
if (!Character.GodMode)
{
Kill();
UpdateLimbAfflictionOverlays();
UpdateSkinTint();
CalculateVitality();
if (Vitality <= MinVitality)
{
Kill();
}
}
}