ModernUO/Projects/UOContent/Mobiles/Abilities/DrainLifeAttack.cs

68 lines
2.2 KiB
C#

using System;
namespace Server.Mobiles;
public class DrainLifeAttack : MonsterAbilitySingleTargetDoT
{
public override MonsterAbilityType AbilityType => MonsterAbilityType.DrainLife;
public override MonsterAbilityTrigger AbilityTrigger => MonsterAbilityTrigger.GiveMeleeDamage;
public override TimeSpan MinDelay => TimeSpan.FromSeconds(1.0);
public override TimeSpan MaxDelay => TimeSpan.FromSeconds(1.0);
protected override int GetCount(BaseCreature source, Mobile defender) => 5;
public override double ChanceToTrigger => 0.5;
private void DrainLife(BaseCreature source, Mobile defender)
{
source.DoHarmful(defender);
defender.Mana -= 15;
if (defender.Alive)
{
var damageGiven = AOS.Damage(defender, source, 5, 0, 0, 0, 0, 100);
source.Hits += damageGiven;
}
else
{
RemoveEffect(source, defender);
defender.SendLocalizedMessage(1070849); // The drain on your life force is gone.
}
}
protected override bool CanEffectTarget(MonsterAbilityTrigger trigger, BaseCreature source, Mobile defender) =>
base.CanEffectTarget(trigger, source, defender) && defender.Mana > 14;
protected override void OnBeforeTarget(MonsterAbilityTrigger trigger, BaseCreature source, Mobile defender)
{
if (RemoveEffect(source, defender))
{
defender.SendLocalizedMessage(1070847); // The creature continues to steal your life force!
}
else
{
defender.SendLocalizedMessage(1070848); // You feel your life force being stolen away.
}
}
protected override void OnTarget(MonsterAbilityTrigger trigger, BaseCreature source, Mobile defender)
{
base.OnTarget(trigger, source, defender);
DrainLife(source, defender);
}
protected override void EffectTick(BaseCreature source, Mobile defender, ref TimeSpan nextDelay)
{
DrainLife(source, defender);
}
protected override void EndEffect(BaseCreature source, Mobile defender)
{
}
protected override void OnEffectExpired(BaseCreature source, Mobile defender)
{
defender.SendLocalizedMessage(1070849); // The drain on your life force is gone.
}
}