From 85d97cb9e61d3adbb2ac560361ea830e4a3ade93 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 15 Jun 2025 12:29:13 +0200 Subject: [PATCH] More abilities, refactor IPokemon.SetStatus to pass pokemon that caused the status change --- PkmnLib.Dynamic/Models/Pokemon.cs | 6 ++++-- PkmnLib.Dynamic/ScriptHandling/Script.cs | 4 ++++ .../Scripts/Abilities/EffectSpore.cs | 6 +++--- .../Scripts/Abilities/FlameBody.cs | 2 +- .../Scripts/Abilities/PoisonPoint.cs | 2 +- .../Scripts/Abilities/PoisonTouch.cs | 2 +- .../Scripts/Abilities/Static.cs | 2 +- .../Scripts/Abilities/StrongJaw.cs | 19 ++++++++++++++++++ .../Scripts/Abilities/Sturdy.cs | 19 ++++++++++++++++++ .../Scripts/Abilities/SuctionCups.cs | 12 +++++++++++ .../Scripts/Abilities/SuperLuck.cs | 18 +++++++++++++++++ .../Scripts/Abilities/SurgeSurfer.cs | 19 ++++++++++++++++++ .../Scripts/Abilities/Swarm.cs | 20 +++++++++++++++++++ .../Scripts/Abilities/SweetVeil.cs | 20 +++++++++++++++++++ .../Scripts/Abilities/SwiftSwim.cs | 19 ++++++++++++++++++ .../Scripts/Abilities/Symbiosis.cs | 12 +++++++++++ .../Scripts/Abilities/Synchronize.cs | 19 ++++++++++++++++++ .../Scripts/Moves/Bounce.cs | 2 +- .../Scripts/Moves/FireFang.cs | 2 +- .../Scripts/Moves/FlameWheel.cs | 2 +- .../Scripts/Moves/FlareBlitz.cs | 2 +- .../Scripts/Moves/FreezeDry.cs | 2 +- .../Scripts/Moves/FreezeShock.cs | 2 +- .../Scripts/Moves/IceBurn.cs | 2 +- .../Scripts/Moves/IceFang.cs | 2 +- .../Scripts/Moves/PoisonTail.cs | 2 +- .../PkmnLib.Plugin.Gen7/Scripts/Moves/Rest.cs | 3 ++- .../Scripts/Moves/SetStatus.cs | 2 +- .../Scripts/Moves/ThunderFang.cs | 2 +- .../Scripts/Moves/ToxicThread.cs | 2 +- .../Scripts/Moves/TriAttack.cs | 2 +- .../Scripts/Moves/Twineedle.cs | 2 +- .../Scripts/Moves/VoltTackle.cs | 2 +- .../Scripts/Pokemon/BanefulBunkerEffect.cs | 2 +- .../Scripts/Pokemon/BeakBlastEffect.cs | 2 +- .../Scripts/Pokemon/YawnEffect.cs | 20 ++----------------- .../Scripts/Side/ToxicSpikesEffect.cs | 2 +- 37 files changed, 214 insertions(+), 46 deletions(-) create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/StrongJaw.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuctionCups.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuperLuck.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SurgeSurfer.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Swarm.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SweetVeil.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SwiftSwim.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Symbiosis.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Synchronize.cs diff --git a/PkmnLib.Dynamic/Models/Pokemon.cs b/PkmnLib.Dynamic/Models/Pokemon.cs index 3bc9d73..c14c59a 100644 --- a/PkmnLib.Dynamic/Models/Pokemon.cs +++ b/PkmnLib.Dynamic/Models/Pokemon.cs @@ -361,7 +361,7 @@ public interface IPokemon : IScriptSource, IDeepCloneable /// /// Adds a non-volatile status to the Pokemon. /// - bool SetStatus(StringKey status, bool selfInflicted, EventBatchId batchId = default); + bool SetStatus(StringKey status, IPokemon? originPokemon, EventBatchId batchId = default); /// /// Removes the current non-volatile status from the Pokemon. @@ -1186,7 +1186,7 @@ public class PokemonImpl : ScriptSource, IPokemon public bool HasStatus(StringKey status) => StatusScript.Script?.Name == status; /// - public bool SetStatus(StringKey status, bool selfInflicted, EventBatchId batchId = default) + public bool SetStatus(StringKey status, IPokemon? originPokemon, EventBatchId batchId = default) { if (!Library.ScriptResolver.TryResolve(ScriptCategory.Status, status, null, out var statusScript)) throw new KeyNotFoundException($"Status script {status} not found"); @@ -1194,6 +1194,7 @@ public class PokemonImpl : ScriptSource, IPokemon if (!StatusScript.IsEmpty) return false; var oldStatus = StatusScript.Script?.Name; + var selfInflicted = originPokemon == this; var preventStatus = false; this.RunScriptHook(script => script.PreventStatusChange(this, status, selfInflicted, ref preventStatus)); @@ -1206,6 +1207,7 @@ public class PokemonImpl : ScriptSource, IPokemon { BatchId = batchId, }); + this.RunScriptHook(script => script.OnAfterStatusChange(this, status, originPokemon)); return true; } diff --git a/PkmnLib.Dynamic/ScriptHandling/Script.cs b/PkmnLib.Dynamic/ScriptHandling/Script.cs index be41b53..a991219 100644 --- a/PkmnLib.Dynamic/ScriptHandling/Script.cs +++ b/PkmnLib.Dynamic/ScriptHandling/Script.cs @@ -767,6 +767,10 @@ public abstract class Script : IDeepCloneable { } + public virtual void OnAfterStatusChange(IPokemon pokemon, StringKey status, IPokemon? originPokemon) + { + } + /// /// This function allows a script to prevent a Pokémon from being affected by a volatile status condition. /// diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/EffectSpore.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/EffectSpore.cs index 737686f..4fe7076 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/EffectSpore.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/EffectSpore.cs @@ -36,13 +36,13 @@ public class EffectSpore : Script switch (chance) { case < 9: - move.User.SetStatus(ScriptUtils.ResolveName(), false, batchId); + move.User.SetStatus(ScriptUtils.ResolveName(), move.User, batchId); break; case < 19: - move.User.SetStatus(ScriptUtils.ResolveName(), false, batchId); + move.User.SetStatus(ScriptUtils.ResolveName(), move.User, batchId); break; case < 30: - move.User.SetStatus(ScriptUtils.ResolveName(), false, batchId); + move.User.SetStatus(ScriptUtils.ResolveName(), move.User, batchId); break; } } diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlameBody.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlameBody.cs index 71e5da3..5ad2b39 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlameBody.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/FlameBody.cs @@ -20,6 +20,6 @@ public class FlameBody : Script return; move.Battle.EventHook.Invoke(new AbilityTriggerEvent(target)); - move.User.SetStatus(ScriptUtils.ResolveName(), false); + move.User.SetStatus(ScriptUtils.ResolveName(), move.User); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonPoint.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonPoint.cs index 0a16af0..fb951cb 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonPoint.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonPoint.cs @@ -12,6 +12,6 @@ public class PoisonPoint : Script public override void OnIncomingHit(IExecutingMove move, IPokemon target, byte hit) { if (move.GetHitData(target, hit).IsContact) - move.User.SetStatus(ScriptUtils.ResolveName(), false); + move.User.SetStatus(ScriptUtils.ResolveName(), move.User); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonTouch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonTouch.cs index f9b27f7..de624f5 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonTouch.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/PoisonTouch.cs @@ -14,6 +14,6 @@ public class PoisonTouch : Script public override void OnIncomingHit(IExecutingMove move, IPokemon target, byte hit) { if (move.GetHitData(target, hit).IsContact && move.Battle.Random.GetInt(0, 100) < PoisonChance) - move.User.SetStatus(ScriptUtils.ResolveName(), false); + move.User.SetStatus(ScriptUtils.ResolveName(), target); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Static.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Static.cs index f9b6588..b43f9a9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Static.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Static.cs @@ -19,7 +19,7 @@ public class Static : Script if (move.Battle.Random.GetInt(0, 100) < ChanceToParalyze) { EventBatchId batchId = new(); - if (target.SetStatus(ScriptUtils.ResolveName(), false, batchId)) + if (target.SetStatus(ScriptUtils.ResolveName(), target, batchId)) { move.Battle.EventHook.Invoke(new AbilityTriggerEvent(target) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/StrongJaw.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/StrongJaw.cs new file mode 100644 index 0000000..b46398a --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/StrongJaw.cs @@ -0,0 +1,19 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Strong Jaw is an ability that boosts the power of biting moves. +/// +/// Bulbapedia - Strong Jaw +/// +[Script(ScriptCategory.Ability, "strong_jaw")] +public class StrongJaw : Script +{ + /// + public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower) + { + if (move.UseMove.HasFlag("bite")) + { + basePower = basePower.MultiplyOrMax(1.5f); + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs new file mode 100644 index 0000000..735a95b --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Sturdy.cs @@ -0,0 +1,19 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Sturdy is an ability that allows the Pokémon to survive a one-hit KO attack with 1 HP. +/// +/// Bulbapedia - Sturdy +/// +[Script(ScriptCategory.Ability, "sturdy")] +public class Sturdy : Script +{ + /// + public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage) + { + if (damage >= target.MaxHealth && target.CurrentHealth == target.MaxHealth) + { + damage = target.MaxHealth - 1; + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuctionCups.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuctionCups.cs new file mode 100644 index 0000000..fc31fb9 --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuctionCups.cs @@ -0,0 +1,12 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Suction Cups is an ability that prevents the Pokémon from being forced to switch out. +/// +/// Bulbapedia - Suction Cups +/// +[Script(ScriptCategory.Ability, "suction_cups")] +public class SuctionCups : Script +{ + // TODO: Implement Suction Cups ability logic +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuperLuck.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuperLuck.cs new file mode 100644 index 0000000..10e69ca --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SuperLuck.cs @@ -0,0 +1,18 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Super Luck is an ability that increases the critical hit ratio of the Pokémon's moves. +/// +/// Bulbapedia - Super Luck +/// +[Script(ScriptCategory.Ability, "super_luck")] +public class SuperLuck : Script +{ + /// + public override void ChangeCriticalStage(IExecutingMove move, IPokemon target, byte hit, ref byte stage) + { + if (stage == byte.MaxValue) + return; + stage++; + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SurgeSurfer.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SurgeSurfer.cs new file mode 100644 index 0000000..8cb9d7b --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SurgeSurfer.cs @@ -0,0 +1,19 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Surge Surfer is an ability that doubles the Pokémon's Speed while Electric Terrain is active. +/// +/// Bulbapedia - Surge Surfer +/// +[Script(ScriptCategory.Ability, "surge_surfer")] +public class SurgeSurfer : Script +{ + /// + public override void ChangeSpeed(ITurnChoice choice, ref uint speed) + { + if (choice.User.BattleData?.Battle.TerrainName == ScriptUtils.ResolveName()) + { + speed = speed.MultiplyOrMax(2); + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Swarm.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Swarm.cs new file mode 100644 index 0000000..68f187b --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Swarm.cs @@ -0,0 +1,20 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Swarm is an ability that powers up Bug-type moves when the Pokémon's HP is low. +/// +/// Bulbapedia - Swarm +/// +[Script(ScriptCategory.Ability, "swarm")] +public class Swarm : Script +{ + /// + public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat, + ImmutableStatisticSet targetStats, Statistic stat, ref uint value) + { + if (move.GetHitData(target, hit).Type?.Name == "bug" && target.CurrentHealth <= target.MaxHealth / 3) + { + value = value.MultiplyOrMax(1.5f); + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SweetVeil.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SweetVeil.cs new file mode 100644 index 0000000..d58d78f --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SweetVeil.cs @@ -0,0 +1,20 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Sweet Veil is an ability that prevents the Pokémon and its allies from falling asleep. +/// +/// Bulbapedia - Sweet Veil +/// +[Script(ScriptCategory.Ability, "sweet_veil")] +public class SweetVeil : Script +{ + /// + public override void PreventStatusChange(IPokemon pokemon, StringKey status, bool selfInflicted, + ref bool preventStatus) + { + if (status == ScriptUtils.ResolveName()) + { + preventStatus = true; + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SwiftSwim.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SwiftSwim.cs new file mode 100644 index 0000000..2885ef1 --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/SwiftSwim.cs @@ -0,0 +1,19 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Swift Swim is an ability that doubles the Pokémon's Speed in rain. +/// +/// Bulbapedia - Swift Swim +/// +[Script(ScriptCategory.Ability, "swift_swim")] +public class SwiftSwim : Script +{ + /// + public override void ChangeSpeed(ITurnChoice choice, ref uint speed) + { + if (choice.User.BattleData?.Battle.WeatherName == ScriptUtils.ResolveName()) + { + speed = speed.MultiplyOrMax(2); + } + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Symbiosis.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Symbiosis.cs new file mode 100644 index 0000000..ef2de8a --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Symbiosis.cs @@ -0,0 +1,12 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Symbiosis is an ability that passes the user's held item to an ally if the ally consumes its own held item. +/// +/// Bulbapedia - Symbiosis +/// +[Script(ScriptCategory.Ability, "symbiosis")] +public class Symbiosis : Script +{ + // TODO: Implement Symbiosis ability logic +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Synchronize.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Synchronize.cs new file mode 100644 index 0000000..eec743f --- /dev/null +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Synchronize.cs @@ -0,0 +1,19 @@ +namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; + +/// +/// Synchronize is an ability that passes major status conditions to the foe that inflicted them. +/// +/// Bulbapedia - Synchronize +/// +[Script(ScriptCategory.Ability, "synchronize")] +public class Synchronize : Script +{ + /// + public override void OnAfterStatusChange(IPokemon pokemon, StringKey status, IPokemon? originPokemon) + { + if (originPokemon == null || pokemon == originPokemon) + return; + pokemon.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(pokemon)); + originPokemon.SetStatus(status, pokemon); + } +} \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs index c470c1f..6043e87 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs @@ -34,7 +34,7 @@ public class Bounce : Script var random = battle.Random; if (random.EffectChance(30, move, target, hit)) { - target.SetStatus("paralyzed", false); + target.SetStatus("paralyzed", move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FireFang.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FireFang.cs index 6a4ead9..b16251f 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FireFang.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FireFang.cs @@ -14,7 +14,7 @@ public class FireFang : Script var random = battleData.Battle.Random; if (random.EffectChance(10, move, target, hit)) { - target.SetStatus("burned", false); + target.SetStatus("burned", move.User); } // It also has an independent 10% chance of causing the target to flinch, if the user attacks before the target. diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs index 407f3ba..ac307da 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs @@ -28,7 +28,7 @@ public class FlameWheel : Script if (move.Battle.Random.EffectChance(_burnChance, move, target, hit)) { - target.SetStatus("burned", false); + target.SetStatus("burned", move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlareBlitz.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlareBlitz.cs index dd08175..d466631 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlareBlitz.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlareBlitz.cs @@ -20,7 +20,7 @@ public class FlareBlitz : Script if (battleData.Battle.Random.EffectChance(10, move, target, hit)) { - target.SetStatus("burned", false); + target.SetStatus("burned", move.User); } move.User.Damage(recoilDamage, DamageSource.Misc); diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeDry.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeDry.cs index 793bfa5..ce3c235 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeDry.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeDry.cs @@ -31,7 +31,7 @@ public class FreezeDry : Script if (battleData.Battle.Random.EffectChance(10, move, target, hit)) { - target.SetStatus("frozen", false); + target.SetStatus("frozen", move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeShock.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeShock.cs index df70d21..49fa68a 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeShock.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FreezeShock.cs @@ -17,7 +17,7 @@ public class FreezeShock : BaseChargeMove if (battleData.Battle.Random.EffectChance(30, move, target, hit)) { - target.SetStatus("paralyzed", false); + target.SetStatus("paralyzed", move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBurn.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBurn.cs index 8064be7..8e01b24 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBurn.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBurn.cs @@ -17,7 +17,7 @@ public class IceBurn : BaseChargeMove if (battleData.Battle.Random.EffectChance(30, move, target, hit)) { - target.SetStatus("burned", false); + target.SetStatus("burned", move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceFang.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceFang.cs index 016c814..fa45ae1 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceFang.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceFang.cs @@ -14,7 +14,7 @@ public class IceFang : Script if (battleData.Battle.Random.EffectChance(10, move, target, hit)) { - target.SetStatus("frozen", false); + target.SetStatus("frozen", move.User); } if (battleData.Battle.Random.EffectChance(10, move, target, hit)) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PoisonTail.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PoisonTail.cs index f0fac98..fba3cea 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PoisonTail.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PoisonTail.cs @@ -22,7 +22,7 @@ public class PoisonTail : Script if (battleData.Battle.Random.EffectChance(10, move, target, hit)) { - target.SetStatus(ScriptUtils.ResolveName(), false); + target.SetStatus(ScriptUtils.ResolveName(), move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rest.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rest.cs index fd1f54a..00da375 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rest.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rest.cs @@ -24,7 +24,8 @@ public class Rest : Script return; } - if (move.User.SetStatus(ScriptUtils.ResolveName(), true) && move.User.StatusScript.Script is Sleep sleep) + if (move.User.SetStatus(ScriptUtils.ResolveName(), move.User) && + move.User.StatusScript.Script is Sleep sleep) sleep.Turns = 2; } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs index 8c8498c..1ea07c9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs @@ -20,6 +20,6 @@ public class SetStatus : Script { if (_status == null) throw new Exception("Missing required parameter 'status'"); - target.SetStatus(_status, false); + target.SetStatus(_status, move.User); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ThunderFang.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ThunderFang.cs index e5a66b7..4b77fe1 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ThunderFang.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ThunderFang.cs @@ -12,7 +12,7 @@ public class ThunderFang : Script var random = move.Battle.Random; if (random.EffectChance(10, move, target, hit)) { - target.SetStatus(ScriptUtils.ResolveName(), false); + target.SetStatus(ScriptUtils.ResolveName(), move.User); } if (random.EffectChance(10, move, target, hit)) { diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ToxicThread.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ToxicThread.cs index 38dc4dd..4ebb695 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ToxicThread.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ToxicThread.cs @@ -6,7 +6,7 @@ public class ToxicThread : Script /// public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit) { - target.SetStatus(ScriptUtils.ResolveName(), false); + target.SetStatus(ScriptUtils.ResolveName(), move.User); target.ChangeStatBoost(Statistic.Speed, -1, false, false); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/TriAttack.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/TriAttack.cs index 468b0c1..02ea6cb 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/TriAttack.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/TriAttack.cs @@ -14,6 +14,6 @@ public class TriAttack : Script ScriptUtils.ResolveName(), ScriptUtils.ResolveName(), ]); - target.SetStatus(status, false); + target.SetStatus(status, move.User); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Twineedle.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Twineedle.cs index 7242680..0b33474 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Twineedle.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Twineedle.cs @@ -11,7 +11,7 @@ public class Twineedle : Script { if (move.Battle.Random.EffectChance(20, move, target, hit)) { - target.SetStatus(ScriptUtils.ResolveName(), false); + target.SetStatus(ScriptUtils.ResolveName(), move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/VoltTackle.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/VoltTackle.cs index 237d229..bdd3bf9 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/VoltTackle.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/VoltTackle.cs @@ -12,7 +12,7 @@ public class VoltTackle : Script if (move.Battle.Random.EffectChance(10, move, target, hit)) { - target.SetStatus(ScriptUtils.ResolveName(), false); + target.SetStatus(ScriptUtils.ResolveName(), move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs index 21d8877..dfd6922 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs @@ -12,7 +12,7 @@ public class BanefulBunkerEffect : ProtectionEffectScript if (executingMove.UseMove.Category != MoveCategory.Status && executingMove.GetHitData(target, hitIndex).IsContact) { - executingMove.User.SetStatus("poisoned", false); + executingMove.User.SetStatus(ScriptUtils.ResolveName(), executingMove.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs index 75b4cc5..5088504 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs @@ -8,7 +8,7 @@ public class BeakBlastEffect : Script { if (move.GetHitData(target, hit).IsContact) { - move.User.SetStatus("burned", false); + move.User.SetStatus(ScriptUtils.ResolveName(), move.User); } } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs index 878a0b0..7144bce 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/YawnEffect.cs @@ -3,34 +3,18 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon; [Script(ScriptCategory.Pokemon, "yawn")] public class YawnEffect : Script { - private IPokemon? _pokemon; private bool _hasDoneFirstTurn; - /// - public override void OnAddedToParent(IScriptSource source) - { - if (source is IPokemon pokemon) - { - _pokemon = pokemon; - } - else - { - throw new InvalidOperationException("YawnEffect can only be added to a Pokemon."); - } - } - /// public override void OnEndTurn(IScriptSource owner, IBattle battle) { - if (_pokemon == null) - { + if (owner is not IPokemon pokemon) return; - } if (!_hasDoneFirstTurn) { _hasDoneFirstTurn = true; return; } - _pokemon.SetStatus(ScriptUtils.ResolveName(), true); + pokemon.SetStatus(ScriptUtils.ResolveName(), pokemon); } } \ No newline at end of file diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ToxicSpikesEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ToxicSpikesEffect.cs index d3cd1dc..19e03dd 100644 --- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ToxicSpikesEffect.cs +++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ToxicSpikesEffect.cs @@ -9,6 +9,6 @@ public class ToxicSpikesEffect : Script if (pokemon.IsFloating) return; - pokemon.SetStatus(ScriptUtils.ResolveName(), false); + pokemon.SetStatus(ScriptUtils.ResolveName(), null); } } \ No newline at end of file