54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
using System.Linq;
|
|
|
|
namespace Barotrauma.Abilities
|
|
{
|
|
class CharacterAbilityModifyStatToSkill : CharacterAbility
|
|
{
|
|
private readonly StatTypes statType;
|
|
private readonly float maxValue;
|
|
private readonly string skillIdentifier;
|
|
private readonly bool useAll;
|
|
private float lastValue = 0f;
|
|
public override bool AllowClientSimulation => true;
|
|
|
|
public CharacterAbilityModifyStatToSkill(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement)
|
|
{
|
|
statType = CharacterAbilityGroup.ParseStatType(abilityElement.GetAttributeString("stattype", ""), CharacterTalent.DebugIdentifier);
|
|
maxValue = abilityElement.GetAttributeFloat("maxvalue", 0f);
|
|
skillIdentifier = abilityElement.GetAttributeString("skillidentifier", string.Empty);
|
|
useAll = skillIdentifier == "all";
|
|
}
|
|
|
|
protected override void VerifyState(bool conditionsMatched, float timeSinceLastUpdate)
|
|
{
|
|
Character.ChangeStat(statType, -lastValue);
|
|
|
|
if (conditionsMatched)
|
|
{
|
|
float skillTotal = 0f;
|
|
|
|
if (useAll && Character.Info?.Job != null)
|
|
{
|
|
var skills = Character.Info.Job.GetSkills();
|
|
foreach (Skill skill in skills)
|
|
{
|
|
skillTotal += Character.GetSkillLevel(skill.Identifier);
|
|
}
|
|
skillTotal /= skills.Count();
|
|
}
|
|
else
|
|
{
|
|
skillTotal = Character.GetSkillLevel(skillIdentifier);
|
|
}
|
|
|
|
lastValue = skillTotal / 100f * maxValue;
|
|
Character.ChangeStat(statType, lastValue);
|
|
}
|
|
else
|
|
{
|
|
lastValue = 0f;
|
|
}
|
|
}
|
|
}
|
|
}
|