namespace PkmnLib.Plugin.Gen7.Scripts.Abilities; /// /// SpeedModifierInWeather is a generic ability that modifies the user's speed in a specific weather condition. /// This ability is used by abilities like Swift Swim, Chlorophyll, and Sand Rush. /// /// Bulbapedia - Swift Swim /// Bulbapedia - Chlorophyll /// Bulbapedia - Sand Rush /// [Script(ScriptCategory.Ability, "speed_modifier_in_weather")] public class SpeedModifierInWeather : Script, IScriptOnInitialize { private StringKey _weather; private float _modifier; /// public void OnInitialize(IReadOnlyDictionary? 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 && 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; } /// 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); } } }