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.");