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