public InternalTimer( EnhancedBandageContext context, TimeSpan delay )
     : base(delay)
 {
     m_Context = context;
     Priority = TimerPriority.FiftyMS;
 }
        public static EnhancedBandageContext BeginHeal( Mobile healer, Mobile patient )
        {
            bool isDeadPet = ( patient is BaseCreature && ((BaseCreature)patient).IsDeadPet );

            if ( patient is BaseCreature && ((BaseCreature)patient).IsAnimatedDead )
            {
                healer.SendLocalizedMessage( 500951 ); // You cannot heal that.
            }
            else if ( !patient.Poisoned && patient.Hits == patient.HitsMax && !BleedAttack.IsBleeding( patient ) && !isDeadPet )
            {
                healer.SendLocalizedMessage( 500955 ); // That being is not damaged!
            }
            else if ( !patient.Alive && (patient.Map == null || !patient.Map.CanFit( patient.Location, 16, false, false )) )
            {
                healer.SendLocalizedMessage( 501042 ); // Target cannot be resurrected at that location.
            }
            else if ( healer.CanBeBeneficial( patient, true, true ) )
            {
                healer.DoBeneficial( patient );

                bool onSelf = ( healer == patient );
                int dex = healer.Dex;

                double seconds;
                double resDelay = ( patient.Alive ? 0.0 : 5.0 );

                if ( onSelf )
                {
                    if ( Core.AOS )
                        seconds = 5.0 + (0.5 * ((double)(120 - dex) / 10)); // TODO: Verify algorithm
                    else
                        seconds = 9.4 + (0.6 * ((double)(120 - dex) / 10));
                }
                else
                {
                    if ( Core.AOS && GetPrimarySkill( patient ) == SkillName.Veterinary )
                    {
                        //if ( dex >= 40 )
                            seconds = 2.0;
                        //else
                        //	seconds = 3.0;
                    }
                    else
                    {
                        if ( dex >= 100 )
                            seconds = 3.0 + resDelay;
                        else if ( dex >= 40 )
                            seconds = 4.0 + resDelay;
                        else
                            seconds = 5.0 + resDelay;
                    }
                }

                EnhancedBandageContext context = GetContext( healer );

                if ( context != null )
                    context.StopHeal();

                context = new EnhancedBandageContext( healer, patient, TimeSpan.FromSeconds( seconds ) );

                m_Table[healer] = context;

                if ( !onSelf )
                    patient.SendLocalizedMessage( 1008078, false, healer.Name ); //  : Attempting to heal you.

                healer.SendLocalizedMessage( 500956 ); // You begin applying the Enhanced Bandages.
                return context;
            }

            return null;
        }