From 0669f15a982dea768bbe1c05480d0ce6f6ab3f33 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 1 Feb 2025 15:26:57 +0100 Subject: [PATCH] Fixes several moves --- .../ScriptHandling/Registry/ScriptRegistry.cs | 2 +- PkmnLib.Tests/Data/Moves.json | 6 ++-- PkmnLib.Tests/DataTests/MoveDataTests.cs | 30 +++++++++++++++++++ .../Scripts/Moves/AllySwitch.cs | 7 +++++ .../Scripts/Moves/Belch.cs | 1 + .../Scripts/Moves/ChangeAllTargetStats.cs | 2 +- .../Scripts/Moves/ChangeTargetStats.cs | 2 +- .../Scripts/Moves/ChangeUserStats.cs | 2 +- .../Scripts/Pokemon/BindEffect.cs | 4 --- .../Scripts/Side/DoomDesireEffect.cs | 5 +++- 10 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 PkmnLib.Tests/DataTests/MoveDataTests.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AllySwitch.cs diff --git a/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs b/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs index bce904b..fb4737f 100644 --- a/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs +++ b/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs @@ -58,7 +58,7 @@ public class ScriptRegistry var constructor = type.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null); if (constructor == null) - throw new ArgumentException($"Type {type} does not have a parameterless constructor."); + return; // We create a lambda that creates a new instance of the script type. // This is more performant than using Activator.CreateInstance. diff --git a/PkmnLib.Tests/Data/Moves.json b/PkmnLib.Tests/Data/Moves.json index dbe9473..3254c94 100755 --- a/PkmnLib.Tests/Data/Moves.json +++ b/PkmnLib.Tests/Data/Moves.json @@ -307,7 +307,7 @@ "category": "status", "flags": [], "effect": { - "name": "SwapWithTarget" + "name": "ally_switch" } }, { @@ -644,7 +644,7 @@ "mirror" ], "effect": { - "name": "double_power_user_damaged_by_target_in_turn" + "name": "double_power_if_target_damaged_in_turn" } }, { @@ -2371,7 +2371,7 @@ "mirror" ], "effect": { - "name": "raise_user_defense", + "name": "change_user_defense", "chance": 50, "parameters": { "amount": 2 diff --git a/PkmnLib.Tests/DataTests/MoveDataTests.cs b/PkmnLib.Tests/DataTests/MoveDataTests.cs new file mode 100644 index 0000000..feb5ab2 --- /dev/null +++ b/PkmnLib.Tests/DataTests/MoveDataTests.cs @@ -0,0 +1,30 @@ +using PkmnLib.Dynamic.ScriptHandling; +using PkmnLib.Tests.Integration; + +namespace PkmnLib.Tests.DataTests; + +public class MoveDataTests +{ + [Test] + public async Task AllMoveEffectsHaveValidScripts() + { + var library = LibraryHelpers.LoadLibrary(); + var moveLibrary = library.StaticLibrary.Moves; + foreach (var move in moveLibrary) + { + if (move.SecondaryEffect == null) + continue; + var scriptName = move.SecondaryEffect.Name; + + try + { + await Assert.That(library.ScriptResolver.TryResolve(ScriptCategory.Move, scriptName, + move.SecondaryEffect.Parameters, out var script)).IsTrue(); + } + catch (Exception e) + { + throw new AggregateException($"Failed to resolve script for move {move.Name} with effect {scriptName}", e); + } + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AllySwitch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AllySwitch.cs new file mode 100644 index 0000000..b2ef15e --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AllySwitch.cs @@ -0,0 +1,7 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Moves; + +[Script(ScriptCategory.Move, "ally_switch")] +public class AllySwitch : Script +{ + // TODO: Implement the AllySwitch script. +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs index 99bbbd3..57733fc 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs @@ -3,6 +3,7 @@ using PkmnLib.Static; namespace PkmnLib.Plugin.Gen7.Scripts.Moves; +[Script(ScriptCategory.Move, "belch")] public class Belch : Script { /// diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs index f7a7c11..24a6f5e 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs @@ -21,7 +21,7 @@ public class ChangeAllTargetStats : Script { throw new ArgumentException("Parameter 'amount' is required."); } - _amount = (sbyte)amount; + _amount = (sbyte)(int)amount; } /// diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs index 7f2bb6f..11888ec 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs @@ -28,7 +28,7 @@ public abstract class ChangeTargetStats : Script throw new ArgumentException("Parameter 'amount' is required."); } - _amount = (sbyte)amount; + _amount = (sbyte)(int)amount; } /// diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs index 184e839..a0f3953 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs @@ -28,7 +28,7 @@ public abstract class ChangeUserStats : Script throw new ArgumentException("Parameter 'amount' is required."); } - _amount = (sbyte)amount; + _amount = (sbyte)(int)amount; } /// diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs index 5a296de..3c15ab2 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs @@ -7,10 +7,6 @@ public class BindEffect : Script private int _turns; private readonly float _percentOfMaxHealth; - private BindEffect(float percentOfMaxHealth) - { - _percentOfMaxHealth = percentOfMaxHealth; - } public BindEffect(IPokemon owner, int turns, float percentOfMaxHealth) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs index 89f822f..f60a555 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoomDesireEffect.cs @@ -19,7 +19,7 @@ public class DoomDesireEffect : Script } } - private readonly IBattleSide _side; + private readonly IBattleSide? _side; private List _targets = new(); public DoomDesireEffect(IBattleSide side) @@ -40,6 +40,9 @@ public class DoomDesireEffect : Script /// public override void OnEndTurn(IBattle battle) { + if (_side == null) + return; + var toRemove = new List(); foreach (var v in _targets) {