Move OnInitialize to interface

This commit is contained in:
Deukhoofd 2025-06-28 10:31:23 +02:00
parent d719ce03ea
commit 04cf585f5a
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
19 changed files with 49 additions and 44 deletions

View File

@ -54,13 +54,6 @@ public abstract class Script : IDeepCloneable
{ {
} }
/// <summary>
/// This function is ran when this script starts being in effect.
/// </summary>
public virtual void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{
}
/// <summary> /// <summary>
/// This function is ran when this script is added to a parent. /// This function is ran when this script is added to a parent.
/// </summary> /// </summary>
@ -849,3 +842,16 @@ public interface IScriptOnBeforeAnyHookInvoked
/// </summary> /// </summary>
void OnBeforeAnyHookInvoked(ref List<ScriptCategory>? suppressedCategories); void OnBeforeAnyHookInvoked(ref List<ScriptCategory>? suppressedCategories);
} }
/// <summary>
/// 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.
/// </summary>
public interface IScriptOnInitialize
{
/// <summary>
/// This function is ran when the script is initialized. This allows for setting up the script
/// with parameters that are passed to it.
/// </summary>
void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters);
}

View File

@ -34,7 +34,8 @@ public class ScriptResolver
} }
script = scriptCtor(); script = scriptCtor();
script.OnInitialize(parameters); if (script is IScriptOnInitialize scriptOnInitialize)
scriptOnInitialize.OnInitialize(parameters);
return true; return true;
} }

View File

