ModernUO/Projects/UOContent/Mobiles/Abilities/StunAttack.cs
2024-04-30 19:20:06 -07:00

43 lines
1.3 KiB
C#

using System;
using System.Collections.Generic;
using Server.Items;
namespace Server.Mobiles;
public abstract class StunAttack : MonsterAbility
{
// Prevents infinite loop
private static readonly HashSet<BaseCreature> _stunning = [];
public override MonsterAbilityTrigger AbilityTrigger => MonsterAbilityTrigger.GiveMeleeDamage;
public override MonsterAbilityType AbilityType => MonsterAbilityType.Stun;
public override double ChanceToTrigger => 0.3;
public virtual TimeSpan StunDuration => TimeSpan.FromSeconds(5.0);
public override bool CanTrigger(BaseCreature source, MonsterAbilityTrigger trigger) => !_stunning.Contains(source) && base.CanTrigger(source, trigger);
public override void Trigger(MonsterAbilityTrigger trigger, BaseCreature source, Mobile target)
{
if (source.Weapon is BaseWeapon weapon)
{
_stunning.Add(source);
weapon.OnHit(source, target);
_stunning.Remove(source);
}
if (target.Alive)
{
target.Frozen = true;
Timer.DelayCall(StunDuration, Recover, target);
}
base.Trigger(trigger, source, target);
}
protected virtual void Recover(Mobile defender)
{
defender.Frozen = false;
defender.Combatant = null;
}
}