61 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|