This commit is contained in:
@@ -5,26 +5,37 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
|
||||
[Script(ScriptCategory.Ability, "prevent_stat_lowering")]
|
||||
public class PreventStatLowering : Script
|
||||
{
|
||||
private Statistic _statistic;
|
||||
/// <summary>
|
||||
/// The statistic that this ability prevents from being lowered.
|
||||
/// Null means it prevents all stat lowering.
|
||||
/// </summary>
|
||||
private Statistic? _statistic;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
|
||||
{
|
||||
if (parameters is null)
|
||||
throw new ArgumentNullException(nameof(parameters), "Parameters cannot be null.");
|
||||
if (!parameters.TryGetValue("stat", out var statObj) || statObj is not string statStr)
|
||||
throw new ArgumentException("Parameter 'stat' is required and must be a string.", nameof(parameters));
|
||||
if (!Enum.TryParse(statStr, true, out Statistic stat))
|
||||
throw new ArgumentException($"Invalid statistic '{statStr}' provided.", nameof(statStr));
|
||||
|
||||
_statistic = stat;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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)
|
||||
prevent = false;
|
||||
{
|
||||
target.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(target));
|
||||
prevent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user