ModernUO/Projects/UOContent/Spells/Targeting/SpellTargetPoint3D.cs
2022-07-16 19:45:41 -07:00

53 lines
1.4 KiB
C#

using Server.Targeting;
namespace Server.Spells
{
public interface ISpellTargetingPoint3D : ISpell
{
void Target(IPoint3D p);
}
public class SpellTargetPoint3D : Target, ISpellTarget
{
private readonly bool _retryOnLos;
private ISpellTargetingPoint3D _spell;
public SpellTargetPoint3D(
ISpellTargetingPoint3D spell, TargetFlags flags = TargetFlags.None, int range = 12, bool retryOnLOS = false
) : base(range, true, flags)
{
_spell = spell;
_retryOnLos = retryOnLOS;
}
public ISpell Spell => _spell;
protected override void OnTarget(Mobile from, object o)
{
_spell.Target(o as IPoint3D);
}
protected override void OnCantSeeTarget(Mobile from, object o)
{
from.SendLocalizedMessage(500237); // Target can not be seen.
}
protected override void OnTargetOutOfLOS(Mobile from, object o)
{
if (!_retryOnLos)
{
return;
}
from.SendLocalizedMessage(501943); // Target cannot be seen. Try again.
from.Target = new SpellTargetPoint3D(_spell);
from.Target.BeginTimeout(from, TimeoutTime - Core.TickCount);
_spell = null; // Needed?
}
protected override void OnTargetFinish(Mobile from)
{
_spell?.FinishSequence();
}
}
}