More abilities
All checks were successful
Build / Build (push) Successful in 48s

This commit is contained in:
2025-06-09 13:44:26 +02:00
parent 00005aa4bf
commit 97868ab4c6
94 changed files with 829 additions and 150 deletions

View File

@@ -0,0 +1,31 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
[Script(ScriptCategory.Side, "flower_gift")]
public class FlowerGiftEffect : Script
{
private readonly HashSet<IPokemon> _placerPokemon = [];
public void OnAdded(IPokemon placer)
{
_placerPokemon.Add(placer);
}
public void OnRemoved(IPokemon placer)
{
_placerPokemon.Remove(placer);
if (_placerPokemon.Count == 0)
{
RemoveSelf();
}
}
/// <inheritdoc />
public override void ChangeOffensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint defensiveStat,
ImmutableStatisticSet<uint> targetStats, ref uint value)
{
if (move.Battle.WeatherName != ScriptUtils.ResolveName<Weather.HarshSunlight>())
return;
value = value.MultiplyOrMax(1.5f);
}
}

View File

@@ -0,0 +1,49 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
[Script(ScriptCategory.Side, "flower_veil")]
public class FlowerVeilEffect : Script
{
private readonly HashSet<IPokemon> _placerPokemon = [];
public void OnAdded(IPokemon placer)
{
_placerPokemon.Add(placer);
}
public void OnRemoved(IPokemon placer)
{
_placerPokemon.Remove(placer);
if (_placerPokemon.Count == 0)
{
RemoveSelf();
}
}
/// <inheritdoc />
public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted,
ref bool prevent)
{
if (selfInflicted)
return;
if (amount > 0)
return;
if (target.Types.All(x => x.Name != "grass"))
return;
prevent = true;
}
/// <inheritdoc />
public override void PreventStatusChange(IPokemon pokemon, StringKey status, bool selfInflicted,
ref bool preventStatus)
{
if (selfInflicted)
return;
if (pokemon.Types.All(x => x.Name != "grass"))
return;
preventStatus = true;
}
}

View File

@@ -0,0 +1,28 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
[Script(ScriptCategory.Side, "friend_guard")]
public class FriendGuardEffect : Script
{
private readonly HashSet<IPokemon> _placerPokemon = [];
public void OnAdded(IPokemon placer)
{
_placerPokemon.Add(placer);
}
public void OnRemoved(IPokemon placer)
{
_placerPokemon.Remove(placer);
if (_placerPokemon.Count == 0)
{
RemoveSelf();
}
}
/// <inheritdoc />
public override void ChangeIncomingMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage)
{
var modifier = Math.Pow(0.75f, _placerPokemon.Count);
damage = (uint)(damage * modifier);
}
}

View File

@@ -6,7 +6,8 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Side;
public class SafeguardEffect : Script
{
/// <inheritdoc />
public override void PreventStatusChange(IPokemon pokemonImpl, StringKey status, ref bool preventStatus)
public override void PreventStatusChange(IPokemon pokemon, StringKey status, bool selfInflicted,
ref bool preventStatus)
{
preventStatus = true;
}

View File

@@ -8,6 +8,6 @@ public class StickyWebEffect : Script
{
if (pokemon.IsFloating)
return;
pokemon.ChangeStatBoost(Statistic.Speed, -1, false);
pokemon.ChangeStatBoost(Statistic.Speed, -1, false, false);
}
}

View File

@@ -9,6 +9,6 @@ public class ToxicSpikesEffect : Script
if (pokemon.IsFloating)
return;
pokemon.SetStatus(ScriptUtils.ResolveName<Status.Poisoned>());
pokemon.SetStatus(ScriptUtils.ResolveName<Status.Poisoned>(), false);
}
}