public bool QueueAction( int actionID )
        {
            Mobile mob = AttachedTo as Mobile;
            if ( m_QueuedActionTimer != null )
            {
                if ( m_QueuedActionTimer.Action == actionID ) // clear queue
                {
                    m_QueuedActionTimer.Stop();
                    m_QueuedActionTimer = null;
                    return false; // tell them we cleared our queue
                }
                else
                {
                    m_QueuedActionTimer.Stop();
                    m_QueuedActionTimer = new QueuedActionTimer( AttachedTo as Mobile, actionID );
                }
            }
            else
                m_QueuedActionTimer = new QueuedActionTimer( AttachedTo as Mobile, actionID );

            bool atk = ( actionID < 100 || actionID == 999 );

            TimeSpan waitTime;
            if ( atk )
                waitTime = Max( TimeSpan.Zero, m_NextAttackAction - DateTime.Now );
            else
                waitTime = Max( TimeSpan.Zero, m_NextDefenseAction - DateTime.Now );

            if ( ( actionID == 999 || actionID == (int)AttackType.Throw ) && mob.Weapon is BaseRanged ) // ranged
            {
                waitTime = Max( waitTime, ((BaseRanged)mob.Weapon).RequiredStillTime( mob ) - (DateTime.Now - mob.LastMoveTime) );
                if ( m_AimingTimer != null )
                    waitTime = Max( waitTime, m_AimingTimer.Next - DateTime.Now );
            }
            m_QueuedActionTimer.Delay = waitTime;
            m_QueuedActionTimer.Start();

            return true;
        }
 public void CancelQueuedAction()
 {
     if ( m_QueuedActionTimer != null )
     {
         m_QueuedActionTimer.Stop();
         m_QueuedActionTimer = null;
     }
 }