More abilities, refactor custom triggers to be typed.
All checks were successful
Build / Build (push) Successful in 48s
All checks were successful
Build / Build (push) Successful in 48s
This commit is contained in:
@@ -40,13 +40,9 @@ public class AuroraVeil : Script
|
||||
|
||||
var side = battle.Sides[move.User.BattleData!.SideIndex];
|
||||
|
||||
var numberOfTurns = 5;
|
||||
var dict = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "duration", numberOfTurns },
|
||||
};
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.AuroraVeilDuration, dict));
|
||||
numberOfTurns = (int)dict.GetOrDefault("duration", numberOfTurns)!;
|
||||
var args = new CustomTriggers.AuroraVeilDurationArgs(move, 5);
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.AuroraVeilDuration, args));
|
||||
var numberOfTurns = args.Duration;
|
||||
|
||||
var script = side.VolatileScripts.StackOrAdd(ScriptUtils.ResolveName<AuroraVeilEffect>(), () =>
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@ public class BellyDrum : Script
|
||||
return;
|
||||
}
|
||||
|
||||
target.Damage(maxHealthHalved, DamageSource.Misc);
|
||||
target.Damage(maxHealthHalved, DamageSource.Misc, forceDamage: true);
|
||||
// Raising the user's Attack by 12 stages should always set it to +6.
|
||||
target.ChangeStatBoost(Statistic.Attack, 12, true, false);
|
||||
}
|
||||
|
||||
@@ -9,13 +9,11 @@ public class Bind : Script
|
||||
/// <inheritdoc />
|
||||
public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
|
||||
{
|
||||
var bindTurnsParameters = new Dictionary<StringKey, object?> { { "bind_number_of_turns", 5 } };
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.BindNumberOfTurns, bindTurnsParameters));
|
||||
var bindDamageParameters = new Dictionary<StringKey, object?> { { "bind_percent_of_max_health", 1f / 8f } };
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.BindPercentOfMaxHealth, bindDamageParameters));
|
||||
var args = new CustomTriggers.ModifyBindArgs(move);
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyBind, args));
|
||||
|
||||
var bindTurns = bindTurnsParameters.GetOrDefault("bind_number_of_turns", 5) as int? ?? 5;
|
||||
var bindDamage = bindDamageParameters.GetOrDefault("bind_percent_of_max_health", 1f / 8f) as float? ?? 1f / 8f;
|
||||
var bindTurns = args.Duration;
|
||||
var bindDamage = args.DamagePercent;
|
||||
|
||||
var bindEffect = new BindEffect(target, bindTurns, bindDamage);
|
||||
target.Volatile.Add(bindEffect);
|
||||
|
||||
@@ -7,13 +7,10 @@ public class ChargeMove : Script
|
||||
{
|
||||
public override void PreventMove(IExecutingMove move, ref bool prevent)
|
||||
{
|
||||
var bypassCharge = false;
|
||||
var parameters = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "move", move },
|
||||
{ "bypassCharge", bypassCharge },
|
||||
};
|
||||
move.RunScriptHook(script => script.CustomTrigger(CustomTriggers.BypassChargeMove, parameters));
|
||||
var args = new CustomTriggers.BypassChargeMoveArgs(move, false);
|
||||
move.RunScriptHook(script => script.CustomTrigger(CustomTriggers.BypassChargeMove, args));
|
||||
if (args.Bypass)
|
||||
return;
|
||||
|
||||
var chargeMoveEffect = move.User.Volatile.Get<ChargeMoveEffect>();
|
||||
if (chargeMoveEffect != null && chargeMoveEffect.MoveName == move.UseMove.Name)
|
||||
|
||||
@@ -16,7 +16,7 @@ public class Curse : Script
|
||||
return;
|
||||
if (move.User.Types.Contains(ghostType))
|
||||
{
|
||||
move.User.Damage(move.User.CurrentHealth / 2, DamageSource.Misc);
|
||||
move.User.Damage(move.User.CurrentHealth / 2, DamageSource.Misc, forceDamage: true);
|
||||
if (move.User.CurrentHealth == 0)
|
||||
return;
|
||||
target.Volatile.Add(new GhostCurseEffect(target));
|
||||
|
||||
@@ -23,21 +23,15 @@ public class Drain : Script
|
||||
if (move.User.HasHeldItem("big_root"))
|
||||
healed = (uint)(healed * 1.3f);
|
||||
var invert = false;
|
||||
var parameters = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "user", user },
|
||||
{ "target", target },
|
||||
{ "damage", damage },
|
||||
{ "healed", healed },
|
||||
{ "invert", invert },
|
||||
};
|
||||
target.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyDrain, parameters));
|
||||
if (parameters.TryGetValue("invert", out var invertObj) && invertObj is bool invertBool)
|
||||
invert = invertBool;
|
||||
|
||||
var args = new CustomTriggers.ModifyDrainArgs(move, target, hit, damage, healed, invert);
|
||||
target.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyDrain, args));
|
||||
invert = args.Invert;
|
||||
healed = args.Healed;
|
||||
|
||||
if (invert)
|
||||
{
|
||||
user.Damage(damage, DamageSource.Misc);
|
||||
user.Damage(healed, DamageSource.Misc);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -19,22 +19,14 @@ public class DreamEater : Script
|
||||
if (move.User.HasHeldItem("big_root"))
|
||||
healed = (uint)(healed * 1.3f);
|
||||
|
||||
var invert = false;
|
||||
var parameters = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "user", user },
|
||||
{ "target", target },
|
||||
{ "damage", damage },
|
||||
{ "healed", healed },
|
||||
{ "invert", invert },
|
||||
};
|
||||
target.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyDrain, parameters));
|
||||
if (parameters.TryGetValue("invert", out var invertObj) && invertObj is bool invertBool)
|
||||
invert = invertBool;
|
||||
var args = new CustomTriggers.ModifyDrainArgs(move, target, hit, damage, healed, false);
|
||||
target.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyDrain, args));
|
||||
var invert = args.Invert;
|
||||
healed = args.Healed;
|
||||
|
||||
if (invert)
|
||||
{
|
||||
user.Damage(damage, DamageSource.Misc);
|
||||
user.Damage(healed, DamageSource.Misc);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -19,6 +19,10 @@ public class HealPercent : Script
|
||||
/// <inheritdoc />
|
||||
public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
|
||||
{
|
||||
target.Heal((uint)(move.User.BoostedStats.Hp * _healPercent));
|
||||
var args = new CustomTriggers.ModifyHealPercentArgs(move, target, hit, _healPercent);
|
||||
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ModifyHealPercent, args));
|
||||
var healPercent = args.HealPercent;
|
||||
|
||||
target.Heal(target.BoostedStats.Hp.MultiplyOrMax(healPercent));
|
||||
}
|
||||
}
|
||||
@@ -13,13 +13,9 @@ public class LightScreen : Script
|
||||
if (battleData == null)
|
||||
return;
|
||||
|
||||
var turns = 5;
|
||||
var dict = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "duration", turns },
|
||||
};
|
||||
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.LightScreenNumberOfTurns, dict));
|
||||
turns = (int)dict.GetOrDefault("duration", turns)!;
|
||||
var args = new CustomTriggers.LightScreenNumberOfTurnsArgs(move, 5);
|
||||
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.LightScreenNumberOfTurns, args));
|
||||
var turns = args.Duration;
|
||||
|
||||
battleData.BattleSide.VolatileScripts.StackOrAdd(ScriptUtils.ResolveName<LightScreenEffect>(),
|
||||
() => new LightScreenEffect(turns));
|
||||
|
||||
@@ -12,12 +12,10 @@ public class Reflect : Script
|
||||
if (battleData is null)
|
||||
return;
|
||||
var numberOfTurns = 5;
|
||||
var dict = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "duration", numberOfTurns },
|
||||
};
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ReflectNumberOfTurns, dict));
|
||||
numberOfTurns = (int)dict.GetOrDefault("duration", numberOfTurns)!;
|
||||
|
||||
var args = new CustomTriggers.ReflectNumberOfTurnsArgs(move, numberOfTurns);
|
||||
move.User.RunScriptHook(x => x.CustomTrigger(CustomTriggers.ReflectNumberOfTurns, args));
|
||||
numberOfTurns = args.Duration;
|
||||
|
||||
battleData.BattleSide.VolatileScripts.Add(new Side.ReflectEffect(numberOfTurns));
|
||||
}
|
||||
|
||||
@@ -14,14 +14,10 @@ public class Whirlpool : Script
|
||||
{
|
||||
var turns = move.Battle.Random.GetInt(4, 6);
|
||||
var damagePercent = 0.125f;
|
||||
var parameters = new Dictionary<StringKey, object?>
|
||||
{
|
||||
{ "number_of_turns", turns },
|
||||
{ "damage_percent", damagePercent },
|
||||
};
|
||||
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.Whirlpool, parameters));
|
||||
turns = parameters.GetValueOrDefault("number_of_turns", turns) as int? ?? turns;
|
||||
damagePercent = parameters.GetValueOrDefault("damage_percent", damagePercent) as float? ?? damagePercent;
|
||||
var args = new CustomTriggers.WhirlpoolArgs(move, target, hit, turns, damagePercent);
|
||||
move.RunScriptHook(x => x.CustomTrigger(CustomTriggers.Whirlpool, args));
|
||||
turns = args.Turns;
|
||||
damagePercent = args.DamagePercent;
|
||||
whirlpoolEffect.AddTargetedPokemon(target, turns, damagePercent);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user