34 lines
1.3 KiB
C#
34 lines
1.3 KiB
C#
using System.Linq;
|
|
using PkmnLib.Dynamic.Models;
|
|
using PkmnLib.Dynamic.ScriptHandling;
|
|
using PkmnLib.Dynamic.ScriptHandling.Registry;
|
|
using PkmnLib.Static;
|
|
|
|
namespace PkmnLib.Plugin.Gen7.Moves;
|
|
|
|
/// <summary>
|
|
/// The user applies pressure to stress points, sharply boosting one of its or its allies' stats.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Acupressure chooses one of the target's stats at random and raises it by two stages. It can raise either the
|
|
/// target's Attack, Defense, Special Attack, Special Defense, Speed, accuracy or evasion stat but will not attempt
|
|
/// to raise a stat that is already maximized, meaning that the move will fail if all stats are maximized
|
|
/// </remarks>
|
|
[Script(ScriptCategory.Move, "acupressure")]
|
|
public class Acupressure : Script
|
|
{
|
|
/// <inheritdoc />
|
|
public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
|
|
{
|
|
// If the target has no stats to raise, the move fails
|
|
if (target.StatBoost.All(s => s == 6))
|
|
{
|
|
move.GetHitData(target, hit).Fail();
|
|
return;
|
|
}
|
|
|
|
// Choose a random stat to raise. 0 is HP, so we start at 1.
|
|
var stat = (Statistic)move.User.BattleData!.Battle.Random.GetInt(1, (int)Statistic.Speed + 1);
|
|
target.ChangeStatBoost(stat, 2, false);
|
|
}
|
|
} |