@ -9,13 +9,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Refrigerate_(Ability)">Bulbapedia - Refrigerate</see> /// <see href="https://bulbapedia.bulbagarden.net/wiki/Refrigerate_(Ability)">Bulbapedia - Refrigerate</see>
/// </summary> /// </summary>
[Script(ScriptCategory.Ability, "change_move_type")] [Script(ScriptCategory.Ability, "change_move_type")]
public class ChangeMoveTypeAbility : Script public class ChangeMoveTypeAbility : Script, IScriptOnInitialize
{ {
private StringKey _fromType; private StringKey _fromType;
private StringKey _toType; private StringKey _toType;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
throw new ArgumentNullException(nameof(parameters)); throw new ArgumentNullException(nameof(parameters));

View File

@ -11,13 +11,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Swarm_(Ability)">Bulbapedia - Swarm</see> /// <see href="https://bulbapedia.bulbagarden.net/wiki/Swarm_(Ability)">Bulbapedia - Swarm</see>
/// </summary> /// </summary>
[Script(ScriptCategory.Ability, "power_up_type_at_low_health")] [Script(ScriptCategory.Ability, "power_up_type_at_low_health")]
public class PowerUpTypeAtLowHealth : Script public class PowerUpTypeAtLowHealth : Script, IScriptOnInitialize
{ {
private StringKey _type; private StringKey _type;
private float _threshold; private float _threshold;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
throw new ArgumentNullException(nameof(parameters)); throw new ArgumentNullException(nameof(parameters));

View File

@ -10,7 +10,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Full_Metal_Body_(Ability)">Bulbapedia - Full Metal Body</see> /// <see href="https://bulbapedia.bulbagarden.net/wiki/Full_Metal_Body_(Ability)">Bulbapedia - Full Metal Body</see>
/// </summary> /// </summary>
[Script(ScriptCategory.Ability, "prevent_stat_lowering")] [Script(ScriptCategory.Ability, "prevent_stat_lowering")]
public class PreventStatLowering : Script public class PreventStatLowering : Script, IScriptOnInitialize
{ {
/// <summary> /// <summary>
/// The statistic that this ability prevents from being lowered. /// The statistic that this ability prevents from being lowered.
@ -19,7 +19,7 @@ public class PreventStatLowering : Script
private Statistic? _statistic; private Statistic? _statistic;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters is null) if (parameters is null)
throw new ArgumentNullException(nameof(parameters), "Parameters cannot be null."); throw new ArgumentNullException(nameof(parameters), "Parameters cannot be null.");

View File

@ -9,13 +9,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Sand_Rush_(Ability)">Bulbapedia - Sand Rush</see> /// <see href="https://bulbapedia.bulbagarden.net/wiki/Sand_Rush_(Ability)">Bulbapedia - Sand Rush</see>
/// </summary> /// </summary>
[Script(ScriptCategory.Ability, "speed_modifier_in_weather")] [Script(ScriptCategory.Ability, "speed_modifier_in_weather")]
public class SpeedModifierInWeather : Script public class SpeedModifierInWeather : Script, IScriptOnInitialize
{ {
private StringKey _weather; private StringKey _weather;
private float _modifier; private float _modifier;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters is null) if (parameters is null)
throw new ArgumentNullException(nameof(parameters)); throw new ArgumentNullException(nameof(parameters));

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "change_all_target_stats")] [Script(ScriptCategory.Move, "change_all_target_stats")]
public class ChangeAllTargetStats : Script public class ChangeAllTargetStats : Script, IScriptOnInitialize
{ {
private sbyte _amount; private sbyte _amount;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
{ {

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "change_multiple_target_stat_boosts")] [Script(ScriptCategory.Move, "change_multiple_target_stat_boosts")]
public class ChangeMultipleTargetStatBoosts : Script public class ChangeMultipleTargetStatBoosts : Script, IScriptOnInitialize
{ {
private Dictionary<Statistic, sbyte> _statBoosts = new(); private Dictionary<Statistic, sbyte> _statBoosts = new();
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
{ {

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "change_multiple_user_stat_boosts")] [Script(ScriptCategory.Move, "change_multiple_user_stat_boosts")]
public class ChangeMultipleUserStatBoosts : Script public class ChangeMultipleUserStatBoosts : Script, IScriptOnInitialize
{ {
private Dictionary<Statistic, sbyte> _statBoosts = new(); private Dictionary<Statistic, sbyte> _statBoosts = new();
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
{ {

View File

@ -1,6 +1,6 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public abstract class ChangeTargetStats : Script public abstract class ChangeTargetStats : Script, IScriptOnInitialize
{ {
private readonly Statistic _stat; private readonly Statistic _stat;
private sbyte _amount; private sbyte _amount;
@ -11,7 +11,7 @@ public abstract class ChangeTargetStats : Script
} }
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
{ {

View File

@ -1,6 +1,6 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public abstract class ChangeUserStats : Script public abstract class ChangeUserStats : Script, IScriptOnInitialize
{ {
private readonly Statistic _stat; private readonly Statistic _stat;
private sbyte _amount; private sbyte _amount;
@ -11,7 +11,7 @@ public abstract class ChangeUserStats : Script
} }
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
{ {

View File

@ -1,14 +1,13 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "drain")] [Script(ScriptCategory.Move, "drain")]
public class Drain : Script public class Drain : Script, IScriptOnInitialize
{ {
public float DrainModifier { get; set; } = 0.5f; public float DrainModifier { get; set; } = 0.5f;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
base.OnInitialize(parameters);
if (parameters == null) if (parameters == null)
return; return;
DrainModifier = parameters.GetValueOrDefault("drain_modifier") as float? ?? DrainModifier; DrainModifier = parameters.GetValueOrDefault("drain_modifier") as float? ?? DrainModifier;

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "flame_wheel")] [Script(ScriptCategory.Move, "flame_wheel")]
public class FlameWheel : Script public class FlameWheel : Script, IScriptOnInitialize
{ {
private float _burnChance; private float _burnChance;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters is null || !parameters.TryGetValue("burn_chance", out var burnChance) || if (parameters is null || !parameters.TryGetValue("burn_chance", out var burnChance) ||
burnChance is not float chance) burnChance is not float chance)

View File

@ -3,14 +3,13 @@ using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "heal_each_end_of_turn")] [Script(ScriptCategory.Move, "heal_each_end_of_turn")]
public class HealEachEndOfTurn : Script public class HealEachEndOfTurn : Script, IScriptOnInitialize
{ {
private float _healPercentage; private float _healPercentage;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
base.OnInitialize(parameters);
if (parameters == null || !parameters.TryGetValue("percent", out var healPercentageObj) || if (parameters == null || !parameters.TryGetValue("percent", out var healPercentageObj) ||
healPercentageObj is not float healPercentage) healPercentageObj is not float healPercentage)
{ {

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "heal_percent")] [Script(ScriptCategory.Move, "heal_percent")]
public class HealPercent : Script public class HealPercent : Script, IScriptOnInitialize
{ {
private float _healPercent = 0.5f; private float _healPercent = 0.5f;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters?.TryGetValue("healPercent", out var variable) == true && variable is float healPercent) if (parameters?.TryGetValue("healPercent", out var variable) == true && variable is float healPercent)
{ {

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "recoil")] [Script(ScriptCategory.Move, "recoil")]
public class Recoil : Script public class Recoil : Script, IScriptOnInitialize
{ {
private float _recoilPercentage; private float _recoilPercentage;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
return; return;

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "set_status")] [Script(ScriptCategory.Move, "set_status")]
public class SetStatus : Script public class SetStatus : Script, IScriptOnInitialize
{ {
private string? _status; private string? _status;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters?.TryGetValue("status", out var s) != true) if (parameters?.TryGetValue("status", out var s) != true)
throw new Exception("Missing required parameter 'status'"); throw new Exception("Missing required parameter 'status'");

View File

@ -1,13 +1,13 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "set_weather")] [Script(ScriptCategory.Move, "set_weather")]
public class SetWeather : Script public class SetWeather : Script, IScriptOnInitialize
{ {
private string _weather = null!; private string _weather = null!;
private int _defaultTurns = 5; private int _defaultTurns = 5;
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (!parameters!.TryGetValue("weather", out var weather) || weather is null) if (!parameters!.TryGetValue("weather", out var weather) || weather is null)
{ {

View File

@ -1,12 +1,12 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "static_damage")] [Script(ScriptCategory.Move, "static_damage")]
public class StaticDamage : Script public class StaticDamage : Script, IScriptOnInitialize
{ {
private uint Damage { get; set; } private uint Damage { get; set; }
/// <inheritdoc /> /// <inheritdoc />
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters) public void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
{ {
if (parameters == null) if (parameters == null)
throw new Exception("Parameters cannot be null for StaticDamage script."); throw new Exception("Parameters cannot be null for StaticDamage script.");