41 lines
1.5 KiB
C#
41 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
} |