public static Character RerollStat(this Character character, Func<string, Race> raceGetter, ECharacterStat stat) { var charStat = character.Stats[stat]; var roll = (IntAddModdifier)charStat.Moddifiers[$@"{Race.GroupType}\StatRoll"]; var race = raceGetter(character.Groups[Race.GroupType]); roll.Value = race.Stats[stat].Roll().PureSum; return character; }
protected override Dice GetDefaultStatValue(ECharacterStat stat) => new Dice(DefaultStatDice, DefaultStatDieSides, DefaultStatValue);
public static void UpgradeStat(this Character character, ECharacterStat stat, int points) => character.StatUpgrades[stat] += points;
public static bool IsStatUpgradeAvaible(this Character character, ECharacterStat stat, int points) => character.Stats[stat] + points <= Character.StatLimit && character.SpendExp(character.GetStatCost(stat, points));
public static int GetStatCost(this Character character, ECharacterStat stat, int points) { var curValue = character.Stats[stat]; var price = character.StatCosts[stat]; var sum = 0; while (points > 0) { var dif = 10 - curValue % 10; if (dif > points) dif = points; var cost = (curValue / 10) * dif * price; sum += cost; points -= dif; curValue += dif; } return sum; }
protected virtual Dice GetDefaultStatValue(ECharacterStat stat) => 0;
public int this[ECharacterStat stat] { get { IntAddModdifier mod; _owner.Stats[stat].Moddifiers .TryGetConverted("Upgrades", out mod, m => (IntAddModdifier)m); return mod?.Value ?? 0; } set { var prop = _owner.Stats[stat]; prop.Moddifiers["Upgrades"] = value; } }
protected override Dice GetDefaultStatValue(ECharacterStat stat) => 0;