This commit is contained in:
15
Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/CheekPouch.cs
Normal file
15
Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/CheekPouch.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
|
||||
|
||||
[Script(ScriptCategory.Ability, "cheek_pouch")]
|
||||
public class CheekPouch : Script
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void OnAfterItemConsume(IPokemon pokemon, IItem item)
|
||||
{
|
||||
if (item.Category == ItemCategory.Berry)
|
||||
{
|
||||
pokemon.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(pokemon));
|
||||
pokemon.Heal(pokemon.MaxHealth / 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
16
Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ColorChange.cs
Normal file
16
Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/ColorChange.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
|
||||
|
||||
[Script(ScriptCategory.Ability, "color_change")]
|
||||
public class ColorChange : Script
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void OnIncomingHit(IExecutingMove move, IPokemon target, byte hit)
|
||||
{
|
||||
var hitData = move.GetHitData(target, hit);
|
||||
if (hitData.Type != null && (hitData.Type != target.Types.FirstOrDefault() || target.Types.Count > 1))
|
||||
{
|
||||
target.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(target));
|
||||
target.SetTypes([hitData.Type.Value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,26 +5,37 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
|
||||
[Script(ScriptCategory.Ability, "prevent_stat_lowering")]
|
||||
public class PreventStatLowering : Script
|
||||
{
|
||||
private Statistic _statistic;
|
||||
/// <summary>
|
||||
/// The statistic that this ability prevents from being lowered.
|
||||
/// Null means it prevents all stat lowering.
|
||||
/// </summary>
|
||||
private Statistic? _statistic;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
|
||||
{
|
||||
if (parameters is null)
|
||||
throw new ArgumentNullException(nameof(parameters), "Parameters cannot be null.");
|
||||
if (!parameters.TryGetValue("stat", out var statObj) || statObj is not string statStr)
|
||||
throw new ArgumentException("Parameter 'stat' is required and must be a string.", nameof(parameters));
|
||||
if (!Enum.TryParse(statStr, true, out Statistic stat))
|
||||
throw new ArgumentException($"Invalid statistic '{statStr}' provided.", nameof(statStr));
|
||||
|
||||
_statistic = stat;
|
||||
if (parameters.TryGetValue("stat", out var statObj) && statObj is string statStr)
|
||||
{
|
||||
if (!Enum.TryParse(statStr, true, out Statistic stat))
|
||||
throw new ArgumentException($"Invalid statistic '{statStr}' provided.", nameof(statStr));
|
||||
_statistic = stat;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted,
|
||||
ref bool prevent)
|
||||
{
|
||||
if (_statistic is not null && _statistic != stat)
|
||||
return;
|
||||
if (amount >= 0)
|
||||
return;
|
||||
if (!selfInflicted)
|
||||
prevent = false;
|
||||
{
|
||||
target.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(target));
|
||||
prevent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using PkmnLib.Static.Utils;
|
||||
|
||||
namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
|
||||
|
||||
[Script(ScriptCategory.Ability, "speed_modifier_in_weather")]
|
||||
public class SpeedModifierInWeather : Script
|
||||
{
|
||||
private StringKey _weather;
|
||||
private float _modifier;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnInitialize(IReadOnlyDictionary<StringKey, object?>? parameters)
|
||||
{
|
||||
if (parameters is null)
|
||||
throw new ArgumentNullException(nameof(parameters));
|
||||
|
||||
if (!parameters.TryGetValue("weather", out var weatherObj) || weatherObj is not string weatherStr)
|
||||
throw new ArgumentException("Parameter 'weather' is required and must be a string.", nameof(parameters));
|
||||
if (!parameters.TryGetValue("modifier", out var modifierObj))
|
||||
throw new ArgumentException("Parameter 'modifier' is required", nameof(parameters));
|
||||
if (modifierObj is not float modifier && modifierObj is not int)
|
||||
throw new ArgumentException("Parameter 'modifier' must be a float or int.", nameof(parameters));
|
||||
var weatherModifier = modifierObj is float modFloat ? modFloat : (int)modifierObj;
|
||||
|
||||
_weather = weatherStr;
|
||||
_modifier = weatherModifier;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void ChangeSpeed(ITurnChoice choice, ref uint speed)
|
||||
{
|
||||
var battle = choice.User.BattleData?.Battle;
|
||||
if (battle is null)
|
||||
return;
|
||||
var weather = battle.WeatherName;
|
||||
if (weather == _weather)
|
||||
{
|
||||
speed = speed.MultiplyOrMax(_modifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user