More unit tests, fixes

This commit is contained in:
2026-07-05 13:01:12 +02:00
parent f9878e76ba
commit 16a1990486
23 changed files with 3204 additions and 13 deletions

View File

@@ -37,7 +37,7 @@ public class BatonPass : Script, IScriptOnSecondaryEffect
foreach (var script in volatileScripts)
{
if (script is not IBatonPassException)
return;
continue;
toSwitch.Volatile.Add(script);
}
}

View File

@@ -12,6 +12,11 @@ public class BellyDrum : Script, IScriptOnSecondaryEffect
move.GetHitData(target, hit).Fail();
return;
}
if (target.StatBoost.Attack >= 6)
{
move.GetHitData(target, hit).Fail();
return;
}
target.Damage(maxHealthHalved, DamageSource.Misc, forceDamage: true);
// Raising the user's Attack by 12 stages should always set it to +6.

View File

@@ -7,7 +7,7 @@ public class Bestow : Script, IScriptOnSecondaryEffect
public void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
{
var user = move.User;
var userHeldItem = user.RemoveHeldItemForBattle();
var userHeldItem = user.HeldItem;
var targetHeldItem = target.HeldItem;
if (userHeldItem == null || targetHeldItem != null)
@@ -15,7 +15,7 @@ public class Bestow : Script, IScriptOnSecondaryEffect
move.GetHitData(target, hit).Fail();
return;
}
userHeldItem = user.RemoveHeldItemForBattle();
_ = target.ForceSetHeldItem(userHeldItem);
}
}

View File

@@ -16,11 +16,18 @@ public class Bide : Script, IScriptOnSecondaryEffect
}
bideEffect.Turns += 1;
if (bideEffect.Turns < 2)
if (bideEffect.Turns < 3)
return;
var lastPokemon = bideEffect.HitBy.LastOrDefault(x => x.BattleData?.IsOnBattlefield == true);
lastPokemon?.Damage(bideEffect.DamageTaken, DamageSource.MoveDamage);
if (bideEffect.DamageTaken == 0)
{
move.GetHitData(target, hit).Fail();
}
else
{
var lastPokemon = bideEffect.HitBy.LastOrDefault(x => x.BattleData?.IsOnBattlefield == true);
lastPokemon?.Damage(bideEffect.DamageTaken * 2, DamageSource.MoveDamage);
}
RemoveSelf();
move.User.Volatile.Remove<BideEffect>();
}
}

View File

@@ -5,9 +5,13 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "block")]
public class Block : Script, IScriptOnSecondaryEffect
{
private static StringKey GhostTypeName => new("ghost");
/// <inheritdoc />
public void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
{
if (target.Types.Any(x => x.Name == GhostTypeName))
return;
target.Volatile.Add(new BlockEffect());
}
}

View File

@@ -8,10 +8,8 @@ public class BrickBreak : Script, IScriptOnBeforeMove
/// <inheritdoc />
public void OnBeforeMove(IExecutingMove move)
{
var sides = move.User.BattleData?.Battle.Sides;
if (sides == null)
return;
var targets = move.Targets.WhereNotNull();
var sides = targets.Select(x => x.BattleData!.BattleSide).Distinct();
foreach (var side in sides)
{
side.VolatileScripts.Remove(ScriptUtils.ResolveName<ReflectEffect>());