using PkmnLib.Static.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; [Script(ScriptCategory.Ability, "prevent_stat_lowering")] public class PreventStatLowering : Script { /// /// The statistic that this ability prevents from being lowered. /// Null means it prevents all stat lowering. /// private Statistic? _statistic; /// public override void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters is null) throw new ArgumentNullException(nameof(parameters), "Parameters cannot be null."); if (parameters.TryGetValue("stat", out var statObj) && statObj is string statStr) { if (!Enum.TryParse(statStr, true, out Statistic stat)) throw new ArgumentException($"Invalid statistic '{statStr}' provided.", nameof(statStr)); _statistic = stat; } } /// public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (_statistic is not null && _statistic != stat) return; if (amount >= 0) return; if (!selfInflicted) { target.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(target)); prevent = true; } } }