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