diff --git a/PkmnLib.Dynamic/ScriptHandling/Script.cs b/PkmnLib.Dynamic/ScriptHandling/Script.cs index 5182986..8ee81e1 100644 --- a/PkmnLib.Dynamic/ScriptHandling/Script.cs +++ b/PkmnLib.Dynamic/ScriptHandling/Script.cs @@ -54,13 +54,6 @@ public abstract class Script : IDeepCloneable { } - /// - /// This function is ran when this script starts being in effect. - /// - public virtual void OnInitialize(IReadOnlyDictionary? parameters) - { - } - /// /// This function is ran when this script is added to a parent. /// @@ -848,4 +841,17 @@ public interface IScriptOnBeforeAnyHookInvoked /// of scripts. This is useful for example to prevent certain effects from running. /// void OnBeforeAnyHookInvoked(ref List? suppressedCategories); +} + +/// +/// This interface is used to allow scripts to run when they are initialized. This allows for +/// setting up the script with parameters that are passed to it. +/// +public interface IScriptOnInitialize +{ + /// + /// This function is ran when the script is initialized. This allows for setting up the script + /// with parameters that are passed to it. + /// + void OnInitialize(IReadOnlyDictionary? parameters); } \ No newline at end of file diff --git a/PkmnLib.Dynamic/ScriptHandling/ScriptResolver.cs b/PkmnLib.Dynamic/ScriptHandling/ScriptResolver.cs index 9880879..9ff076c 100644 --- a/PkmnLib.Dynamic/ScriptHandling/ScriptResolver.cs +++ b/PkmnLib.Dynamic/ScriptHandling/ScriptResolver.cs @@ -34,7 +34,8 @@ public class ScriptResolver } script = scriptCtor(); - script.OnInitialize(parameters); + if (script is IScriptOnInitialize scriptOnInitialize) + scriptOnInitialize.OnInitialize(parameters); return true; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ChangeMoveTypeAbility.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ChangeMoveTypeAbility.cs index cd8f487..27e9e13 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ChangeMoveTypeAbility.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ChangeMoveTypeAbility.cs @@ -9,13 +9,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Refrigerate /// [Script(ScriptCategory.Ability, "change_move_type")] -public class ChangeMoveTypeAbility : Script +public class ChangeMoveTypeAbility : Script, IScriptOnInitialize { private StringKey _fromType; private StringKey _toType; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) throw new ArgumentNullException(nameof(parameters)); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs index daa7684..b3dff39 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs @@ -11,13 +11,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Swarm /// [Script(ScriptCategory.Ability, "power_up_type_at_low_health")] -public class PowerUpTypeAtLowHealth : Script +public class PowerUpTypeAtLowHealth : Script, IScriptOnInitialize { private StringKey _type; private float _threshold; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) throw new ArgumentNullException(nameof(parameters)); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PreventStatLowering.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PreventStatLowering.cs index 545aea2..5d2a50a 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PreventStatLowering.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PreventStatLowering.cs @@ -10,7 +10,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Full Metal Body /// [Script(ScriptCategory.Ability, "prevent_stat_lowering")] -public class PreventStatLowering : Script +public class PreventStatLowering : Script, IScriptOnInitialize { /// /// The statistic that this ability prevents from being lowered. @@ -19,7 +19,7 @@ public class PreventStatLowering : Script private Statistic? _statistic; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters is null) throw new ArgumentNullException(nameof(parameters), "Parameters cannot be null."); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedModifierInWeather.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedModifierInWeather.cs index cab8eab..c12e514 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedModifierInWeather.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedModifierInWeather.cs @@ -9,13 +9,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Sand Rush /// [Script(ScriptCategory.Ability, "speed_modifier_in_weather")] -public class SpeedModifierInWeather : Script +public class SpeedModifierInWeather : Script, IScriptOnInitialize { private StringKey _weather; private float _modifier; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters is null) throw new ArgumentNullException(nameof(parameters)); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs index a11111f..f2c7b44 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "change_all_target_stats")] -public class ChangeAllTargetStats : Script +public class ChangeAllTargetStats : Script, IScriptOnInitialize { private sbyte _amount; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs index 0b43dbd..929ee65 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "change_multiple_target_stat_boosts")] -public class ChangeMultipleTargetStatBoosts : Script +public class ChangeMultipleTargetStatBoosts : Script, IScriptOnInitialize { private Dictionary _statBoosts = new(); /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs index 66ac7ca..da5f77b 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "change_multiple_user_stat_boosts")] -public class ChangeMultipleUserStatBoosts : Script +public class ChangeMultipleUserStatBoosts : Script, IScriptOnInitialize { private Dictionary _statBoosts = new(); /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs index 4bd0960..1488be9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs @@ -1,6 +1,6 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; -public abstract class ChangeTargetStats : Script +public abstract class ChangeTargetStats : Script, IScriptOnInitialize { private readonly Statistic _stat; private sbyte _amount; @@ -11,7 +11,7 @@ public abstract class ChangeTargetStats : Script } /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs index f96553f..86ca6f9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs @@ -1,6 +1,6 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; -public abstract class ChangeUserStats : Script +public abstract class ChangeUserStats : Script, IScriptOnInitialize { private readonly Statistic _stat; private sbyte _amount; @@ -11,7 +11,7 @@ public abstract class ChangeUserStats : Script } /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs index fa16e75..f6864a9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs @@ -1,14 +1,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "drain")] -public class Drain : Script +public class Drain : Script, IScriptOnInitialize { public float DrainModifier { get; set; } = 0.5f; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { - base.OnInitialize(parameters); if (parameters == null) return; DrainModifier = parameters.GetValueOrDefault("drain_modifier") as float? ?? DrainModifier; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs index 149fd12..29fc742 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "flame_wheel")] -public class FlameWheel : Script +public class FlameWheel : Script, IScriptOnInitialize { private float _burnChance; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters is null || !parameters.TryGetValue("burn_chance", out var burnChance) || burnChance is not float chance) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs index 8994cfb..992661f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs @@ -3,14 +3,13 @@ using PkmnLib.Plugin.Gen7.Scripts.Pokemon; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "heal_each_end_of_turn")] -public class HealEachEndOfTurn : Script +public class HealEachEndOfTurn : Script, IScriptOnInitialize { private float _healPercentage; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { - base.OnInitialize(parameters); if (parameters == null || !parameters.TryGetValue("percent", out var healPercentageObj) || healPercentageObj is not float healPercentage) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs index 26fc991..9d5db68 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "heal_percent")] -public class HealPercent : Script +public class HealPercent : Script, IScriptOnInitialize { private float _healPercent = 0.5f; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters?.TryGetValue("healPercent", out var variable) == true && variable is float healPercent) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs index eca38a4..bc5c291 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "recoil")] -public class Recoil : Script +public class Recoil : Script, IScriptOnInitialize { private float _recoilPercentage; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs index 7e7ae32..9c3dedb 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "set_status")] -public class SetStatus : Script +public class SetStatus : Script, IScriptOnInitialize { private string? _status; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters?.TryGetValue("status", out var s) != true) throw new Exception("Missing required parameter 'status'"); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs index 3710300..66a5780 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs @@ -1,13 +1,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "set_weather")] -public class SetWeather : Script +public class SetWeather : Script, IScriptOnInitialize { private string _weather = null!; private int _defaultTurns = 5; /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (!parameters!.TryGetValue("weather", out var weather) || weather is null) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs index 7b48cf6..fc3be87 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "static_damage")] -public class StaticDamage : Script +public class StaticDamage : Script, IScriptOnInitialize { private uint Damage { get; set; } /// - public override void OnInitialize(IReadOnlyDictionary? parameters) + public void OnInitialize(IReadOnlyDictionary? parameters) { if (parameters == null) throw new Exception("Parameters cannot be null for StaticDamage script.");