예제 #1
0
        public virtual bool CanCast()
        {
            if (!Caster.CheckAlive())
            {
                return(false);
            }

            if (IsWand() && Caster.Spell != null && Caster.Spell.IsCasting)
            {
                Caster.SendLocalizedMessage(502643); // You can not cast a spell while frozen.
                return(false);
            }

            if (Caster.Spell != null && Caster.Spell.IsCasting)
            {
                Caster.SendLocalizedMessage(502642); // You are already casting a spell.
                return(false);
            }

            if (!IsWand() && (Caster.Paralyzed || Caster.Frozen))
            {
                Caster.SendLocalizedMessage(502643); // You can not cast a spell while frozen.
                return(false);
            }

            if (CheckNextSpellTime && Core.TickCount < Caster.NextSpellTime)
            {
                Caster.SendLocalizedMessage(502644); // You have not yet recovered from casting a spell.
                return(false);
            }

            if (!SpellHelper.CheckValidHands(Caster))
            {
                Caster.SendLocalizedMessage(502626); // Your hands must be free to cast spells or meditate.
                return(false);
            }

            if (Caster is PlayerMobile player && player.PeacedUntil > DateTime.Now)
            {
                Caster.SendLocalizedMessage(1072060); // You cannot cast a spell while calmed.
                return(false);
            }

            if (Mana > Caster.Mana)
            {
                Caster.LocalOverheadMessage(MessageType.Regular, 0x22, 502625, $"{Mana}"); // Insufficient mana
                return(false);
            }

            if (Caster.Spell != null || !Caster.CheckSpellCast(this) || !Caster.Region.OnBeginSpellCast(Caster, this))
            {
                return(false);
            }

            return(true);
        }