runuo/Scripts/Misc/AutoRestart.cs
Mark Sturgill d2c670f5c3 Implement Core.TickCount
Convert movement, actions (lift/use), combat, and spells to use Core.TickCount and avoid DateTime caveats (performance, system time dependency, etc)
Refactor DateTime.Now to DateTime.UtcNow
Add LOS check for Iron Maiden addon
2013-10-06 03:21:18 -07:00

88 lines
No EOL
2.2 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using Server;
using Server.Commands;
namespace Server.Misc
{
public class AutoRestart : Timer
{
public static bool Enabled = false; // is the script enabled?
private static TimeSpan RestartTime = TimeSpan.FromHours( 2.0 ); // time of day at which to restart
private static TimeSpan RestartDelay = TimeSpan.Zero; // how long the server should remain active before restart (period of 'server wars')
private static TimeSpan WarningDelay = TimeSpan.FromMinutes( 1.0 ); // at what interval should the shutdown message be displayed?
private static bool m_Restarting;
private static DateTime m_RestartTime;
public static bool Restarting
{
get{ return m_Restarting; }
}
public static void Initialize()
{
CommandSystem.Register( "Restart", AccessLevel.Administrator, new CommandEventHandler( Restart_OnCommand ) );
new AutoRestart().Start();
}
public static void Restart_OnCommand( CommandEventArgs e )
{
if ( m_Restarting )
{
e.Mobile.SendMessage( "The server is already restarting." );
}
else
{
e.Mobile.SendMessage( "You have initiated server shutdown." );
Enabled = true;
m_RestartTime = DateTime.UtcNow;
}
}
public AutoRestart() : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ) )
{
Priority = TimerPriority.FiveSeconds;
m_RestartTime = DateTime.UtcNow.Date + RestartTime;
if ( m_RestartTime < DateTime.UtcNow )
m_RestartTime += TimeSpan.FromDays( 1.0 );
}
private void Warning_Callback()
{
World.Broadcast( 0x22, true, "The server is going down shortly." );
}
private void Restart_Callback()
{
Core.Kill( true );
}
protected override void OnTick()
{
if ( m_Restarting || !Enabled )
return;
if ( DateTime.UtcNow < m_RestartTime )
return;
if ( WarningDelay > TimeSpan.Zero )
{
Warning_Callback();
Timer.DelayCall( WarningDelay, WarningDelay, new TimerCallback( Warning_Callback ) );
}
AutoSave.Save();
m_Restarting = true;
Timer.DelayCall( RestartDelay, new TimerCallback( Restart_Callback ) );
}
}
}