Finish script interface refactor
All checks were successful
Build / Build (push) Successful in 1m1s

This commit is contained in:
2025-07-06 10:27:56 +02:00
parent 83f6a183e3
commit 7c270a6d52
117 changed files with 669 additions and 648 deletions

View File

@@ -40,7 +40,7 @@ public class AuroraVeil : Script, IScriptOnSecondaryEffect
var side = battle.Sides[move.User.BattleData!.SideIndex];
var args = new CustomTriggers.AuroraVeilDurationArgs(move, 5);
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.AuroraVeilDuration, args));
move.User.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.AuroraVeilDuration, args));
var numberOfTurns = args.Duration;
var script = side.VolatileScripts.StackOrAdd(ScriptUtils.ResolveName<AuroraVeilEffect>(), () =>

View File

@@ -9,7 +9,7 @@ public class Bind : Script, IScriptOnSecondaryEffect
public void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
{
var args = new CustomTriggers.ModifyBindArgs(move);
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyBind, args));
move.User.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ModifyBind, args));
var bindTurns = args.Duration;
var bindDamage = args.DamagePercent;

View File

@@ -8,7 +8,7 @@ public class ChargeMove : Script, IScriptPreventMove
public void PreventMove(IExecutingMove move, ref bool prevent)
{
var args = new CustomTriggers.BypassChargeMoveArgs(move, false);
move.RunScriptHook(script => script.CustomTrigger(CustomTriggers.BypassChargeMove, args));
move.RunScriptHook<IScriptCustomTrigger>(script => script.CustomTrigger(CustomTriggers.BypassChargeMove, args));
if (args.Bypass)
return;

View File

@@ -24,7 +24,7 @@ public class Drain : Script, IScriptOnInitialize, IScriptOnSecondaryEffect
var invert = false;
var args = new CustomTriggers.ModifyDrainArgs(move, target, hit, damage, healed, invert);
target.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyDrain, args));
target.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ModifyDrain, args));
invert = args.Invert;
healed = args.Healed;

View File

@@ -20,7 +20,7 @@ public class DreamEater : Script, IScriptOnSecondaryEffect, IScriptBlockOutgoing
healed = (uint)(healed * 1.3f);
var args = new CustomTriggers.ModifyDrainArgs(move, target, hit, damage, healed, false);
target.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyDrain, args));
target.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ModifyDrain, args));
var invert = args.Invert;
healed = args.Healed;

View File

@@ -3,10 +3,10 @@ using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "feint")]
public class Feint : Script
public class Feint : Script, IScriptOnBeforeHit
{
/// <inheritdoc />
public override void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
public void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
{
if (target.Volatile.Contains<ProtectionEffectScript>())
{

View File

@@ -14,7 +14,7 @@ public class FlareBlitz : Script, IScriptOnSecondaryEffect
var recoilDamage = hitData.Damage * (1 / 3);
var triggerArgs = new CustomTriggers.ModifyRecoilArgs(move, target, hit, hitData.Damage, recoilDamage);
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyRecoil, triggerArgs));
move.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ModifyRecoil, triggerArgs));
if (triggerArgs.Prevent)
return;

View File

@@ -1,10 +1,10 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "flying_press")]
public class FlyingPress : Script
public class FlyingPress : Script, IScriptChangeTypesForMove
{
/// <inheritdoc />
public override void ChangeTypesForMove(IExecutingMove executingMove, IPokemon target, byte hitIndex,
public void ChangeTypesForMove(IExecutingMove executingMove, IPokemon target, byte hitIndex,
IList<TypeIdentifier> types)
{
var typeLibrary = executingMove.User.Library.StaticLibrary.Types;

View File

@@ -18,7 +18,7 @@ public class HealPercent : Script, IScriptOnInitialize, IScriptOnSecondaryEffect
public void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
{
var args = new CustomTriggers.ModifyHealPercentArgs(move, target, hit, _healPercent);
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyHealPercent, args));
move.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ModifyHealPercent, args));
var healPercent = args.HealPercent;
target.Heal(target.BoostedStats.Hp.MultiplyOrMax(healPercent));

View File

@@ -13,7 +13,7 @@ public class LightScreen : Script, IScriptOnSecondaryEffect
return;
var args = new CustomTriggers.LightScreenNumberOfTurnsArgs(move, 5);
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.LightScreenNumberOfTurns, args));
move.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.LightScreenNumberOfTurns, args));
var turns = args.Duration;
battleData.BattleSide.VolatileScripts.StackOrAdd(ScriptUtils.ResolveName<LightScreenEffect>(),

View File

@@ -20,7 +20,7 @@ public class MultiHitMove : Script, IScriptChangeNumberOfHits
_ => 5,
};
var triggerArgs = new CustomTriggers.Modify2_5HitMoveArgs(choice, (byte)newHits);
choice.RunScriptHook(x => x.CustomTrigger(CustomTriggers.Modify2_5HitMove, triggerArgs));
choice.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.Modify2_5HitMove, triggerArgs));
newHits = triggerArgs.NumberOfHits;
numberOfHits = (byte)newHits;

