using System; using System.Collections.Generic; using Server; namespace Server.Multis { public class DynamicDecay { public static bool Enabled { get { return Core.ML; } } private static Dictionary m_Stages; static DynamicDecay() { m_Stages = new Dictionary(); Register( DecayLevel.LikeNew, TimeSpan.FromHours( 1 ), TimeSpan.FromHours( 1 ) ); Register( DecayLevel.Slightly, TimeSpan.FromDays( 1 ), TimeSpan.FromDays( 2 ) ); Register( DecayLevel.Somewhat, TimeSpan.FromDays( 1 ), TimeSpan.FromDays( 2 ) ); Register( DecayLevel.Fairly, TimeSpan.FromDays( 1 ), TimeSpan.FromDays( 2 ) ); Register( DecayLevel.Greatly, TimeSpan.FromDays( 1 ), TimeSpan.FromDays( 2 ) ); Register( DecayLevel.IDOC, TimeSpan.FromHours( 12 ), TimeSpan.FromHours( 24 ) ); } public static void Register( DecayLevel level, TimeSpan min, TimeSpan max ) { DecayStageInfo info = new DecayStageInfo( min, max ); if ( m_Stages.ContainsKey( level ) ) m_Stages[level] = info; else m_Stages.Add( level, info ); } public static bool Decays( DecayLevel level ) { return m_Stages.ContainsKey( level ); } public static TimeSpan GetRandomDuration( DecayLevel level ) { if ( !m_Stages.ContainsKey( level ) ) return TimeSpan.Zero; DecayStageInfo info = m_Stages[level]; long min = info.MinDuration.Ticks; long max = info.MaxDuration.Ticks; return TimeSpan.FromTicks( min + (long)( Utility.RandomDouble() * ( max - min ) ) ); } } public class DecayStageInfo { private TimeSpan m_MinDuration; private TimeSpan m_MaxDuration; public TimeSpan MinDuration { get { return m_MinDuration; } } public TimeSpan MaxDuration { get { return m_MaxDuration; } } public DecayStageInfo( TimeSpan min, TimeSpan max ) { m_MinDuration = min; m_MaxDuration = max; } } }