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); }