using System.Linq; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "ingrain")] public class IngrainEffect : Script { private readonly IPokemon _owner; public IngrainEffect(IPokemon owner) { _owner = owner; } /// public override void PreventSelfSwitch(ISwitchChoice choice, ref bool prevent) => prevent = true; /// public override void PreventSelfRunAway(IFleeChoice choice, ref bool prevent) => prevent = true; /// public override void OnEndTurn(IBattle battle) { var heal = _owner.BoostedStats.Hp / 16; _owner.Heal(heal); } /// public override void FailIncomingMove(IExecutingMove move, IPokemon target, ref bool fail) { if (move.UseMove.Name == "roar" || move.UseMove.Name == "whirlwind") { fail = true; } } /// public override void ChangeEffectiveness(IExecutingMove move, IPokemon target, byte hit, ref float effectiveness) { var battleData = target.BattleData; if (battleData == null) return; if (move.UseMove.MoveType.Name != "ground") return; var targetTypes = target.Types; var typeLibrary = battleData.Battle.Library.StaticLibrary.Types; effectiveness = // Get the effectiveness of the move against each target type targetTypes.Select(x => typeLibrary.GetSingleEffectiveness(move.UseMove.MoveType, x)) // Ignore all types that are immune to ground moves .Where(x => x > 0) // Multiply all effectiveness values together .Aggregate(1.0f, (current, x) => current * x); } }