This commit is contained in:
@@ -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