using PkmnLib.Dynamic.Models; using PkmnLib.Static; namespace PkmnLib.Dynamic.ScriptHandling; public class ProxyScript : Script { public delegate void ChangeOffensiveStatValueEventHandler(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, ref uint value); private readonly List<(Script, ChangeOffensiveStatValueEventHandler)> _changeOffensiveStatValueEvents = new(); public void AddChangeOffensiveStatValueEvent(Script script, ChangeOffensiveStatValueEventHandler handler) { _changeOffensiveStatValueEvents.Add((script, handler)); script.OnRemoveEvent += OnRemoveScriptEvent; } private void OnRemoveScriptEvent(Script script) { _changeOffensiveStatValueEvents.RemoveAll(x => x.Item1 == script); } /// public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, ref uint value) { foreach (var (script, handler) in _changeOffensiveStatValueEvents) { if (!script.IsSuppressed) { handler(move, target, hit, defensiveStat, targetStats, ref value); } } } }