This commit is contained in:
@@ -3,5 +3,39 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Weather;
|
||||
[Script(ScriptCategory.Weather, "sandstorm")]
|
||||
public class Sandstorm : Script
|
||||
{
|
||||
// TODO: Implement Sandstorm
|
||||
/// <inheritdoc />
|
||||
public override void OnEndTurn(IScriptSource owner, IBattle battle)
|
||||
{
|
||||
foreach (var pokemon in battle.Sides.SelectMany(x => x.Pokemon).WhereNotNull())
|
||||
{
|
||||
if (!pokemon.IsUsable)
|
||||
continue;
|
||||
if (pokemon.Types.Any(x => x.Name == "rock" || x.Name == "ground" || x.Name == "steel"))
|
||||
{
|
||||
// Rock, Ground, and Steel types are immune to Sandstorm damage.
|
||||
continue;
|
||||
}
|
||||
var bypassSandstormArgs = new CustomTriggers.BypassSandstormDamageArgs(pokemon);
|
||||
pokemon.RunScriptHook(x => x.CustomTrigger(CustomTriggers.BypassSandstormDamage, bypassSandstormArgs));
|
||||
if (bypassSandstormArgs.Bypass)
|
||||
continue;
|
||||
|
||||
pokemon.Damage(pokemon.MaxHealth / 16, DamageSource.Weather);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void ChangeDefensiveStatValue(IExecutingMove move, IPokemon target, byte hit, uint offensiveStat,
|
||||
ImmutableStatisticSet<uint> targetStats, Statistic stat, ref uint value)
|
||||
{
|
||||
if (stat == Statistic.SpecialDefense && target.Types.Any(x => x.Name == "rock"))
|
||||
value = value.MultiplyOrMax(1.5f);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
|
||||
{
|
||||
if (move.UseMove.Name == "solar_beam")
|
||||
basePower /= 2;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user