diff --git a/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs b/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs index aa96aa8..24e82cc 100644 --- a/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs +++ b/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs @@ -259,11 +259,15 @@ public static class MoveTurnExecutor }); target.Damage(damage, DamageSource.MoveDamage, hitEventBatch); if (!target.IsFainted) + { target.RunScriptHookInterface(x => x.OnIncomingHit(executingMove, target, hitIndex)); + } else + { executingMove.RunScriptHookInterface(x => x.OnOpponentFaints(executingMove, target, hitIndex)); + } if (!target.IsFainted) { @@ -271,9 +275,9 @@ public static class MoveTurnExecutor if (secondaryEffect != null) { var preventSecondary = false; - executingMove.RunScriptHook(x => + executingMove.RunScriptHookInterface(x => x.PreventSecondaryEffect(executingMove, target, hitIndex, ref preventSecondary)); - target.RunScriptHook(x => + target.RunScriptHookInterface(x => x.PreventIncomingSecondaryEffect(executingMove, target, hitIndex, ref preventSecondary)); @@ -288,8 +292,10 @@ public static class MoveTurnExecutor } } if (target.IsFainted) + { executingMove.RunScriptHookInterface(x => x.OnOpponentFaints(executingMove, target, hitIndex)); + } } } } @@ -303,7 +309,7 @@ public static class MoveTurnExecutor if (!executingMove.User.IsFainted) { - executingMove.RunScriptHook(x => x.OnAfterHits(executingMove, target)); + executingMove.RunScriptHookInterface(x => x.OnAfterHits(executingMove, target)); } } } \ No newline at end of file diff --git a/PkmnLib.Dynamic/BattleFlow/TurnRunner.cs b/PkmnLib.Dynamic/BattleFlow/TurnRunner.cs index 1255a3c..0791750 100644 --- a/PkmnLib.Dynamic/BattleFlow/TurnRunner.cs +++ b/PkmnLib.Dynamic/BattleFlow/TurnRunner.cs @@ -60,15 +60,15 @@ public static class TurnRunner { scripts.Clear(); pokemon.GetOwnScripts(scripts); - scripts.RunScriptHook(x => x.OnEndTurn(pokemon, battle)); + scripts.RunScriptHookInterface(x => x.OnEndTurn(pokemon, battle)); } scripts.Clear(); side.GetOwnScripts(scripts); - scripts.RunScriptHook(x => x.OnEndTurn(side, battle)); + scripts.RunScriptHookInterface(x => x.OnEndTurn(side, battle)); } scripts.Clear(); battle.GetOwnScripts(scripts); - scripts.RunScriptHook(x => x.OnEndTurn(battle, battle)); + scripts.RunScriptHookInterface(x => x.OnEndTurn(battle, battle)); } } diff --git a/PkmnLib.Dynamic/Models/BattleRandom.cs b/PkmnLib.Dynamic/Models/BattleRandom.cs index c1c840c..6be30a0 100644 --- a/PkmnLib.Dynamic/Models/BattleRandom.cs +++ b/PkmnLib.Dynamic/Models/BattleRandom.cs @@ -38,8 +38,10 @@ public class BattleRandomImpl : RandomImpl, IBattleRandom /// public bool EffectChance(float chance, IExecutingMove executingMove, IPokemon target, byte hitNumber) { - executingMove.RunScriptHook(script => script.ChangeEffectChance(executingMove, target, hitNumber, ref chance)); - target.RunScriptHook(script => script.ChangeIncomingEffectChance(executingMove, target, hitNumber, ref chance)); + executingMove.RunScriptHookInterface(script => + script.ChangeEffectChance(executingMove, target, hitNumber, ref chance)); + target.RunScriptHookInterface(script => + script.ChangeIncomingEffectChance(executingMove, target, hitNumber, ref chance)); if (chance > 100.0) return true; if (chance < 0.0) diff --git a/PkmnLib.Dynamic/Models/Pokemon.cs b/PkmnLib.Dynamic/Models/Pokemon.cs index 7978925..4f4d4c3 100644 --- a/PkmnLib.Dynamic/Models/Pokemon.cs +++ b/PkmnLib.Dynamic/Models/Pokemon.cs @@ -889,11 +889,12 @@ public class PokemonImpl : ScriptSource, IPokemon if (!force) { var prevented = false; - this.RunScriptHook(script => + this.RunScriptHookInterface(script => script.PreventStatBoostChange(this, stat, change, selfInflicted, ref prevented)); if (prevented) return false; - this.RunScriptHook(script => script.ChangeStatBoostChange(this, stat, selfInflicted, ref change)); + this.RunScriptHookInterface(script => + script.ChangeStatBoostChange(this, stat, selfInflicted, ref change)); if (change == 0) return false; } @@ -917,7 +918,8 @@ public class PokemonImpl : ScriptSource, IPokemon } RecalculateBoostedStats(); - this.RunScriptHook(script => script.OnAfterStatBoostChange(this, stat, selfInflicted, change)); + this.RunScriptHookInterface(script => + script.OnAfterStatBoostChange(this, stat, selfInflicted, change)); return true; } diff --git a/PkmnLib.Dynamic/ScriptHandling/Script.cs b/PkmnLib.Dynamic/ScriptHandling/Script.cs index 0cec19f..6ba74f6 100644 --- a/PkmnLib.Dynamic/ScriptHandling/Script.cs +++ b/PkmnLib.Dynamic/ScriptHandling/Script.cs @@ -61,172 +61,6 @@ public abstract class Script : IDeepCloneable { } - /// - /// This function allows a script to bypass defensive stat boosts for a move hit. - /// If this is true, the damage will be calculated as if the target has no positive stat boosts. Negative - /// stat boosts will still be applied. - /// - public virtual void BypassDefensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass) - { - } - - /// - /// This function allows a script to bypass evasion stat boosts for a move hit. - /// If this is true, the move will handle the evasion stat boosts as if the target has no positive stat boosts. - /// - public virtual void BypassEvasionStatBoosts(IExecutingMove move, IPokemon target, byte hitIndex, ref bool bypass) - { - } - - /// - /// This function allows a script to bypass offensive stat boosts for a move hit. - /// If this is true, the damage will be calculated as if the user has no negative offensive stat boosts. Positive - /// stat boosts will still be applied. - /// - public virtual void BypassOffensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass) - { - } - - /// - /// This function allows a script to change the actual offensive stat values used when calculating damage - /// - public virtual void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, - ImmutableStatisticSet targetStats, Statistic stat, ref uint value) - { - } - - /// - /// This function allows a script to change the actual defensive stat values used when calculating damage. - /// - public virtual void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, - ImmutableStatisticSet targetStats, Statistic stat, ref uint value) - { - } - - /// - /// This function allows a script to change the offensive stat value of an incoming move. - /// - public virtual void ChangeIncomingMoveOffensiveStatValue(IExecutingMove executingMove, IPokemon target, - byte hitNumber, uint defensiveStat, StatisticSet targetStats, Statistic offensive, ref uint offensiveStat) - { - } - - /// - /// This function allows a script to change the defensive stat value of an incoming move. - /// - public virtual void ChangeIncomingMoveDefensiveStatValue(IExecutingMove executingMove, IPokemon target, - byte hitNumber, uint origOffensiveStat, StatisticSet targetStats, Statistic defensive, - ref uint defensiveStat) - { - } - - /// - /// This function allows a script to change the raw modifier we retrieved from the stats of the - /// defender and attacker. The default value is the offensive stat divided by the defensive stat. - /// - public virtual void ChangeDamageStatModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) - { - } - - /// - /// This function allows a script to apply a raw multiplier to the damage done by a move. - /// - public virtual void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) - { - } - - /// - /// This function allows a script to change the damage modifier of an incoming move. - /// - public virtual void ChangeIncomingMoveDamageModifier(IExecutingMove executingMove, IPokemon target, byte hitNumber, - ref float modifier) - { - } - - /// - /// This function allows a script to modify the outgoing damage done by a move. - /// - public virtual void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) - { - } - - /// - /// This function allows a script to modify the incoming damage done by a move. - /// - public virtual void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) - { - } - - /// - /// This function allows a script attached to a Pokemon or its parents to prevent stat boost - /// changes on that Pokemon. - /// - public virtual void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, - ref bool prevent) - { - } - - /// - /// This function allows a script attached to a Pokemon or its parents to modify the amount by - /// which the stat boost will change. If the stat boost is done by the user itself, self - /// inflicted will be true, otherwise it will be false. - /// - public virtual void ChangeStatBoostChange(IPokemon target, Statistic stat, bool selfInflicted, ref sbyte amount) - { - } - - /// - /// This function allows a script to run after a stat boost change has been applied. - /// - public virtual void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change) - { - } - - /// - /// This function allows a script to prevent a secondary effect of a move from being applied. - /// This means the move will still hit and do damage, but not trigger its secondary effect. Note that this - /// function is not called for status moves. - /// - public virtual void PreventSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent) - { - } - - /// - /// This function allows a script attached to a Pokemon or its parents to prevent an incoming - /// secondary effect. This means the move will still hit and do damage, but not trigger its - /// secondary effect. Note that this function is not called for status moves. - /// - public virtual void PreventIncomingSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent) - { - } - - /// - /// This function allows a script attached to a move or its parents to change the chance the - /// secondary effect of a move will trigger. The chance is depicted in percentage here, so - /// changing this to above or equal to 100 will make it always hit, while setting it to equal or - /// below 0 will make it never hit. - /// - public virtual void ChangeEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance) - { - } - - /// - /// This function allows a script attached to a Pokemon or its parents to change the chance the - /// secondary effect of an incoming move will trigger. The chance is depicted in percentage here, - /// so changing this to above or equal to 100 will make it always hit, while setting it to equal - /// or below 0 will make it never hit. - /// - public virtual void ChangeIncomingEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance) - { - } - - /// - /// This function triggers on a move or its parents when all hits on a target are finished. - /// - public virtual void OnAfterHits(IExecutingMove move, IPokemon target) - { - } - /// /// This function prevents the Pokemon it is attached to from being able to switch out. /// @@ -270,17 +104,6 @@ public abstract class Script : IDeepCloneable { } - /// - /// This function id triggered on all scripts active in the battle after all choices have finished - /// running. Note that choices are not active anymore here, so their scripts do not call this - /// function. - /// - /// - /// - public virtual void OnEndTurn(IScriptSource owner, IBattle battle) - { - } - /// /// This function is triggered on a Pokemon and its parents when the given Pokemon takes damage. /// @@ -973,4 +796,261 @@ public interface IScriptChangeBasePower /// This function allows a script to change the effective base power of a move hit. /// void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower); +} + +/// +/// This interface allows scripts to bypass defensive stat boosts for a move hit. +/// +public interface IScriptBypassDefensiveStatBoosts +{ + /// + /// This function allows a script to bypass defensive stat boosts for a move hit. + /// If this is true, the damage will be calculated as if the target has no positive stat boosts. Negative + /// stat boosts will still be applied. + /// + void BypassDefensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass); +} + +/// +/// This interface allows scripts to bypass evasion stat boosts for a move hit. +/// +public interface IScriptBypassEvasionStatBoosts +{ + /// + /// This function allows a script to bypass evasion stat boosts for a move hit. + /// If this is true, the move will handle the evasion stat boosts as if the target has no positive stat boosts. + /// + void BypassEvasionStatBoosts(IExecutingMove move, IPokemon target, byte hitIndex, ref bool bypass); +} + +/// +/// This interface allows scripts to bypass offensive stat boosts for a move hit. +/// +public interface IScriptBypassOffensiveStatBoosts +{ + /// + /// This function allows a script to bypass offensive stat boosts for a move hit. + /// If this is true, the damage will be calculated as if the user has no negative offensive stat boosts. Positive + /// stat boosts will still be applied. + /// + void BypassOffensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass); +} + +/// +/// This interface allows scripts to change the actual offensive stat values used when calculating damage. +/// +public interface IScriptChangeOffensiveStatValue +{ + /// + /// This function allows a script to change the actual offensive stat values used when calculating damage + /// + void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + ImmutableStatisticSet targetStats, Statistic stat, ref uint value); +} + +/// +/// This interface allows scripts to change the actual defensive stat values used when calculating damage. +/// +public interface IScriptChangeDefensiveStatValue +{ + /// + /// This function allows a script to change the actual defensive stat values used when calculating damage. + /// + void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + ImmutableStatisticSet targetStats, Statistic stat, ref uint value); +} + +/// +/// This interface allows scripts to change the offensive stat value of an incoming move. +/// +public interface IScriptChangeIncomingMoveOffensiveStatValue +{ + /// + /// This function allows a script to change the offensive stat value of an incoming move. + /// + void ChangeIncomingMoveOffensiveStatValue(IExecutingMove executingMove, IPokemon target, byte hitNumber, + uint defensiveStat, StatisticSet targetStats, Statistic offensive, ref uint offensiveStat); +} + +/// +/// This interface allows scripts to change the defensive stat value of an incoming move. +/// +public interface IScriptChangeIncomingMoveDefensiveStatValue +{ + /// + /// This function allows a script to change the defensive stat value of an incoming move. + /// + void ChangeIncomingMoveDefensiveStatValue(IExecutingMove executingMove, IPokemon target, byte hitNumber, + uint origOffensiveStat, StatisticSet targetStats, Statistic defensive, ref uint defensiveStat); +} + +/// +/// This interface allows scripts to change the raw modifier retrieved from the stats of the defender and attacker. +/// +public interface IScriptChangeDamageStatModifier +{ + /// + /// This function allows a script to change the raw modifier we retrieved from the stats of the + /// defender and attacker. The default value is the offensive stat divided by the defensive stat. + /// + void ChangeDamageStatModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier); +} + +/// +/// This interface allows scripts to apply a raw multiplier to the damage done by a move. +/// +public interface IScriptChangeDamageModifier +{ + /// + /// This function allows a script to apply a raw multiplier to the damage done by a move. + /// + void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier); +} + +/// +/// This interface allows scripts to change the damage modifier of an incoming move. +/// +public interface IScriptChangeIncomingMoveDamageModifier +{ + /// + /// This function allows a script to change the damage modifier of an incoming move. + /// + void ChangeIncomingMoveDamageModifier(IExecutingMove executingMove, IPokemon target, byte hitNumber, + ref float modifier); +} + +/// +/// This interface allows scripts to modify the outgoing damage done by a move. +/// +public interface IScriptChangeMoveDamage +{ + /// + /// This function allows a script to modify the outgoing damage done by a move. + /// + void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage); +} + +/// +/// This interface allows scripts to modify the incoming damage done by a move. +/// +public interface IScriptChangeIncomingMoveDamage +{ + /// + /// This function allows a script to modify the incoming damage done by a move. + /// + void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage); +} + +/// +/// This interface allows scripts attached to a Pokemon or its parents to prevent stat boost changes. +/// +public interface IScriptPreventStatBoostChange +{ + /// + /// This function allows a script attached to a Pokemon or its parents to prevent stat boost + /// changes on that Pokemon. + /// + void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent); +} + +/// +/// This interface allows scripts attached to a Pokemon or its parents to modify stat boost changes. +/// +public interface IScriptChangeStatBoostChange +{ + /// + /// This function allows a script attached to a Pokemon or its parents to modify the amount by + /// which the stat boost will change. If the stat boost is done by the user itself, self + /// inflicted will be true, otherwise it will be false. + /// + void ChangeStatBoostChange(IPokemon target, Statistic stat, bool selfInflicted, ref sbyte amount); +} + +/// +/// This interface allows scripts to run after a stat boost change has been applied. +/// +public interface IScriptOnAfterStatBoostChange +{ + /// + /// This function allows a script to run after a stat boost change has been applied. + /// + void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change); +} + +/// +/// This interface allows scripts to prevent a secondary effect of a move from being applied. +/// +public interface IScriptPreventSecondaryEffect +{ + /// + /// This function allows a script to prevent a secondary effect of a move from being applied. + /// This means the move will still hit and do damage, but not trigger its secondary effect. Note that this + /// function is not called for status moves. + /// + void PreventSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent); +} + +/// +/// This interface allows scripts attached to a Pokemon or its parents to prevent incoming secondary effects. +/// +public interface IScriptPreventIncomingSecondaryEffect +{ + /// + /// This function allows a script attached to a Pokemon or its parents to prevent an incoming + /// secondary effect. This means the move will still hit and do damage, but not trigger its + /// secondary effect. Note that this function is not called for status moves. + /// + void PreventIncomingSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent); +} + +/// +/// This interface allows scripts attached to a move or its parents to change the chance of secondary effects. +/// +public interface IScriptChangeEffectChance +{ + /// + /// This function allows a script attached to a move or its parents to change the chance the + /// secondary effect of a move will trigger. The chance is depicted in percentage here, so + /// changing this to above or equal to 100 will make it always hit, while setting it to equal or + /// below 0 will make it never hit. + /// + void ChangeEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance); +} + +/// +/// This interface allows scripts attached to a Pokemon or its parents to change the chance of incoming secondary effects. +/// +public interface IScriptChangeIncomingEffectChance +{ + /// + /// This function allows a script attached to a Pokemon or its parents to change the chance the + /// secondary effect of an incoming move will trigger. The chance is depicted in percentage here, + /// so changing this to above or equal to 100 will make it always hit, while setting it to equal + /// or below 0 will make it never hit. + /// + void ChangeIncomingEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance); +} + +/// +/// This interface allows scripts to trigger when all hits on a target are finished. +/// +public interface IScriptOnAfterHits +{ + /// + /// This function triggers on a move or its parents when all hits on a target are finished. + /// + void OnAfterHits(IExecutingMove move, IPokemon target); +} + +/// +/// This interface allows scripts to trigger at the end of each turn. +/// +public interface IScriptOnEndTurn +{ + /// + /// This function id triggered on all scripts active in the battle after all choices have finished + /// running. Note that choices are not active anymore here, so their scripts do not call this + /// function. + /// + void OnEndTurn(IScriptSource owner, IBattle battle); } \ No newline at end of file diff --git a/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs b/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs index 85ff24f..639c77d 100644 --- a/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs +++ b/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs @@ -91,6 +91,36 @@ public static class ScriptExecution } } + /// + /// Executes a hook on all scripts in a source. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void RunScriptHookInterface(this IEnumerable sources, + Action hook) + { + var iterator = sources.Distinct().SelectMany(x => x.GetScripts()).ToArray(); + List? suppressedCategories = null; + foreach (var container in iterator) + { + if (container.IsEmpty) + continue; + var script = container.Script; + if (script is IScriptOnBeforeAnyHookInvoked onBeforeAnyHookInvoked) + onBeforeAnyHookInvoked.OnBeforeAnyHookInvoked(ref suppressedCategories); + } + foreach (var container in iterator) + { + if (container.IsEmpty) + continue; + var script = container.Script; + if (script is not TScriptHook scriptHook) + continue; + if (suppressedCategories != null && suppressedCategories.Contains(script.Category)) + continue; + hook(scriptHook); + } + } + /// /// Executes a hook on all scripts in a list of sources. Note that this does not walk through the parents of the /// sources, but only the sources themselves. @@ -117,6 +147,35 @@ public static class ScriptExecution } } + /// + /// Executes a hook on all scripts in a list of sources. Note that this does not walk through the parents of the + /// sources, but only the sources themselves. + /// + public static void RunScriptHookInterface(this IReadOnlyList> source, + Action hook) + { + List? suppressedCategories = null; + foreach (var container in source.SelectMany(x => x)) + { + if (container.IsEmpty) + continue; + var script = container.Script; + if (script is IScriptOnBeforeAnyHookInvoked onBeforeAnyHookInvoked) + onBeforeAnyHookInvoked.OnBeforeAnyHookInvoked(ref suppressedCategories); + } + foreach (var container in source.SelectMany(x => x)) + { + if (container.IsEmpty) + continue; + var script = container.Script; + if (script is not TScriptHook scriptHook) + continue; + if (suppressedCategories != null && suppressedCategories.Contains(script.Category)) + continue; + hook(scriptHook); + } + } + /// /// Executes a script on an item. /// diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7BattleStatCalculator.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7BattleStatCalculator.cs index 7cac8fa..ffde538 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7BattleStatCalculator.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7BattleStatCalculator.cs @@ -64,7 +64,8 @@ public class Gen7BattleStatCalculator : IBattleStatCalculator return 255; var targetEvasion = target.StatBoost.Evasion; var ignoreEvasion = false; - executingMove.RunScriptHook(x => x.BypassEvasionStatBoosts(executingMove, target, hitIndex, ref ignoreEvasion)); + executingMove.RunScriptHookInterface(x => + x.BypassEvasionStatBoosts(executingMove, target, hitIndex, ref ignoreEvasion)); if (ignoreEvasion) targetEvasion = 0; var userAccuracy = executingMove.User.StatBoost.Accuracy; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs index 1c470b6..892b900 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7DamageCalculator.cs @@ -65,9 +65,9 @@ public class Gen7DamageCalculator(Gen7PluginConfiguration configuration) : IDama if (executingMove is not null) { - executingMove.RunScriptHook(script => + executingMove.RunScriptHookInterface(script => script.ChangeMoveDamage(executingMove, target, hitNumber, ref damage)); - target.RunScriptHook(script => + target.RunScriptHookInterface(script => script.ChangeIncomingMoveDamage(executingMove, target, hitNumber, ref damage)); } @@ -120,14 +120,14 @@ public class Gen7DamageCalculator(Gen7PluginConfiguration configuration) : IDama // move is critical, and the target has a defensive stat boost of > 0, but a script is // allowed to change this. var bypassDefense = hitData.IsCritical && target.StatBoost.GetStatistic(defensive) > 0; - executingMove?.RunScriptHook(script => + executingMove?.RunScriptHookInterface(script => script.BypassDefensiveStatBoosts(executingMove, target, hitNumber, ref bypassDefense)); // Check if we can bypass the offensive stat boost on the user. We default to this if the // move is critical, and the user has an offensive stat boost of < 0, but a script is // allowed to change this. var bypassOffense = hitData.IsCritical && user.StatBoost.GetStatistic(offensive) < 0; - executingMove?.RunScriptHook(script => + executingMove?.RunScriptHookInterface(script => script.BypassOffensiveStatBoosts(executingMove, target, hitNumber, ref bypassOffense)); var userStats = user.BoostedStats; @@ -143,18 +143,22 @@ public class Gen7DamageCalculator(Gen7PluginConfiguration configuration) : IDama if (executingMove != null) { - executingMove.RunScriptHook(script => script.ChangeOffensiveStatValue(executingMove, target, hitNumber, - defensiveStat, targetStats, offensive, ref offensiveStat)); - executingMove.RunScriptHook(script => script.ChangeDefensiveStatValue(executingMove, target, hitNumber, - origOffensiveStat, targetStats, defensive, ref defensiveStat)); - target.RunScriptHook(script => script.ChangeIncomingMoveOffensiveStatValue(executingMove, target, hitNumber, - defensiveStat, targetStats, offensive, ref offensiveStat)); - target.RunScriptHook(script => script.ChangeIncomingMoveDefensiveStatValue(executingMove, target, hitNumber, - origOffensiveStat, targetStats, defensive, ref defensiveStat)); + executingMove.RunScriptHookInterface(script => + script.ChangeOffensiveStatValue(executingMove, target, hitNumber, defensiveStat, targetStats, offensive, + ref offensiveStat)); + executingMove.RunScriptHookInterface(script => + script.ChangeDefensiveStatValue(executingMove, target, hitNumber, origOffensiveStat, targetStats, + defensive, ref defensiveStat)); + target.RunScriptHookInterface(script => + script.ChangeIncomingMoveOffensiveStatValue(executingMove, target, hitNumber, defensiveStat, + targetStats, offensive, ref offensiveStat)); + target.RunScriptHookInterface(script => + script.ChangeIncomingMoveDefensiveStatValue(executingMove, target, hitNumber, origOffensiveStat, + targetStats, defensive, ref defensiveStat)); } var modifier = (float)offensiveStat / defensiveStat; - executingMove?.RunScriptHook(script => + executingMove?.RunScriptHookInterface(script => script.ChangeDamageStatModifier(executingMove, target, hitNumber, ref modifier)); return modifier; @@ -168,9 +172,9 @@ public class Gen7DamageCalculator(Gen7PluginConfiguration configuration) : IDama { var modifier = 1.0f; - executingMove.RunScriptHook(script => + executingMove.RunScriptHookInterface(script => script.ChangeDamageModifier(executingMove, target, hitNumber, ref modifier)); - target.RunScriptHook(script => + target.RunScriptHookInterface(script => script.ChangeIncomingMoveDamageModifier(executingMove, target, hitNumber, ref modifier)); return modifier; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Analytic.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Analytic.cs index d1540f5..a16a937 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Analytic.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Analytic.cs @@ -7,10 +7,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Analytic /// [Script(ScriptCategory.Ability, "analytic")] -public class Analytic : Script +public class Analytic : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.Battle.ChoiceQueue?.HasNext() == false) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/BadDreams.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/BadDreams.cs index 11fe8dc..2b22dab 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/BadDreams.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/BadDreams.cs @@ -7,7 +7,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Bad Dreams /// [Script(ScriptCategory.Ability, "bad_dreams")] -public class BadDreams : Script +public class BadDreams : Script, IScriptOnEndTurn { private IPokemon? _owner; @@ -20,7 +20,7 @@ public class BadDreams : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_owner is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Competitive.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Competitive.cs index c6f6fc0..85c646d 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Competitive.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Competitive.cs @@ -7,11 +7,11 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Competitive /// [Script(ScriptCategory.Ability, "competitive")] -public class Competitive : Script +public class Competitive : Script, IScriptOnAfterStatBoostChange { /// /// - public override void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change) + public void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change) { if (change >= 0) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Contrary.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Contrary.cs index dbdb153..034a2c8 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Contrary.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Contrary.cs @@ -8,10 +8,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Contrary /// [Script(ScriptCategory.Ability, "contrary")] -public class Contrary : Script +public class Contrary : Script, IScriptChangeStatBoostChange { /// - public override void ChangeStatBoostChange(IPokemon target, Statistic stat, bool selfInflicted, ref sbyte amount) + public void ChangeStatBoostChange(IPokemon target, Statistic stat, bool selfInflicted, ref sbyte amount) { // Invert the stat change amount = (sbyte)-amount; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DarkAura.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DarkAura.cs index 82cefb3..c30d949 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DarkAura.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DarkAura.cs @@ -7,10 +7,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Dark Aura /// [Script(ScriptCategory.Ability, "dark_aura")] -public class DarkAura : Script +public class DarkAura : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.GetHitData(target, hit).Type?.Name == "dark") { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defeatist.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defeatist.cs index 82750ae..248978d 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defeatist.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defeatist.cs @@ -7,10 +7,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Defeatist /// [Script(ScriptCategory.Ability, "defeatist")] -public class Defeatist : Script +public class Defeatist : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.User.CurrentHealth < move.User.MaxHealth / 2) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defiant.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defiant.cs index 4d277b1..3477947 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defiant.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defiant.cs @@ -7,11 +7,11 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Defiant /// [Script(ScriptCategory.Ability, "defiant")] -public class Defiant : Script +public class Defiant : Script, IScriptOnAfterStatBoostChange { /// /// - public override void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change) + public void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change) { if (change >= 0) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DrySkin.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DrySkin.cs index cbb0712..ed1fa16 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DrySkin.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DrySkin.cs @@ -8,7 +8,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Dry Skin /// [Script(ScriptCategory.Ability, "dry_skin")] -public class DrySkin : Script +public class DrySkin : Script, IScriptChangeDamageModifier, IScriptOnEndTurn { private IPokemon? _owningPokemon; @@ -23,7 +23,7 @@ public class DrySkin : Script } /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { var hitType = move.GetHitData(target, hit).Type; if (hitType?.Name == "fire") @@ -39,7 +39,7 @@ public class DrySkin : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_owningPokemon == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FairyAura.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FairyAura.cs index d1fb2f0..28646f2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FairyAura.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FairyAura.cs @@ -8,10 +8,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Fairy Aura /// [Script(ScriptCategory.Ability, "fairy_aura")] -public class FairyAura : Script +public class FairyAura : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.GetHitData(target, hit).Type?.Name == "fairy") { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Filter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Filter.cs index 7b57313..ce7c703 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Filter.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Filter.cs @@ -7,11 +7,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Filter /// [Script(ScriptCategory.Ability, "filter")] -public class Filter : Script +public class Filter : Script, IScriptChangeIncomingMoveDamageModifier { /// - public override void ChangeIncomingMoveDamageModifier(IExecutingMove move, IPokemon target, byte hit, - ref float modifier) + public void ChangeIncomingMoveDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.GetHitData(target, hit).Effectiveness >= 2.0f) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlareBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlareBoost.cs index f599e0c..4599c02 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlareBoost.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlareBoost.cs @@ -9,10 +9,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Flare Boost /// [Script(ScriptCategory.Ability, "flare_boost")] -public class FlareBoost : Script +public class FlareBoost : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (!move.User.HasStatus(ScriptUtils.ResolveName())) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Fluffy.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Fluffy.cs index 003ec38..cfb6a44 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Fluffy.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Fluffy.cs @@ -7,10 +7,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Fluffy /// [Script(ScriptCategory.Ability, "fluffy")] -public class Fluffy : Script +public class Fluffy : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.GetHitData(target, hit).Type?.Name == "fire") { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FullMetalBody.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FullMetalBody.cs index 359910b..6055ad6 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FullMetalBody.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FullMetalBody.cs @@ -7,10 +7,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Full Metal Body /// [Script(ScriptCategory.Ability, "full_metal_body")] -public class FullMetalBody : Script +public class FullMetalBody : Script, IScriptPreventStatBoostChange { /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (selfInflicted) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FurCoat.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FurCoat.cs index a6ecba6..d86e8ae 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FurCoat.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FurCoat.cs @@ -9,10 +9,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Fur Coat /// [Script(ScriptCategory.Ability, "fur_coat")] -public class FurCoat : Script +public class FurCoat : Script, IScriptChangeIncomingMoveDamage { /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.UseMove.Category == MoveCategory.Physical) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Galvanize.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Galvanize.cs index cad1b54..4312b56 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Galvanize.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Galvanize.cs @@ -7,7 +7,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Galvanize /// [Script(ScriptCategory.Ability, "galvanize")] -public class Galvanize : Script, IScriptChangeMoveType +public class Galvanize : Script, IScriptChangeMoveType, IScriptChangeDamageModifier { /// public void ChangeMoveType(IExecutingMove move, IPokemon target, byte hit, ref TypeIdentifier? typeIdentifier) @@ -20,7 +20,7 @@ public class Galvanize : Script, IScriptChangeMoveType } /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.GetHitData(target, hit).Type?.Name == "electric") modifier *= 1.2f; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/GrassPelt.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/GrassPelt.cs index 2d72de5..7453944 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/GrassPelt.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/GrassPelt.cs @@ -7,11 +7,11 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Grass Pelt /// [Script(ScriptCategory.Ability, "grass_pelt")] -public class GrassPelt : Script +public class GrassPelt : Script, IScriptChangeIncomingMoveDefensiveStatValue { /// - public override void ChangeIncomingMoveDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, - uint offensiveStat, StatisticSet statisticSet, Statistic stat, ref uint value) + public void ChangeIncomingMoveDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + StatisticSet statisticSet, Statistic stat, ref uint value) { if (move.Battle.TerrainName == ScriptUtils.ResolveName() && stat == Statistic.Defense) value = value.MultiplyOrMax(1.5f); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Guts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Guts.cs index 020dfed..8c1f3e2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Guts.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Guts.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Guts /// [Script(ScriptCategory.Ability, "guts")] -public class Guts : Script +public class Guts : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (target.StatusScript.IsEmpty) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Harvest.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Harvest.cs index e34d3d2..9ff870f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Harvest.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Harvest.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Harvest /// [Script(ScriptCategory.Ability, "harvest")] -public class Harvest : Script +public class Harvest : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class Harvest : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon?.BattleData is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Healer.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Healer.cs index 0132c21..25764b2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Healer.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Healer.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Healer /// [Script(ScriptCategory.Ability, "healer")] -public class Healer : Script +public class Healer : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class Healer : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon?.BattleData is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HugePower.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HugePower.cs index 82c76dc..10cf45a 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HugePower.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HugePower.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Huge Power /// [Script(ScriptCategory.Ability, "huge_power")] -public class HugePower : Script +public class HugePower : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (stat == Statistic.Attack) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hustle.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hustle.cs index c6a7219..11fcb8e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hustle.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hustle.cs @@ -8,10 +8,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Hustle /// [Script(ScriptCategory.Ability, "hustle")] -public class Hustle : Script +public class Hustle : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (stat != Statistic.Attack) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hydration.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hydration.cs index 84b26ba..e734d08 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hydration.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Hydration.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Hydration /// [Script(ScriptCategory.Ability, "hydration")] -public class Hydration : Script +public class Hydration : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class Hydration : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HyperCutter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HyperCutter.cs index e1003b7..0e40f6f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HyperCutter.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/HyperCutter.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Hyper Cutter /// [Script(ScriptCategory.Ability, "hyper_cutter")] -public class HyperCutter : Script +public class HyperCutter : Script, IScriptPreventStatBoostChange { /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (stat != Statistic.Attack) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/IceBody.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/IceBody.cs index 8f8b27c..6c913ba 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/IceBody.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/IceBody.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Ice Body /// [Script(ScriptCategory.Ability, "ice_body")] -public class IceBody : Script +public class IceBody : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class IceBody : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/KeenEye.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/KeenEye.cs index 8c25e9e..4387fe1 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/KeenEye.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/KeenEye.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Keen Eye /// [Script(ScriptCategory.Ability, "keen_eye")] -public class KeenEye : Script +public class KeenEye : Script, IScriptPreventStatBoostChange { /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (stat == Statistic.Accuracy && amount < 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/MarvelScale.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/MarvelScale.cs index 5c0f9de..9063277 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/MarvelScale.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/MarvelScale.cs @@ -6,11 +6,11 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Marvel Scale /// [Script(ScriptCategory.Ability, "marvel_scale")] -public class MarvelScale : Script +public class MarvelScale : Script, IScriptChangeIncomingMoveDefensiveStatValue { /// - public override void ChangeIncomingMoveDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, - uint offensiveStat, StatisticSet statisticSet, Statistic stat, ref uint value) + public void ChangeIncomingMoveDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + StatisticSet statisticSet, Statistic stat, ref uint value) { if (!target.StatusScript.IsEmpty && stat == Statistic.Defense) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Minus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Minus.cs index 5d42f24..520ef61 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Minus.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Minus.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Minus /// [Script(ScriptCategory.Ability, "minus")] -public class Minus : Script +public class Minus : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { var battleData = move.User.BattleData; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Moody.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Moody.cs index 8113e10..dcc2a46 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Moody.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Moody.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Moody /// [Script(ScriptCategory.Ability, "moody")] -public class Moody : Script +public class Moody : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class Moody : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Multiscale.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Multiscale.cs index 7258940..b4124c4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Multiscale.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Multiscale.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Multiscale /// [Script(ScriptCategory.Ability, "multiscale")] -public class Multiscale : Script +public class Multiscale : Script, IScriptChangeIncomingMoveDamage { /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (target.CurrentHealth == target.BoostedStats.Hp) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Plus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Plus.cs index 35af293..fcb784e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Plus.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Plus.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Plus /// [Script(ScriptCategory.Ability, "plus")] -public class Plus : Script +public class Plus : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { var battleData = move.User.BattleData; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerConstruct.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerConstruct.cs index ac48631..bf0500c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerConstruct.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerConstruct.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Power Construct /// [Script(ScriptCategory.Ability, "power_construct")] -public class PowerConstruct : Script +public class PowerConstruct : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class PowerConstruct : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon?.BattleData?.Battle == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs index b3dff39..680684b 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PowerUpTypeAtLowHealth.cs @@ -11,7 +11,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Swarm /// [Script(ScriptCategory.Ability, "power_up_type_at_low_health")] -public class PowerUpTypeAtLowHealth : Script, IScriptOnInitialize +public class PowerUpTypeAtLowHealth : Script, IScriptOnInitialize, IScriptChangeDamageModifier { private StringKey _type; private float _threshold; @@ -35,7 +35,7 @@ public class PowerUpTypeAtLowHealth : Script, IScriptOnInitialize } /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { var currentHealthFraction = move.User.CurrentHealth / (float)move.User.MaxHealth; if (currentHealthFraction <= _threshold && move.GetHitData(target, hit).Type?.Name == _type) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PreventStatLowering.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PreventStatLowering.cs index 5d2a50a..2d3989c 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, IScriptOnInitialize +public class PreventStatLowering : Script, IScriptOnInitialize, IScriptPreventStatBoostChange { /// /// The statistic that this ability prevents from being lowered. @@ -32,7 +32,7 @@ public class PreventStatLowering : Script, IScriptOnInitialize } /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (_statistic is not null && _statistic != stat) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PrismArmor.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PrismArmor.cs index cac72a5..c87bfa4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PrismArmor.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PrismArmor.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Prism Armor /// [Script(ScriptCategory.Ability, "prism_armor")] -public class PrismArmor : Script +public class PrismArmor : Script, IScriptChangeIncomingMoveDamage { /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.GetHitData(target, hit).Effectiveness >= 2) damage = (uint)(damage * 0.75); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PurePower.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PurePower.cs index bd50db2..688cc1e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PurePower.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PurePower.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Pure Power /// [Script(ScriptCategory.Ability, "pure_power")] -public class PurePower : Script +public class PurePower : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (stat == Statistic.Attack) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/RainDish.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/RainDish.cs index f0cb90b..2af11c2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/RainDish.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/RainDish.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Rain Dish /// [Script(ScriptCategory.Ability, "rain_dish")] -public class RainDish : Script +public class RainDish : Script, IScriptOnEndTurn { private IPokemon? _owner; @@ -19,7 +19,7 @@ public class RainDish : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_owner is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Schooling.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Schooling.cs index 0d5c425..b47db02 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Schooling.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Schooling.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Schooling /// [Script(ScriptCategory.Ability, "schooling")] -public class Schooling : Script +public class Schooling : Script, IScriptOnEndTurn { private IPokemon? _owningPokemon; @@ -22,7 +22,7 @@ public class Schooling : Script public override void OnSwitchIn(IPokemon pokemon, byte position) => ChangeFormIfNeeded(pokemon); /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) => ChangeFormIfNeeded(_owningPokemon); + public void OnEndTurn(IScriptSource owner, IBattle battle) => ChangeFormIfNeeded(_owningPokemon); private static void ChangeFormIfNeeded(IPokemon? pokemon) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SereneGrace.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SereneGrace.cs index a87e172..06b62bb 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SereneGrace.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SereneGrace.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Serene Grace /// [Script(ScriptCategory.Ability, "serene_grace")] -public class SereneGrace : Script +public class SereneGrace : Script, IScriptChangeEffectChance { /// - public override void ChangeEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance) + public void ChangeEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance) { chance *= 2; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShadowShield.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShadowShield.cs index ca8f7c3..e4c4392 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShadowShield.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShadowShield.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Shadow Shield /// [Script(ScriptCategory.Ability, "shadow_shield")] -public class ShadowShield : Script, IScriptOnBeforeAnyHookInvoked +public class ShadowShield : Script, IScriptOnBeforeAnyHookInvoked, IScriptChangeIncomingMoveDamage { /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (target.CurrentHealth == target.BoostedStats.Hp) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShedSkin.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShedSkin.cs index b1383fc..b16c759 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShedSkin.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShedSkin.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Shed Skin /// [Script(ScriptCategory.Ability, "shed_skin")] -public class ShedSkin : Script +public class ShedSkin : Script, IScriptOnEndTurn { private IPokemon? _owningPokemon; @@ -19,7 +19,7 @@ public class ShedSkin : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_owningPokemon is null || _owningPokemon.StatusScript.IsEmpty) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SheerForce.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SheerForce.cs index accfc93..b26f3f4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SheerForce.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SheerForce.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Sheer Force /// [Script(ScriptCategory.Ability, "sheer_force")] -public class SheerForce : Script, IScriptChangeBasePower +public class SheerForce : Script, IScriptChangeBasePower, IScriptPreventSecondaryEffect { /// public void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower) @@ -15,7 +15,7 @@ public class SheerForce : Script, IScriptChangeBasePower } /// - public override void PreventSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent) + public void PreventSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent) { prevent = true; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldDust.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldDust.cs index c0321f3..2e5d009 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldDust.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldDust.cs @@ -6,11 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Shield Dust /// [Script(ScriptCategory.Ability, "shield_dust")] -public class ShieldDust : Script +public class ShieldDust : Script, IScriptPreventIncomingSecondaryEffect { /// - public override void PreventIncomingSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, - ref bool prevent) + public void PreventIncomingSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent) { prevent = true; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldsDown.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldsDown.cs index e30f76a..5e47999 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldsDown.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ShieldsDown.cs @@ -6,13 +6,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Shields Down /// [Script(ScriptCategory.Ability, "shields_down")] -public class ShieldsDown : Script +public class ShieldsDown : Script, IScriptOnEndTurn { /// public override void OnSwitchIn(IPokemon pokemon, byte position) => ChangeFormIfNeeded(pokemon); /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) => ChangeFormIfNeeded(owner as IPokemon); + public void OnEndTurn(IScriptSource owner, IBattle battle) => ChangeFormIfNeeded(owner as IPokemon); private static void ChangeFormIfNeeded(IPokemon? pokemon) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Simple.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Simple.cs index 35535f7..00125c4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Simple.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Simple.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Simple /// [Script(ScriptCategory.Ability, "simple")] -public class Simple : Script +public class Simple : Script, IScriptChangeStatBoostChange { /// - public override void ChangeStatBoostChange(IPokemon target, Statistic stat, bool selfInflicted, ref sbyte amount) + public void ChangeStatBoostChange(IPokemon target, Statistic stat, bool selfInflicted, ref sbyte amount) { amount = amount.MultiplyOrMax(2); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolarPower.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolarPower.cs index 14c23aa..6234470 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolarPower.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolarPower.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Solar Power /// [Script(ScriptCategory.Ability, "solar_power")] -public class SolarPower : Script +public class SolarPower : Script, IScriptChangeOffensiveStatValue, IScriptOnEndTurn { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if ((stat == Statistic.SpecialAttack && @@ -21,7 +21,7 @@ public class SolarPower : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (owner is not IPokemon pokemon) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolidRock.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolidRock.cs index f4639cf..42e6279 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolidRock.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SolidRock.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Solid Rock /// [Script(ScriptCategory.Ability, "solid_rock")] -public class SolidRock : Script +public class SolidRock : Script, IScriptChangeIncomingMoveDamage { /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.GetHitData(target, hit).Effectiveness >= 2f) damage = (uint)(damage * 0.75f); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedBoost.cs index 48814cc..c1f4af1 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedBoost.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SpeedBoost.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Speed Boost /// [Script(ScriptCategory.Ability, "speed_boost")] -public class SpeedBoost : Script +public class SpeedBoost : Script, IScriptOnEndTurn { /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (owner is not IPokemon pokemon) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Steelworker.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Steelworker.cs index a175a9f..4fd58bb 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Steelworker.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Steelworker.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Steelworker /// [Script(ScriptCategory.Ability, "steelworker")] -public class Steelworker : Script +public class Steelworker : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (move.GetHitData(target, hit).Type?.Name == "steel") diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs index 735a95b..b202734 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Sturdy /// [Script(ScriptCategory.Ability, "sturdy")] -public class Sturdy : Script +public class Sturdy : Script, IScriptChangeIncomingMoveDamage { /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (damage >= target.MaxHealth && target.CurrentHealth == target.MaxHealth) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ThickFat.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ThickFat.cs index e942fa8..43fe239 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ThickFat.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ThickFat.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Thick Fat /// [Script(ScriptCategory.Ability, "thick_fat")] -public class ThickFat : Script +public class ThickFat : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var type = move.GetHitData(target, hit).Type; if (type is not null && (type.Value.Name == "ice" || type.Value.Name == "fire")) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/TintedLens.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/TintedLens.cs index 5c8e021..5d428ca 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/TintedLens.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/TintedLens.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Tinted Lens /// [Script(ScriptCategory.Ability, "tinted_lens")] -public class TintedLens : Script +public class TintedLens : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.GetHitData(target, hit).Effectiveness < 1.0f) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToughClaws.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToughClaws.cs index 52d6f59..af59809 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToughClaws.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToughClaws.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Tough Claws /// [Script(ScriptCategory.Ability, "tough_claws")] -public class ToughClaws : Script +public class ToughClaws : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.GetHitData(target, hit).IsContact) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToxicBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToxicBoost.cs index e19b33d..7b6e758 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToxicBoost.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ToxicBoost.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Toxic Boost /// [Script(ScriptCategory.Ability, "toxic_boost")] -public class ToxicBoost : Script +public class ToxicBoost : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.User.HasStatus(ScriptUtils.ResolveName()) || move.User.HasStatus(ScriptUtils.ResolveName())) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Unaware.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Unaware.cs index 803fd67..7a002bf 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Unaware.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Unaware.cs @@ -6,17 +6,17 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Unaware /// [Script(ScriptCategory.Ability, "unaware")] -public class Unaware : Script +public class Unaware : Script, IScriptChangeIncomingMoveOffensiveStatValue, IScriptChangeDefensiveStatValue { /// - public override void ChangeIncomingMoveOffensiveStatValue(IExecutingMove executingMove, IPokemon target, - byte hitNumber, uint defensiveStat, StatisticSet targetStats, Statistic offensive, ref uint offensiveStat) + public void ChangeIncomingMoveOffensiveStatValue(IExecutingMove executingMove, IPokemon target, byte hitNumber, + uint defensiveStat, StatisticSet targetStats, Statistic offensive, ref uint offensiveStat) { offensiveStat = executingMove.User.FlatStats.GetStatistic(offensive); } /// - public override void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + public void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { value = target.FlatStats.GetStatistic(stat); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WaterBubble.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WaterBubble.cs index 3fb0e6d..7a932d5 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WaterBubble.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WaterBubble.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Water Bubble /// [Script(ScriptCategory.Ability, "water_bubble")] -public class WaterBubble : Script +public class WaterBubble : Script, IScriptChangeIncomingMoveDamage, IScriptChangeMoveDamage { /// public override void PreventStatusChange(IPokemon pokemon, StringKey status, bool selfInflicted, @@ -17,14 +17,14 @@ public class WaterBubble : Script } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.GetHitData(target, hit).Type?.Name == "fire") damage /= 2; } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.GetHitData(target, hit).Type?.Name == "water") damage *= 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WhiteSmoke.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WhiteSmoke.cs index 62923d0..e11ae5e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WhiteSmoke.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/WhiteSmoke.cs @@ -6,10 +6,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - White Smoke /// [Script(ScriptCategory.Ability, "white_smoke")] -public class WhiteSmoke : Script +public class WhiteSmoke : Script, IScriptPreventStatBoostChange { /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (selfInflicted || amount >= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ZenMode.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ZenMode.cs index c0e085d..0d42eca 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ZenMode.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ZenMode.cs @@ -6,13 +6,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// Bulbapedia - Zen Mode /// [Script(ScriptCategory.Ability, "zen_mode")] -public class ZenMode : Script +public class ZenMode : Script, IScriptOnEndTurn { /// public override void OnSwitchIn(IPokemon pokemon, byte position) => ChangeFormIfNeeded(pokemon); /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) => ChangeFormIfNeeded(owner as IPokemon); + public void OnEndTurn(IScriptSource owner, IBattle battle) => ChangeFormIfNeeded(owner as IPokemon); private static void ChangeFormIfNeeded(IPokemon? pokemon) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FairyLockEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FairyLockEffect.cs index 1ccdc36..605a189 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FairyLockEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FairyLockEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "fairy_lock")] -public class FairyLockEffect : Script +public class FairyLockEffect : Script, IScriptOnEndTurn { private int _turns = 1; @@ -18,7 +18,7 @@ public class FairyLockEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_turns <= 0) RemoveSelf(); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FutureSightEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FutureSightEffect.cs index e724b56..dca8bed 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FutureSightEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/FutureSightEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "future_sight")] -public class FutureSightEffect : Script +public class FutureSightEffect : Script, IScriptOnEndTurn { private int _turnsLeft = 3; private readonly IMoveChoice _moveChoice; @@ -12,7 +12,7 @@ public class FutureSightEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turnsLeft -= 1; if (_turnsLeft <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs index f94dcd8..4778b79 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "gravity")] -public class Gravity : Script, IScriptFailIncomingMove +public class Gravity : Script, IScriptFailIncomingMove, IScriptOnEndTurn { private int _turns = 5; @@ -32,7 +32,7 @@ public class Gravity : Script, IScriptFailIncomingMove } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns > 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs index a99d63e..c510bac 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "magic_room")] -public class MagicRoomEffect : Script, IScriptOnBeforeAnyHookInvoked +public class MagicRoomEffect : Script, IScriptOnBeforeAnyHookInvoked, IScriptOnEndTurn { private int _turnsLeft = 5; @@ -19,7 +19,7 @@ public class MagicRoomEffect : Script, IScriptOnBeforeAnyHookInvoked } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_turnsLeft > 0) _turnsLeft--; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs index a6c1f6b..2c4c8d5 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "mud_sport")] -public class MudSportEffect : Script, IScriptChangeBasePower +public class MudSportEffect : Script, IScriptChangeBasePower, IScriptOnEndTurn { private int _turnsLeft = 5; @@ -15,7 +15,7 @@ public class MudSportEffect : Script, IScriptChangeBasePower } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turnsLeft--; if (_turnsLeft <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/SnatchEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/SnatchEffect.cs index 747bae7..f4f636b 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/SnatchEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/SnatchEffect.cs @@ -4,7 +4,7 @@ using PkmnLib.Dynamic.BattleFlow; namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "snatch_effect")] -public class SnatchEffect : Script, IScriptStopBeforeMove +public class SnatchEffect : Script, IScriptStopBeforeMove, IScriptOnEndTurn { private Queue _snatchers = new(); @@ -53,7 +53,7 @@ public class SnatchEffect : Script, IScriptStopBeforeMove } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/TrickRoomEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/TrickRoomEffect.cs index d1ac73f..4fb36a5 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/TrickRoomEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/TrickRoomEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "trick_room")] -public class TrickRoomEffect : Script, IScriptChangeSpeed +public class TrickRoomEffect : Script, IScriptChangeSpeed, IScriptOnEndTurn { private int _turnsLeft = 5; @@ -12,7 +12,7 @@ public class TrickRoomEffect : Script, IScriptChangeSpeed } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turnsLeft--; if (_turnsLeft <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs index fec7438..391b886 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "uproar_effect")] -public class UproarEffect : Script, IScriptOnBeforeTurnStart, IScriptOnSecondaryEffect +public class UproarEffect : Script, IScriptOnBeforeTurnStart, IScriptOnSecondaryEffect, IScriptOnEndTurn { private IPokemon? _placer; private bool _hasUsedUproar; @@ -37,7 +37,7 @@ public class UproarEffect : Script, IScriptOnBeforeTurnStart, IScriptOnSecondary } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (!_hasUsedUproar) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WaterSportEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WaterSportEffect.cs index c6cb281..d29b653 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WaterSportEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WaterSportEffect.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle; [Script(ScriptCategory.Battle, "water_sport")] -public class WaterSportEffect : Script +public class WaterSportEffect : Script, IScriptChangeMoveDamage { public readonly HashSet Placers = new(); /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.UseMove.MoveType.Name == "fire") { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WonderRoomEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WonderRoomEffect.cs index da91e00..c85d010 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WonderRoomEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/WonderRoomEffect.cs @@ -2,12 +2,12 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Battle; -public class WonderRoomEffect : Script +public class WonderRoomEffect : Script, IScriptChangeDefensiveStatValue, IScriptOnEndTurn { public int TurnsLeft { get; private set; } = 5; /// - public override void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + public void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { value = move.UseMove.Category switch @@ -19,7 +19,7 @@ public class WonderRoomEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { TurnsLeft--; if (TurnsLeft <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChipAway.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChipAway.cs index e4cd7d1..44f5318 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChipAway.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChipAway.cs @@ -1,13 +1,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "chip_away")] -public class ChipAway : Script +public class ChipAway : Script, IScriptBypassDefensiveStatBoosts, IScriptBypassEvasionStatBoosts { /// - public override void BypassDefensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass) => + public void BypassDefensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass) => bypass = true; /// - public override void - BypassEvasionStatBoosts(IExecutingMove move, IPokemon target, byte hitIndex, ref bool bypass) => bypass = true; + public void BypassEvasionStatBoosts(IExecutingMove move, IPokemon target, byte hitIndex, ref bool bypass) => + bypass = true; } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs index fbd1a26..326f10e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Pokemon; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "counter")] -public class Counter : Script, IScriptOnBeforeTurnStart, IScriptChangeTargets +public class Counter : Script, IScriptOnBeforeTurnStart, IScriptChangeTargets, IScriptChangeMoveDamage { /// public void OnBeforeTurnStart(ITurnChoice choice) @@ -25,7 +25,7 @@ public class Counter : Script, IScriptOnBeforeTurnStart, IScriptChangeTargets } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var counterHelper = move.User.Volatile.Get(); if (counterHelper == null || counterHelper.LastHitBy == null || counterHelper.LastHitBy != target) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DarkestLariat.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DarkestLariat.cs index 365fae6..fc35813 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DarkestLariat.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DarkestLariat.cs @@ -1,13 +1,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "darkest_lariat")] -public class DarkestLariat : Script +public class DarkestLariat : Script, IScriptBypassDefensiveStatBoosts, IScriptBypassEvasionStatBoosts { /// - public override void BypassDefensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass) => + public void BypassDefensiveStatBoosts(IExecutingMove move, IPokemon target, byte hit, ref bool bypass) => bypass = true; /// - public override void - BypassEvasionStatBoosts(IExecutingMove move, IPokemon target, byte hitIndex, ref bool bypass) => bypass = true; + public void BypassEvasionStatBoosts(IExecutingMove move, IPokemon target, byte hitIndex, ref bool bypass) => + bypass = true; } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/EchoedVoice.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/EchoedVoice.cs index 4b417d5..269947f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/EchoedVoice.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/EchoedVoice.cs @@ -3,10 +3,10 @@ using PkmnLib.Plugin.Gen7.Scripts.Side; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "echoed_voice")] -public class EchoedVoice : Script, IScriptOnSecondaryEffect +public class EchoedVoice : Script, IScriptOnSecondaryEffect, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { var battleData = move.User.BattleData; if (battleData == null) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Endeavor.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Endeavor.cs index b80e90f..6439f58 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Endeavor.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Endeavor.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "endeavor")] -public class Endeavor : Script +public class Endeavor : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var user = move.User; var userHealth = user.CurrentHealth; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Explosion.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Explosion.cs index d41d44a..fe78547 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Explosion.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Explosion.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "explosion")] -public class Explosion : Script +public class Explosion : Script, IScriptOnAfterHits { /// - public override void OnAfterHits(IExecutingMove move, IPokemon target) + public void OnAfterHits(IExecutingMove move, IPokemon target) { move.User.Damage(move.User.CurrentHealth * 10, DamageSource.Misc); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FalseSwipe.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FalseSwipe.cs index 885e90c..335501d 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FalseSwipe.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FalseSwipe.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "false_swipe")] -public class FalseSwipe : Script +public class FalseSwipe : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (target.CurrentHealth - damage < 1) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs index b214d98..2e7af88 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "fell_stinger")] -public class FellStinger : Script +public class FellStinger : Script, IScriptOnAfterHits { /// - public override void OnAfterHits(IExecutingMove move, IPokemon target) + public void OnAfterHits(IExecutingMove move, IPokemon target) { if (target.IsFainted) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FinalGambit.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FinalGambit.cs index 94d5a15..7f68704 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FinalGambit.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FinalGambit.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "final_gambit")] -public class FinalGambit : Script, IScriptOnSecondaryEffect +public class FinalGambit : Script, IScriptOnSecondaryEffect, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { damage = move.User.CurrentHealth; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs index cffb924..8c40654 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs @@ -3,10 +3,10 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "foul_play")] -public class FoulPlay : Script +public class FoulPlay : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint _, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint _, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { value = move.UseMove.Category == MoveCategory.Physical diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionBolt.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionBolt.cs index 23ad768..e91c39c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionBolt.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionBolt.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "fusion_bolt")] -public class FusionBolt : Script +public class FusionBolt : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { var battleData = target.BattleData; if (battleData == null) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionFlare.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionFlare.cs index c2cbbfd..79cd0d4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionFlare.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FusionFlare.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "fusion_flare")] -public class FusionFlare : Script +public class FusionFlare : Script, IScriptChangeDamageModifier { /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { var battleData = target.BattleData; if (battleData == null) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardianOfAlola.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardianOfAlola.cs index 4e1ab42..4f86fdf 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardianOfAlola.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardianOfAlola.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "guardian_of_alola")] -public class GuardianOfAlola : Script +public class GuardianOfAlola : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var maxHp = target.BoostedStats.Hp; damage = (uint)(maxHp * (3f / 4f)); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs index 1f2e75a..eb5d47d 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "metal_burst")] -public class MetalBurst : Script, IScriptOnBeforeTurnStart +public class MetalBurst : Script, IScriptOnBeforeTurnStart, IScriptChangeMoveDamage { /// public void OnBeforeTurnStart(ITurnChoice choice) @@ -12,7 +12,7 @@ public class MetalBurst : Script, IScriptOnBeforeTurnStart } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var helper = target.Volatile.Get(); @@ -27,7 +27,7 @@ public class MetalBurst : Script, IScriptOnBeforeTurnStart } [Script(ScriptCategory.Pokemon, "metal_burst_helper")] - private class MetalBurstHelper : Script, IScriptOnIncomingHit + private class MetalBurstHelper : Script, IScriptOnIncomingHit, IScriptOnEndTurn { public IPokemon? LastAttacker { get; set; } public uint LastDamage { get; set; } @@ -42,7 +42,7 @@ public class MetalBurst : Script, IScriptOnBeforeTurnStart } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs index 33004ee..1fa430c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "mirror_coat")] -public class MirrorCoat : Script, IScriptOnBeforeTurnStart +public class MirrorCoat : Script, IScriptOnBeforeTurnStart, IScriptChangeMoveDamage { /// public void OnBeforeTurnStart(ITurnChoice choice) @@ -12,7 +12,7 @@ public class MirrorCoat : Script, IScriptOnBeforeTurnStart } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var helper = target.Volatile.Get(); @@ -27,7 +27,7 @@ public class MirrorCoat : Script, IScriptOnBeforeTurnStart } [Script(ScriptCategory.Pokemon, "mirror_coat_helper")] - private class MirrorCoatHelper : Script, IScriptOnIncomingHit + private class MirrorCoatHelper : Script, IScriptOnIncomingHit, IScriptOnEndTurn { public IPokemon? LastAttacker { get; set; } public uint LastDamage { get; set; } @@ -42,7 +42,7 @@ public class MirrorCoat : Script, IScriptOnBeforeTurnStart } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturesMadness.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturesMadness.cs index dd6aa8b..50ba117 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturesMadness.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturesMadness.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "natures_madness")] -public class NaturesMadness : Script +public class NaturesMadness : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var targetMaxHp = target.BoostedStats.Hp; damage = targetMaxHp / 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NightShade.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NightShade.cs index b4660bd..d443e03 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NightShade.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NightShade.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "night_shade")] -public class NightShade : Script +public class NightShade : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { damage = move.User.Level; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs index 9a17ff2..ca0e3b1 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "one_hit_ko")] -public class OneHitKo : Script +public class OneHitKo : Script, IScriptChangeMoveDamage { /// public override void ChangeAccuracy(IExecutingMove executingMove, IPokemon target, byte hitIndex, @@ -17,7 +17,7 @@ public class OneHitKo : Script } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { damage = target.BoostedStats.Hp.MultiplyOrMax(10); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs index 2eca981..f3a1119 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "power_trip")] -public class PowerTrip : Script +public class PowerTrip : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var modifier = 1; foreach (Statistic stat in Enum.GetValues(typeof(Statistic))) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs index 7990b85..ac23f97 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "psyshock")] -public class Psyshock : Script +public class Psyshock : Script, IScriptChangeDefensiveStatValue { /// - public override void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + public void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { value = targetStats.Defense; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs index 1194bac..be3171f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "psywave")] -public class Psywave : Script +public class Psywave : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.User.BattleData == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmellingSalts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmellingSalts.cs index 52e0bb0..e0c6ef3 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmellingSalts.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmellingSalts.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "smelling_salts")] -public class SmellingSalts : Script, IScriptOnSecondaryEffect +public class SmellingSalts : Script, IScriptOnSecondaryEffect, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { // If the target is paralyzed, double the damage if (target.HasStatus(ScriptUtils.ResolveName())) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs index fc3be87..911b5ab 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "static_damage")] -public class StaticDamage : Script, IScriptOnInitialize +public class StaticDamage : Script, IScriptOnInitialize, IScriptChangeMoveDamage { private uint Damage { get; set; } @@ -24,7 +24,7 @@ public class StaticDamage : Script, IScriptOnInitialize } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { damage = Damage; } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SuperFang.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SuperFang.cs index aea1b66..96e345b 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SuperFang.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SuperFang.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "super_fang")] -public class SuperFang : Script +public class SuperFang : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { // Super Fang always does 50% of the target's current HP damage = target.CurrentHealth / 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Venoshock.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Venoshock.cs index 99f1d9e..01b0e32 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Venoshock.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Venoshock.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "venoshock")] -public class Venoshock : Script +public class Venoshock : Script, IScriptChangeMoveDamage { /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (target.HasStatus(ScriptUtils.ResolveName()) || target.HasStatus(ScriptUtils.ResolveName())) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs index 37024e7..9be2667 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "bind")] -public class BindEffect : Script +public class BindEffect : Script, IScriptOnEndTurn { private readonly IPokemon? _owner; private int _turns; @@ -15,7 +15,7 @@ public class BindEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_owner == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs index d3a9ba7..02d9bb9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "charge_bounce")] -public class ChargeBounceEffect : Script, IScriptForceTurnSelection +public class ChargeBounceEffect : Script, IScriptForceTurnSelection, IScriptChangeIncomingMoveDamage { private readonly IPokemon _owner; @@ -27,7 +27,7 @@ public class ChargeBounceEffect : Script, IScriptForceTurnSelection } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (!move.UseMove.HasFlag("effective_against_fly")) damage *= 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeEffect.cs index da15ea1..4720784 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeEffect.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "charge_effect")] -public class ChargeEffect : Script +public class ChargeEffect : Script, IScriptChangeDamageModifier, IScriptOnEndTurn { private bool _turnOfUse = true; /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { var library = target.BattleData?.Battle.Library; if (library == null) @@ -18,7 +18,7 @@ public class ChargeEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_turnOfUse) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeFlyEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeFlyEffect.cs index b3a90ee..75f2992 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeFlyEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeFlyEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "charge_fly")] -public class ChargeFlyEffect : Script, IScriptForceTurnSelection +public class ChargeFlyEffect : Script, IScriptForceTurnSelection, IScriptChangeIncomingMoveDamage { private readonly IPokemon _owner; @@ -27,7 +27,7 @@ public class ChargeFlyEffect : Script, IScriptForceTurnSelection } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (!move.UseMove.HasFlag("effective_against_fly")) damage *= 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeSkyDropEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeSkyDropEffect.cs index a79cba9..25200fd 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeSkyDropEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeSkyDropEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "charge_sky_drop")] -public class ChargeSkyDropEffect : Script, IScriptForceTurnSelection +public class ChargeSkyDropEffect : Script, IScriptForceTurnSelection, IScriptChangeIncomingMoveDamage { private readonly IPokemon _owner; @@ -27,7 +27,7 @@ public class ChargeSkyDropEffect : Script, IScriptForceTurnSelection } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (!move.UseMove.HasFlag("effective_against_fly")) damage *= 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DigEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DigEffect.cs index f847e96..ca58831 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DigEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DigEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "dig")] -public class DigEffect : Script, IScriptForceTurnSelection +public class DigEffect : Script, IScriptForceTurnSelection, IScriptChangeIncomingMoveDamage { private readonly IPokemon _owner; @@ -27,7 +27,7 @@ public class DigEffect : Script, IScriptForceTurnSelection } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (!move.UseMove.HasFlag("effective_against_underground")) damage *= 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs index cd27bc0..e79f31e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "disable")] -public class DisableEffect : Script, IScriptPreventMoveSelection +public class DisableEffect : Script, IScriptPreventMoveSelection, IScriptOnEndTurn { private int _turnsLeft = 4; private readonly StringKey _move; @@ -19,7 +19,7 @@ public class DisableEffect : Script, IScriptPreventMoveSelection } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turnsLeft--; if (_turnsLeft <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DiveEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DiveEffect.cs index 027f8c3..55cc851 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DiveEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DiveEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "dive")] -public class DiveEffect : Script, IScriptForceTurnSelection +public class DiveEffect : Script, IScriptForceTurnSelection, IScriptChangeIncomingMoveDamage { private readonly IPokemon _owner; @@ -27,7 +27,7 @@ public class DiveEffect : Script, IScriptForceTurnSelection } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (!move.UseMove.HasFlag("effective_against_underwater")) damage *= 2; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs index 9dc7fb9..98ab0a0 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "embargo")] -public class EmbargoEffect : Script +public class EmbargoEffect : Script, IScriptOnEndTurn { private int _turns = 5; @@ -18,7 +18,7 @@ public class EmbargoEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns == 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs index 47fe73a..34bafb8 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "encore")] -public class EncoreEffect : Script, IScriptForceTurnSelection +public class EncoreEffect : Script, IScriptForceTurnSelection, IScriptOnEndTurn { private readonly IPokemon _owner; private readonly StringKey _move; @@ -29,7 +29,7 @@ public class EncoreEffect : Script, IScriptForceTurnSelection } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EndureEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EndureEffect.cs index 2a9bff0..44a3deb 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EndureEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EndureEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "endure")] -public class EndureEffect : Script +public class EndureEffect : Script, IScriptOnEndTurn { /// public override void ChangeIncomingDamage(IPokemon pokemon, DamageSource source, ref uint damage) @@ -11,5 +11,5 @@ public class EndureEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) => RemoveSelf(); + public void OnEndTurn(IScriptSource owner, IBattle battle) => RemoveSelf(); } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FireSpinEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FireSpinEffect.cs index cb0053f..a854629 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FireSpinEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FireSpinEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "fire_spin")] -public class FireSpinEffect : Script +public class FireSpinEffect : Script, IScriptOnEndTurn { private readonly IPokemon _owner; @@ -11,7 +11,7 @@ public class FireSpinEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _owner.Damage(_owner.BoostedStats.Hp / 8, DamageSource.Misc); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlashFireEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlashFireEffect.cs index 0db5ee3..9dd1b08 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlashFireEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlashFireEffect.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "flash_fire_effect")] -public class FlashFireEffect : Script +public class FlashFireEffect : Script, IScriptChangeOffensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (move.GetHitData(target, hit).Type?.Name == "fire") diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs index afd5b19..22d3411 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Libraries; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "foresight")] -public class ForesightEffect : Script +public class ForesightEffect : Script, IScriptPreventStatBoostChange { private readonly TypeIdentifier _normalType; private readonly TypeIdentifier _fightingType; @@ -17,7 +17,7 @@ public class ForesightEffect : Script } /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (stat == Statistic.Evasion) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/GhostCurseEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/GhostCurseEffect.cs index 30c727c..6274179 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/GhostCurseEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/GhostCurseEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "ghostcurse")] -public class GhostCurseEffect : Script +public class GhostCurseEffect : Script, IScriptOnEndTurn { private IPokemon _pokemon; @@ -11,7 +11,7 @@ public class GhostCurseEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _pokemon.Damage(_pokemon.CurrentHealth / 4, DamageSource.Misc); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealBlockEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealBlockEffect.cs index f6ae57b..9b6257c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealBlockEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealBlockEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "heal_block")] -public class HealBlockEffect : Script, IScriptPreventMoveSelection, IScriptPreventMove +public class HealBlockEffect : Script, IScriptPreventMoveSelection, IScriptPreventMove, IScriptOnEndTurn { private int _duration; @@ -11,7 +11,7 @@ public class HealBlockEffect : Script, IScriptPreventMoveSelection, IScriptPreve } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _duration--; if (_duration <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs index 17052a0..6118944 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "heal_each_end_of_turn_effect")] -public class HealEachEndOfTurnEffect : Script +public class HealEachEndOfTurnEffect : Script, IScriptOnEndTurn { private readonly float _healPercentage; private readonly IPokemon? _pokemon; @@ -19,7 +19,7 @@ public class HealEachEndOfTurnEffect : Script /// /// /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon is null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs index 6e0394a..ff8b69e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs @@ -1,11 +1,11 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; -public class HelpingHandEffect : Script, IScriptChangeBasePower +public class HelpingHandEffect : Script, IScriptChangeBasePower, IScriptOnEndTurn { /// public void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower) => basePower = basePower.MultiplyOrMax(1.5f); /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) => RemoveSelf(); + public void OnEndTurn(IScriptSource owner, IBattle battle) => RemoveSelf(); } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs index 73490e2..b74629b 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "ice_ball")] -public class IceBallEffect : Script, IScriptForceTurnSelection, IScriptOnMoveMiss +public class IceBallEffect : Script, IScriptForceTurnSelection, IScriptOnMoveMiss, IScriptOnEndTurn { private readonly IPokemon _owner; private readonly StringKey _moveName; @@ -30,7 +30,7 @@ public class IceBallEffect : Script, IScriptForceTurnSelection, IScriptOnMoveMis } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (TurnCount < 5) TurnCount++; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/InfestationEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/InfestationEffect.cs index 2c1a032..1dbd322 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/InfestationEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/InfestationEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "infestation")] -public class InfestationEffect : Script +public class InfestationEffect : Script, IScriptOnEndTurn { private readonly IPokemon _owner; private int _turns; @@ -19,7 +19,7 @@ public class InfestationEffect : Script public override void PreventSelfRunAway(IFleeChoice choice, ref bool prevent) => prevent = true; /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { var damage = _owner.BoostedStats.Hp / 8; _owner.Damage(damage, DamageSource.Misc); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs index 7585dc9..68b3da4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "ingrain")] -public class IngrainEffect : Script, IScriptFailIncomingMove +public class IngrainEffect : Script, IScriptFailIncomingMove, IScriptOnEndTurn { private readonly IPokemon _owner; @@ -17,7 +17,7 @@ public class IngrainEffect : Script, IScriptFailIncomingMove public override void PreventSelfRunAway(IFleeChoice choice, ref bool prevent) => prevent = true; /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { var heal = _owner.BoostedStats.Hp / 16; _owner.Heal(heal); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LeechSeedEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LeechSeedEffect.cs index c5ac6ff..0623331 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LeechSeedEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LeechSeedEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "leech_seed")] -public class LeechSeedEffect : Script +public class LeechSeedEffect : Script, IScriptOnEndTurn { private readonly IPokemon _owner; private readonly IPokemon _placer; @@ -13,7 +13,7 @@ public class LeechSeedEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { var damage = _owner.BoostedStats.Hp / 8; if (_owner.CurrentHealth <= damage) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs index 15117b8..e2a55e3 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "lock_on")] -public class LockOnEffect : Script +public class LockOnEffect : Script, IScriptOnEndTurn { private readonly IPokemon _placer; @@ -20,7 +20,7 @@ public class LockOnEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs index 4a87325..7bba1ed 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs @@ -1,6 +1,6 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; -public class LuckyChantEffect : Script, IScriptBlockCriticalHit +public class LuckyChantEffect : Script, IScriptBlockCriticalHit, IScriptOnEndTurn { private int _turnsLeft = 5; @@ -11,7 +11,7 @@ public class LuckyChantEffect : Script, IScriptBlockCriticalHit } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turnsLeft--; if (_turnsLeft > 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagmaStormEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagmaStormEffect.cs index 360ff40..7442446 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagmaStormEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagmaStormEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "magma_storm")] -public class MagmaStormEffect : Script +public class MagmaStormEffect : Script, IScriptOnEndTurn { private readonly IPokemon _owner; @@ -11,7 +11,7 @@ public class MagmaStormEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _owner.Damage(_owner.BoostedStats.Hp / 16, DamageSource.Misc); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagnetRiseEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagnetRiseEffect.cs index 15109f0..1490dca 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagnetRiseEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MagnetRiseEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "magnet_rise")] -public class MagnetRiseEffect : Script, IScriptChangeEffectiveness +public class MagnetRiseEffect : Script, IScriptChangeEffectiveness, IScriptOnEndTurn { private int _turnsRemaining = 5; @@ -15,7 +15,7 @@ public class MagnetRiseEffect : Script, IScriptChangeEffectiveness } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_turnsRemaining > 0) _turnsRemaining--; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs index a41fd01..e36ea25 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "miracle_eye")] -public class MiracleEyeEffect : Script +public class MiracleEyeEffect : Script, IScriptPreventStatBoostChange { /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (stat == Statistic.Evasion && amount > 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/NightmareEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/NightmareEffect.cs index ede542a..91efe2b 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/NightmareEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/NightmareEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Status; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "nightmare")] -public class NightmareEffect : Script +public class NightmareEffect : Script, IScriptOnEndTurn { private readonly IPokemon _owner; @@ -13,7 +13,7 @@ public class NightmareEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (!_owner.HasStatus(ScriptUtils.ResolveName())) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs index cabcbe3..e8bb6aa 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs @@ -2,7 +2,7 @@ using PkmnLib.Plugin.Gen7.Scripts.Utils; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; -public abstract class OutrageLikeEffect : Script, IScriptForceTurnSelection +public abstract class OutrageLikeEffect : Script, IScriptForceTurnSelection, IScriptOnAfterHits { private readonly IPokemon _owner; private int _turns; @@ -26,7 +26,7 @@ public abstract class OutrageLikeEffect : Script, IScriptForceTurnSelection } /// - public override void OnAfterHits(IExecutingMove move, IPokemon target) + public void OnAfterHits(IExecutingMove move, IPokemon target) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PerishSongEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PerishSongEffect.cs index 6a5b639..e5731ae 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PerishSongEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PerishSongEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "perish_song")] -public class PerishSongEffect : Script +public class PerishSongEffect : Script, IScriptOnEndTurn { private int _turns; private IPokemon _owner; @@ -13,7 +13,7 @@ public class PerishSongEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs index a369ba6..c0799a4 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs @@ -1,17 +1,17 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "power_trick")] -public class PowerTrickEffect : Script +public class PowerTrickEffect : Script, IScriptChangeOffensiveStatValue, IScriptChangeDefensiveStatValue { /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { value = defensiveStat; } /// - public override void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + public void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { value = offensiveStat; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs index 8963b51..7e3d3e1 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs @@ -5,7 +5,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; /// or protect-like moves. /// [Script(ScriptCategory.Pokemon, "protection_failure")] -public class ProtectionFailureScript : Script, IScriptOnBeforeTurnStart +public class ProtectionFailureScript : Script, IScriptOnBeforeTurnStart, IScriptOnEndTurn { public int ProtectTurns { get; set; } public bool UsedProtect { get; set; } @@ -17,7 +17,7 @@ public class ProtectionFailureScript : Script, IScriptOnBeforeTurnStart } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (!UsedProtect) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs index 6e5b44d..f6bc299 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "rage")] -public class RageEffect : Script, IScriptOnIncomingHit +public class RageEffect : Script, IScriptOnIncomingHit, IScriptOnEndTurn { /// public void OnIncomingHit(IExecutingMove move, IPokemon target, byte hit) @@ -10,7 +10,7 @@ public class RageEffect : Script, IScriptOnIncomingHit } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs index 54df028..14d5d67 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "roost_effect")] -public class RoostEffect : Script +public class RoostEffect : Script, IScriptOnEndTurn { /// public override void ChangeTypesForIncomingMove(IExecutingMove executingMove, IPokemon target, byte hitIndex, @@ -11,5 +11,5 @@ public class RoostEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) => RemoveSelf(); + public void OnEndTurn(IScriptSource owner, IBattle battle) => RemoveSelf(); } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SlowStartEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SlowStartEffect.cs index ed3e0fe..18b4e5f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SlowStartEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SlowStartEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "slow_start")] -public class SlowStartEffect : Script, IScriptChangeSpeed +public class SlowStartEffect : Script, IScriptChangeSpeed, IScriptChangeOffensiveStatValue, IScriptOnEndTurn { private int _turnsRemaining = 5; @@ -12,7 +12,7 @@ public class SlowStartEffect : Script, IScriptChangeSpeed } /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (stat == Statistic.Attack) @@ -20,7 +20,7 @@ public class SlowStartEffect : Script, IScriptChangeSpeed } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_turnsRemaining <= 0) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/TauntEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/TauntEffect.cs index 0dab399..0f5a120 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/TauntEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/TauntEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "taunt")] -public class TauntEffect(int turns) : Script, IScriptPreventMoveSelection, IScriptFailMove +public class TauntEffect(int turns) : Script, IScriptPreventMoveSelection, IScriptFailMove, IScriptOnEndTurn { private int _turns = turns; @@ -25,7 +25,7 @@ public class TauntEffect(int turns) : Script, IScriptPreventMoveSelection, IScri } } - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThroatChopEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThroatChopEffect.cs index 45a484a..b4d7fc9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThroatChopEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThroatChopEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "throat_chop")] -public class ThroatChopEffect : Script, IScriptPreventMoveSelection, IScriptFailMove +public class ThroatChopEffect : Script, IScriptPreventMoveSelection, IScriptFailMove, IScriptOnEndTurn { private int _turns = 3; @@ -20,7 +20,7 @@ public class ThroatChopEffect : Script, IScriptPreventMoveSelection, IScriptFail } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WhirlpoolEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WhirlpoolEffect.cs index 353bb41..18e42d2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WhirlpoolEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WhirlpoolEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "whirlpool")] -public class WhirlpoolEffect : Script +public class WhirlpoolEffect : Script, IScriptOnEndTurn { public record PokemonTurn { @@ -56,7 +56,7 @@ public class WhirlpoolEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_user == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WishEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WishEffect.cs index b212ddc..219c5ca 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WishEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/WishEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "wish")] -public class WishEffect : Script +public class WishEffect : Script, IScriptOnEndTurn { private IPokemon? _pokemon; private bool _hasDoneFirstTurn; @@ -17,7 +17,7 @@ public class WishEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs index 7144bce..824d5af 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "yawn")] -public class YawnEffect : Script +public class YawnEffect : Script, IScriptOnEndTurn { private bool _hasDoneFirstTurn; /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (owner is not IPokemon pokemon) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AromaVeilEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AromaVeilEffect.cs index f2733c4..ca12461 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AromaVeilEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AromaVeilEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "aroma_veil")] -public class AromaVeilEffect : Script, IScriptFailIncomingMove +public class AromaVeilEffect : Script, IScriptFailIncomingMove, IScriptPreventIncomingSecondaryEffect { private HashSet _placers = new(); @@ -24,8 +24,7 @@ public class AromaVeilEffect : Script, IScriptFailIncomingMove } /// - public override void PreventIncomingSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, - ref bool prevent) + public void PreventIncomingSecondaryEffect(IExecutingMove move, IPokemon target, byte hit, ref bool prevent) { if (move.UseMove.HasFlag("mental")) prevent = true; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs index d8ae0dd..d5b3f99 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs @@ -21,7 +21,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; /// If a Light Clay is held when Aurora Veil is used, it will extend the duration of Aurora Veil from 5 to 8 turns. /// [Script(ScriptCategory.Side, "aurora_veil")] -public class AuroraVeilEffect : Script +public class AuroraVeilEffect : Script, IScriptChangeIncomingMoveDamage, IScriptOnEndTurn { public int NumberOfTurns { get; set; } @@ -37,7 +37,7 @@ public class AuroraVeilEffect : Script /// /// /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (NumberOfTurns > 0) NumberOfTurns--; @@ -46,7 +46,7 @@ public class AuroraVeilEffect : Script } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var hitData = move.GetHitData(target, hit); if (hitData.IsCritical) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/BatteryAbilityEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/BatteryAbilityEffect.cs index e098431..bdf5d07 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/BatteryAbilityEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/BatteryAbilityEffect.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "battery")] -public class BatteryAbilityEffect : Script +public class BatteryAbilityEffect : Script, IScriptChangeDamageModifier { private HashSet _placers = new(); @@ -17,7 +17,7 @@ public class BatteryAbilityEffect : Script } /// - public override void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) + public void ChangeDamageModifier(IExecutingMove move, IPokemon target, byte hit, ref float modifier) { if (move.UseMove.Category == MoveCategory.Special) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs index 85a3a93..922dc03 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "doom_desire_effect")] -public class DoomDesireEffect : Script +public class DoomDesireEffect : Script, IScriptOnEndTurn { private class Target { @@ -36,7 +36,7 @@ public class DoomDesireEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_side == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs index fe9f1d6..bd7e46d 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs @@ -1,14 +1,14 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "double_power_if_target_damaged_in_turn_data")] -public class DoublePowerIfTargetDamagedInTurnData : Script +public class DoublePowerIfTargetDamagedInTurnData : Script, IScriptOnEndTurn { public readonly HashSet HitPokemon = []; /// /// /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/EchoedVoiceData.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/EchoedVoiceData.cs index c1b6dfe..bdad904 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/EchoedVoiceData.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/EchoedVoiceData.cs @@ -4,10 +4,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; /// Just here to indicate that a Pokemon on this side has used Echoed Voice. /// [Script(ScriptCategory.Side, "echoed_voice_data")] -public class EchoedVoiceData : Script +public class EchoedVoiceData : Script, IScriptOnEndTurn { /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerGiftEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerGiftEffect.cs index 3d38986..e3ffaa0 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerGiftEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerGiftEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "flower_gift")] -public class FlowerGiftEffect : Script +public class FlowerGiftEffect : Script, IScriptChangeOffensiveStatValue { private readonly HashSet _placerPokemon = []; @@ -20,7 +20,7 @@ public class FlowerGiftEffect : Script } /// - public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + public void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (move.Battle.WeatherName != ScriptUtils.ResolveName()) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerVeilEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerVeilEffect.cs index 0d0159c..f0f833e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerVeilEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FlowerVeilEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "flower_veil")] -public class FlowerVeilEffect : Script +public class FlowerVeilEffect : Script, IScriptPreventStatBoostChange { private readonly HashSet _placerPokemon = []; @@ -20,7 +20,7 @@ public class FlowerVeilEffect : Script } /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (selfInflicted) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FriendGuardEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FriendGuardEffect.cs index 21fd770..40e6afd 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FriendGuardEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/FriendGuardEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "friend_guard")] -public class FriendGuardEffect : Script +public class FriendGuardEffect : Script, IScriptChangeIncomingMoveDamage { private readonly HashSet _placerPokemon = []; @@ -20,7 +20,7 @@ public class FriendGuardEffect : Script } /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var modifier = Math.Pow(0.75f, _placerPokemon.Count); damage = (uint)(damage * modifier); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs index aa41388..34b945c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs @@ -3,12 +3,12 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "light_screen")] -public class LightScreenEffect(int turns) : Script +public class LightScreenEffect(int turns) : Script, IScriptChangeIncomingMoveDamage, IScriptOnEndTurn { private int _turns = turns; /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.UseMove.Category != MoveCategory.Special || // Critical hits are not affected by the barrier @@ -23,7 +23,7 @@ public class LightScreenEffect(int turns) : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns -= 1; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MatBlockEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MatBlockEffect.cs index ddf8524..ba5022f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MatBlockEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MatBlockEffect.cs @@ -2,7 +2,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Side; -public class MatBlockEffect : Script +public class MatBlockEffect : Script, IScriptOnEndTurn { /// public override void BlockIncomingHit(IExecutingMove executingMove, IPokemon target, byte hitIndex, ref bool block) @@ -12,7 +12,7 @@ public class MatBlockEffect : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs index 99cd1b5..e5ebee2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "mist")] -public class MistEffect : Script +public class MistEffect : Script, IScriptPreventStatBoostChange { /// - public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, + public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted, ref bool prevent) { if (amount < 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/QuickGuardEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/QuickGuardEffect.cs index 07cf0df..90fe118 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/QuickGuardEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/QuickGuardEffect.cs @@ -1,6 +1,6 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; -public class QuickGuardEffect : Script, IScriptIsInvulnerableToMove +public class QuickGuardEffect : Script, IScriptIsInvulnerableToMove, IScriptOnEndTurn { /// /// @@ -11,7 +11,7 @@ public class QuickGuardEffect : Script, IScriptIsInvulnerableToMove } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RagePowderEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RagePowderEffect.cs index a927d34..7abfd6e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RagePowderEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RagePowderEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "rage_powder")] -public class RagePowderEffect : Script, IScriptChangeIncomingTargets +public class RagePowderEffect : Script, IScriptChangeIncomingTargets, IScriptOnEndTurn { public IPokemon User { get; set; } @@ -21,7 +21,7 @@ public class RagePowderEffect : Script, IScriptChangeIncomingTargets } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RainbowEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RainbowEffect.cs index 9854b8a..9bdb76e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RainbowEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/RainbowEffect.cs @@ -1,18 +1,18 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "rainbow_effect")] -public class RainbowEffect : Script +public class RainbowEffect : Script, IScriptChangeEffectChance, IScriptOnEndTurn { private int _turns = 5; /// - public override void ChangeEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance) + public void ChangeEffectChance(IExecutingMove move, IPokemon target, byte hit, ref float chance) { chance *= 2; } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs index c1eb923..3fc3611 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs @@ -3,12 +3,12 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "reflect")] -public class ReflectEffect(int turns) : Script +public class ReflectEffect(int turns) : Script, IScriptChangeIncomingMoveDamage, IScriptOnEndTurn { private int _turns = turns; /// - public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { var hitData = move.GetHitData(target, hit); if (move.UseMove.Category != MoveCategory.Physical) @@ -27,7 +27,7 @@ public class ReflectEffect(int turns) : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_turns > 0) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SeaOfFireEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SeaOfFireEffect.cs index 7ad8fc6..aaaf884 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SeaOfFireEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SeaOfFireEffect.cs @@ -1,12 +1,12 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "sea_of_fire_effect")] -public class SeaOfFireEffect : Script +public class SeaOfFireEffect : Script, IScriptOnEndTurn { private int _turns = 5; /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (owner is not IBattleSide side) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs index ce6d132..5e8af0c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs @@ -2,7 +2,7 @@ using PkmnLib.Dynamic.BattleFlow; namespace PkmnLib.Plugin.Gen7.Scripts.Side; -public class SpotlightEffect : Script, IScriptChangeIncomingTargets +public class SpotlightEffect : Script, IScriptChangeIncomingTargets, IScriptOnEndTurn { private readonly byte _position; private readonly IBattleSide _side; @@ -25,7 +25,7 @@ public class SpotlightEffect : Script, IScriptChangeIncomingTargets } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SwampEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SwampEffect.cs index 12835fe..de96430 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SwampEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SwampEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "swamp_effect")] -public class SwampEffect : Script, IScriptChangeSpeed +public class SwampEffect : Script, IScriptChangeSpeed, IScriptOnEndTurn { private int _turns = 5; @@ -12,7 +12,7 @@ public class SwampEffect : Script, IScriptChangeSpeed } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _turns--; if (_turns <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TailwindEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TailwindEffect.cs index 9da6aa4..73bfa72 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TailwindEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TailwindEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "tailwind")] -public class TailwindEffect : Script, IScriptChangeSpeed +public class TailwindEffect : Script, IScriptChangeSpeed, IScriptOnEndTurn { private int _duration = 3; @@ -12,7 +12,7 @@ public class TailwindEffect : Script, IScriptChangeSpeed } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _duration--; if (_duration <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TeravoltEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TeravoltEffect.cs index dc982d7..84e09a3 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TeravoltEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/TeravoltEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "teravolt")] -public class TeravoltEffect : Script, IScriptOnBeforeAnyHookInvoked +public class TeravoltEffect : Script, IScriptOnBeforeAnyHookInvoked, IScriptOnEndTurn { /// public void OnBeforeAnyHookInvoked(ref List? suppressedCategories) @@ -11,7 +11,7 @@ public class TeravoltEffect : Script, IScriptOnBeforeAnyHookInvoked } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/WideGuardEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/WideGuardEffect.cs index a1c01cc..4c71911 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/WideGuardEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/WideGuardEffect.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "wide_guard")] -public class WideGuardEffect : Script, IScriptChangeTargets +public class WideGuardEffect : Script, IScriptChangeTargets, IScriptOnEndTurn { private IBattleSide? _side; @@ -31,7 +31,7 @@ public class WideGuardEffect : Script, IScriptChangeTargets } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { RemoveSelf(); } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/BadlyPoisoned.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/BadlyPoisoned.cs index ea308c7..f89688d 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/BadlyPoisoned.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/BadlyPoisoned.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Status; [Script(ScriptCategory.Status, "badly_poisoned")] -public class BadlyPoisoned : Poisoned +public class BadlyPoisoned : Poisoned, IScriptOnEndTurn { private int _turns = 1; @@ -9,7 +9,7 @@ public class BadlyPoisoned : Poisoned public override float GetPoisonMultiplier() => 1f / (16f * _turns); /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { base.OnEndTurn(owner, battle); _turns = Math.Min(_turns + 1, 15); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs index bf2622b..b0b20ae 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs @@ -3,7 +3,7 @@ using PkmnLib.Static.Moves; namespace PkmnLib.Plugin.Gen7.Scripts.Status; [Script(ScriptCategory.Status, "burned")] -public class Burned : Script +public class Burned : Script, IScriptChangeMoveDamage, IScriptOnEndTurn { private IPokemon? _target; @@ -16,7 +16,7 @@ public class Burned : Script } /// - public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + public void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) { if (move.UseMove.Category == MoveCategory.Physical) { @@ -25,7 +25,7 @@ public class Burned : Script } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_target == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs index dae139d..2f20631 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Status; [Script(ScriptCategory.Status, "frozen")] -public class Frozen : Script, IScriptPreventMove +public class Frozen : Script, IScriptPreventMove, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -28,7 +28,7 @@ public class Frozen : Script, IScriptPreventMove } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs index 7ccd0ee..b19c919 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Status; [Script(ScriptCategory.Status, "poisoned")] -public class Poisoned : Script +public class Poisoned : Script, IScriptOnEndTurn { private IPokemon? _pokemon; @@ -16,7 +16,7 @@ public class Poisoned : Script public virtual float GetPoisonMultiplier() => 1f / 8f; /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (_pokemon == null) return; diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Terrain/GrassyTerrain.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Terrain/GrassyTerrain.cs index d0013d6..578ee42 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Terrain/GrassyTerrain.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Terrain/GrassyTerrain.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Terrain; [Script(ScriptCategory.Terrain, "grassy_terrain")] -public class GrassyTerrain : Script, IScriptChangeBasePower +public class GrassyTerrain : Script, IScriptChangeBasePower, IScriptOnEndTurn { private static bool IsAffectedByTerrain(IPokemon pokemon) => !pokemon.IsFloating; @@ -33,7 +33,7 @@ public class GrassyTerrain : Script, IScriptChangeBasePower } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { // At the end of each turn, Grassy Terrain restores 1/16 of the maximum HP of each affected Pokémon. foreach (var pokemon in battle.Sides.SelectMany(x => x.Pokemon).WhereNotNull()) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/DesolateLands.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/DesolateLands.cs index 7dcc200..7ece495 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/DesolateLands.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/DesolateLands.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather; [Script(ScriptCategory.Weather, "desolate_lands")] -public class DesolateLands : HarshSunlight, IScriptFailMove +public class DesolateLands : HarshSunlight, IScriptFailMove, IScriptOnEndTurn { private readonly HashSet _placers = []; @@ -35,7 +35,7 @@ public class DesolateLands : HarshSunlight, IScriptFailMove } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { // We don't want to call base.OnEndTurn here, as we want to prevent the weather from ending } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs index 7b22ee0..1b3c428 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather; [Script(ScriptCategory.Weather, "hail")] -public class Hail : Script, ILimitedTurnsScript +public class Hail : Script, ILimitedTurnsScript, IScriptOnEndTurn { private int? _duration; @@ -15,7 +15,7 @@ public class Hail : Script, ILimitedTurnsScript } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { if (!battle.Library.StaticLibrary.Types.TryGetTypeIdentifier("ice", out var iceType)) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/HarshSunlight.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/HarshSunlight.cs index 7e894e8..dbb2766 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/HarshSunlight.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/HarshSunlight.cs @@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather; /// Bulbapedia - Harsh Sunlight /// [Script(ScriptCategory.Weather, "harsh_sunlight")] -public class HarshSunlight : Script, ILimitedTurnsScript, IScriptChangeBasePower +public class HarshSunlight : Script, ILimitedTurnsScript, IScriptChangeBasePower, IScriptOnEndTurn { private int? _duration; @@ -20,7 +20,7 @@ public class HarshSunlight : Script, ILimitedTurnsScript, IScriptChangeBasePower } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _duration--; if (_duration <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/PrimordialSea.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/PrimordialSea.cs index c95d399..0f07eb5 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/PrimordialSea.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/PrimordialSea.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather; [Script(ScriptCategory.Weather, "primordial_sea")] -public class PrimordialSea : Rain, IScriptFailMove +public class PrimordialSea : Rain, IScriptFailMove, IScriptOnEndTurn { private HashSet _placers = new(); @@ -34,7 +34,7 @@ public class PrimordialSea : Rain, IScriptFailMove } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { // We don't want to call base.OnEndTurn here, as we want to prevent the weather from ending } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Rain.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Rain.cs index 2fd57c2..a8ff06c 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Rain.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Rain.cs @@ -1,7 +1,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather; [Script(ScriptCategory.Weather, "rain")] -public class Rain : Script, ILimitedTurnsScript, IScriptChangeBasePower +public class Rain : Script, ILimitedTurnsScript, IScriptChangeBasePower, IScriptOnEndTurn { private int? _duration; @@ -15,7 +15,7 @@ public class Rain : Script, ILimitedTurnsScript, IScriptChangeBasePower } /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { _duration--; if (_duration <= 0) diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Sandstorm.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Sandstorm.cs index 0a2d52a..e6212d2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Sandstorm.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Sandstorm.cs @@ -1,10 +1,10 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather; [Script(ScriptCategory.Weather, "sandstorm")] -public class Sandstorm : Script, IScriptChangeBasePower +public class Sandstorm : Script, IScriptChangeBasePower, IScriptChangeDefensiveStatValue, IScriptOnEndTurn { /// - public override void OnEndTurn(IScriptSource owner, IBattle battle) + public void OnEndTurn(IScriptSource owner, IBattle battle) { foreach (var pokemon in battle.Sides.SelectMany(x => x.Pokemon).WhereNotNull()) { @@ -25,7 +25,7 @@ public class Sandstorm : Script, IScriptChangeBasePower } /// - public override void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, + public void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat, ImmutableStatisticSet targetStats, Statistic stat, ref uint value) { if (stat == Statistic.SpecialDefense && target.Types.Any(x => x.Name == "rock"))