Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityIncreaseSkill.cs
T
2023-11-10 17:45:19 +02:00

61 lines
2.3 KiB
C#

using Barotrauma.Extensions;
namespace Barotrauma.Abilities
{
class CharacterAbilityIncreaseSkill : CharacterAbility
{
public override bool AppliesEffectOnIntervalUpdate => true;
private readonly Identifier skillIdentifier;
private readonly float skillIncrease;
public CharacterAbilityIncreaseSkill(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
{
skillIdentifier = abilityElement.GetAttributeIdentifier("skillidentifier", "");
skillIncrease = abilityElement.GetAttributeFloat("skillincrease", 0f);
if (skillIdentifier.IsEmpty)
{
DebugConsole.ThrowError($"Error in talent \"{characterAbilityGroup.CharacterTalent.DebugIdentifier}\" - skill identifier not defined in CharacterAbilityIncreaseSkill.",
contentPackage: abilityElement.ContentPackage);
}
if (MathUtils.NearlyEqual(skillIncrease, 0))
{
DebugConsole.AddWarning($"Possible error in talent \"{characterAbilityGroup.CharacterTalent.DebugIdentifier}\" - skill increase set to 0.",
contentPackage: abilityElement.ContentPackage);
}
}
protected override void ApplyEffect()
{
ApplyEffectSpecific(Character);
}
protected override void ApplyEffect(AbilityObject abilityObject)
{
if ((abilityObject as IAbilityCharacter)?.Character is Character character)
{
ApplyEffectSpecific(character);
}
else
{
ApplyEffectSpecific(Character);
}
}
private void ApplyEffectSpecific(Character character)
{
if (skillIdentifier == "random")
{
var skill = character.Info?.Job?.GetSkills()?.GetRandomUnsynced();
if (skill == null) { return; }
character.Info?.IncreaseSkillLevel(skill.Identifier, skillIncrease, gainedFromAbility: true);
}
else
{
character.Info?.IncreaseSkillLevel(skillIdentifier, skillIncrease, gainedFromAbility: true);
}
}
}
}