Unstable 1.8.4.0

This commit is contained in:
Markus Isberg
2025-03-12 12:56:27 +00:00
parent a4c3e868e4
commit a4a3427e4e
627 changed files with 29860 additions and 10018 deletions
@@ -24,14 +24,18 @@ namespace Barotrauma.Abilities
foreach (Character enemyCharacter in enemyCharacters)
{
if (!enemyCharacter.IsHuman) { continue; }
if (enemyCharacter.Submarine == null || enemyCharacter.Submarine != Submarine.MainSub) { continue; }
if (enemyCharacter.Submarine == null ||
(Submarine.MainSub != null && enemyCharacter.Submarine != Submarine.MainSub))
{
continue;
}
if (enemyCharacter.IsDead) { continue; }
if (!enemyCharacter.LockHands) { continue; }
Character.GiveMoney(moneyAmount);
GameAnalyticsManager.AddMoneyGainedEvent(moneyAmount, GameAnalyticsManager.MoneySource.Ability, CharacterTalent.Prefab.Identifier.Value);
foreach (Character character in Character.GetFriendlyCrew(Character))
{
character.Info?.GiveExperience(experienceAmount);
character.Info.GiveExperience(experienceAmount);
}
timesGiven++;
if (max > 0 && timesGiven >= max) { break; }
@@ -1,4 +1,4 @@
#nullable enable
#nullable enable
using System;
using Barotrauma.Extensions;
@@ -31,7 +31,7 @@ namespace Barotrauma.Abilities
if (!TalentTree.JobTalentTrees.TryGet(apprentice.Identifier, out TalentTree? talentTree)) { return; }
ImmutableHashSet<Character> characters = GameSession.GetSessionCrewCharacters(CharacterType.Both);
var characters = Character.GetFriendlyCrew(Character);
HashSet<ImmutableHashSet<Identifier>> talentsTrees = new HashSet<ImmutableHashSet<Identifier>>();
foreach (TalentSubTree subTree in talentTree.TalentSubTrees)
@@ -60,13 +60,14 @@ namespace Barotrauma.Abilities
talentsTrees.Add(identifiers.ToImmutableHashSet());
}
ImmutableHashSet<Identifier> selectedTalentTree = talentsTrees.GetRandomUnsynced();
foreach (Identifier identifier in selectedTalentTree)
ImmutableHashSet<Identifier>? selectedTalentTree = talentsTrees.GetRandomUnsynced();
if (selectedTalentTree != null)
{
if (Character.HasTalent(identifier)) { continue; }
Character.GiveTalent(identifier);
foreach (Identifier identifier in selectedTalentTree)
{
if (Character.HasTalent(identifier)) { continue; }
Character.GiveTalent(identifier);
}
}
static bool IsShowCaseTalent(Identifier identifier, TalentOption option)
@@ -12,14 +12,20 @@
internal class CharacterAbilityWarStories : CharacterAbility
{
private readonly Identifier targetStat;
private readonly float minCondition;
private readonly float normalQualityThreshold;
private readonly float goodQualityThreshold;
private readonly float excellentQualityThreshold;
private readonly float masterworkQualityThreshold;
private readonly ItemPrefab prefab;
public CharacterAbilityWarStories(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
{
targetStat = abilityElement.GetAttributeIdentifier("target", Identifier.Empty);
minCondition = abilityElement.GetAttributeFloat("mincondition", 1);
normalQualityThreshold = abilityElement.GetAttributeFloat("normalqualitythreshold", 4);
goodQualityThreshold = abilityElement.GetAttributeFloat("goodqualitythreshold", 10);
excellentQualityThreshold = abilityElement.GetAttributeFloat("excellentqualitythreshold", 20);
masterworkQualityThreshold = abilityElement.GetAttributeFloat("masterworkqualitythreshold", 30);
if (targetStat.IsEmpty)
{
@@ -37,23 +43,28 @@ internal class CharacterAbilityWarStories : CharacterAbility
{
if (prefab is null || Character is null) { return; }
float condition = Character.Info?.GetSavedStatValue(StatTypes.None, targetStat) ?? 0;
if (condition < minCondition) { return; }
float statValue = Character.Info?.GetSavedStatValue(StatTypes.None, targetStat) ?? 0;
if (statValue < normalQualityThreshold) { return; }
int quality = 0;
if (statValue >= masterworkQualityThreshold) { quality = 3; }
else if (statValue >= excellentQualityThreshold) { quality = 2; }
else if (statValue >= goodQualityThreshold) { quality = 1; }
if (GameMain.GameSession?.RoundEnding ?? true)
{
Item item = new(prefab, Character.WorldPosition, Character.Submarine)
{
Condition = condition,
HealthMultiplier = condition
Quality = quality,
};
Character.Inventory.TryPutItem(item, Character, item.AllowedSlots);
}
else
{
Entity.Spawner?.AddItemToSpawnQueue(prefab, Character.Inventory, condition: condition, onSpawned: item =>
Entity.Spawner?.AddItemToSpawnQueue(prefab, Character.Inventory, quality: quality, onSpawned: item =>
{
item.HealthMultiplier = condition;
item.Quality = quality;
});
}
}