39 lines
1.3 KiB
C#

namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
/// <summary>
/// Aftermath is an ability that causes the attacker to lose 1/4 of its maximum HP if it knocks out the user with a contact move.
/// This effect only triggers if the move that caused the faint was a contact move.
///
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Aftermath_(Ability)">Bulbapedia - Aftermath</see>
/// </summary>
[Script(ScriptCategory.Ability, "aftermath")]
public class Aftermath : Script, IScriptOnIncomingHit, IScriptOnFaint
{
private IExecutingMove? _lastAttack;
/// <inheritdoc />
public void OnIncomingHit(IExecutingMove move, IPokemon target, byte hit)
{
_lastAttack = !move.GetHitData(target, hit).IsContact ? move : null;
}
/// <inheritdoc />
public void OnFaint(IPokemon pokemon, DamageSource source)
{
if (source != DamageSource.MoveDamage)
return;
if (_lastAttack is null)
return;
var user = _lastAttack.User;
if (!user.IsUsable)
return;
if (user.BattleData is null)
return;
EventBatchId eventBatchId = new();
user.BattleData.Battle.EventHook.Invoke(new AbilityTriggerEvent(pokemon)
{
BatchId = eventBatchId,
});
user.Damage(user.MaxHealth / 4, DamageSource.Misc, eventBatchId);
}
}