View File

@@ -1,11 +1,10 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "one_hit_ko")]
public class OneHitKo : Script, IScriptChangeMoveDamage
public class OneHitKo : Script, IScriptChangeMoveDamage, IScriptChangeAccuracy
{
/// <inheritdoc />
public override void ChangeAccuracy(IExecutingMove executingMove, IPokemon target, byte hitIndex,
ref int modifiedAccuracy)
public void ChangeAccuracy(IExecutingMove executingMove, IPokemon target, byte hitIndex, ref int modifiedAccuracy)
{
var levelDifference = executingMove.User.Level - target.Level;
if (levelDifference < 0)

View File

@@ -3,11 +3,11 @@ using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "pollen_puff")]
public class PollenPuff : Script, IScriptOnSecondaryEffect
public class PollenPuff : Script, IScriptOnSecondaryEffect, IScriptChangeCategory
{
/// <inheritdoc />
/// <inheritdoc />
public override void ChangeCategory(IExecutingMove move, IPokemon target, byte hitIndex, ref MoveCategory category)
public void ChangeCategory(IExecutingMove move, IPokemon target, byte hitIndex, ref MoveCategory category)
{
var battleData = move.User.BattleData;
var targetBattleData = target.BattleData;

View File

@@ -3,13 +3,14 @@ using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "present")]
public class Present : Script, IScriptOnSecondaryEffect, IScriptChangeBasePower
public class Present : Script, IScriptOnSecondaryEffect, IScriptChangeBasePower, IScriptChangeCategory,
IScriptOnBeforeHit
{
private bool _isHealing;
private byte _basePower;
/// <inheritdoc />
public override void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
public void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
{
var battleRandom = move.User.BattleData?.Battle.Random;
if (battleRandom == null)
@@ -33,7 +34,7 @@ public class Present : Script, IScriptOnSecondaryEffect, IScriptChangeBasePower
}
/// <inheritdoc />
public override void ChangeCategory(IExecutingMove move, IPokemon target, byte hitIndex, ref MoveCategory category)
public void ChangeCategory(IExecutingMove move, IPokemon target, byte hitIndex, ref MoveCategory category)
{
if (_isHealing)
category = MoveCategory.Status;

View File

@@ -23,7 +23,7 @@ public class Recoil : Script, IScriptOnInitialize, IScriptOnSecondaryEffect
var recoilDamage = (uint)(hitData.Damage * _recoilPercentage);
var triggerArgs = new CustomTriggers.ModifyRecoilArgs(move, target, hit, hitData.Damage, recoilDamage);
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyRecoil, triggerArgs));
move.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ModifyRecoil, triggerArgs));
if (triggerArgs.Prevent)
return;

View File

@@ -12,7 +12,7 @@ public class Reflect : Script, IScriptOnSecondaryEffect
var numberOfTurns = 5;
var args = new CustomTriggers.ReflectNumberOfTurnsArgs(move, numberOfTurns);
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ReflectNumberOfTurns, args));
move.User.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.ReflectNumberOfTurns, args));
numberOfTurns = args.Duration;
battleData.BattleSide.VolatileScripts.Add(new Side.ReflectEffect(numberOfTurns));

View File

@@ -1,10 +1,10 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "spectral_thief")]
public class SpectralThief : Script
public class SpectralThief : Script, IScriptOnBeforeHit
{
/// <inheritdoc />
public override void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
public void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
{
var positiveStats = target.StatBoost.Where(x => x.value > 0).ToArray();
if (positiveStats.Length > 0)

View File

@@ -3,10 +3,10 @@ using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "sucker_punch")]
public class SuckerPunch : Script
public class SuckerPunch : Script, IScriptOnBeforeHit
{
/// <inheritdoc />
public override void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
public void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
{
var targetChoice = move.Battle.ChoiceQueue?.Where(x => x.User == target).FirstOrDefault();
if (targetChoice is not IMoveChoice moveChoice ||

View File

@@ -14,7 +14,7 @@ public class Whirlpool : Script, IScriptOnSecondaryEffect
var turns = move.Battle.Random.GetInt(4, 6);
var damagePercent = 0.125f;
var args = new CustomTriggers.WhirlpoolArgs(move, target, hit, turns, damagePercent);
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.Whirlpool, args));
move.RunScriptHook<IScriptCustomTrigger>(x => x.CustomTrigger(CustomTriggers.Whirlpool, args));
turns = args.Turns;
damagePercent = args.DamagePercent;
whirlpoolEffect.AddTargetedPokemon(target, turns, damagePercent);