More abilities, implemented support for form inheritance
All checks were successful
Build / Build (push) Successful in 49s
All checks were successful
Build / Build (push) Successful in 49s
This commit is contained in:
55
Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Moody.cs
Normal file
55
Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Moody.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
|
||||
|
||||
/// <summary>
|
||||
/// Moody is an ability that raises one stat and lowers another at the end of each turn.
|
||||
///
|
||||
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Moody_(Ability)">Bulbapedia - Moody</see>
|
||||
/// </summary>
|
||||
[Script(ScriptCategory.Ability, "moody")]
|
||||
public class Moody : Script
|
||||
{
|
||||
private IPokemon? _pokemon;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnAddedToParent(IScriptSource source)
|
||||
{
|
||||
if (source is not IPokemon pokemon)
|
||||
throw new InvalidOperationException("Moody script must be attached to a Pokemon.");
|
||||
_pokemon = pokemon;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnEndTurn(IBattle battle)
|
||||
{
|
||||
if (_pokemon == null)
|
||||
return;
|
||||
|
||||
var stats = _pokemon.StatBoost;
|
||||
Statistic? raiseStat = null;
|
||||
|
||||
var possibleStatsToRaise = stats.Where(x => x is
|
||||
{ value: < 6, statistic: not Statistic.Accuracy and not Statistic.Evasion and not Statistic.Hp })
|
||||
.Select(x => x.statistic).ToList();
|
||||
if (possibleStatsToRaise.Count > 0)
|
||||
{
|
||||
raiseStat = possibleStatsToRaise[battle.Random.GetInt(possibleStatsToRaise.Count)];
|
||||
}
|
||||
|
||||
Statistic? lowerStat = null;
|
||||
var possibleStatsToLower = stats.Where(x => x is
|
||||
{
|
||||
value: > -6,
|
||||
statistic: not Statistic.Accuracy and not Statistic.Evasion and not Statistic.Hp,
|
||||
} && x.statistic != raiseStat).Select(x => x.statistic).ToList();
|
||||
|
||||
if (possibleStatsToLower.Count > 0)
|
||||
{
|
||||
lowerStat = possibleStatsToLower[battle.Random.GetInt(possibleStatsToLower.Count)];
|
||||
}
|
||||
|
||||
if (raiseStat != null)
|
||||
_pokemon.ChangeStatBoost(raiseStat.Value, 1, true, false);
|
||||
if (lowerStat != null)
|
||||
_pokemon.ChangeStatBoost(lowerStat.Value, -1, true, false);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user