2017-06-05 22:49:26 -04:00
using System ;
using System.Threading.Tasks ;
2017-06-12 20:24:12 -04:00
using System.Collections.Generic ;
2017-06-05 22:49:26 -04:00
using SharedLibrary ;
using SharedLibrary.Interfaces ;
using SharedLibrary.Network ;
2017-06-12 17:47:31 -04:00
using SharedLibrary.Helpers ;
2017-06-05 22:49:26 -04:00
namespace Plugin
{
2017-06-06 23:45:21 -04:00
public class FastRestartConfig : Serialize < FastRestartConfig >
{
public bool Enabled ;
}
public class CEnableFastRestart : Command
{
public CEnableFastRestart ( ) : base ( "frenable" , "enable fast restarting at the end of a map. syntax: !fre" , "fre" , Player . Permission . SeniorAdmin , 0 , false ) { }
public override async Task ExecuteAsync ( Event E )
{
2017-06-12 20:24:12 -04:00
FastRestartPlugin . ConfigManager . UpdateProperty ( E . Owner , new KeyValuePair < string , object > ( "Enabled" , true ) ) ;
await E . Origin . Tell ( "Fast restarting is now enabled for this server" ) ;
2017-06-06 23:45:21 -04:00
}
}
public class CDisableFastRestart : Command
{
public CDisableFastRestart ( ) : base ( "fredisable" , "disable fast restarting at the end of a map. syntax: !frd" , "frd" , Player . Permission . SeniorAdmin , 0 , false ) { }
public override async Task ExecuteAsync ( Event E )
{
2017-06-12 20:24:12 -04:00
FastRestartPlugin . ConfigManager . UpdateProperty ( E . Owner , new KeyValuePair < string , object > ( "Enabled" , false ) ) ;
await E . Origin . Tell ( "Fast restarting is now disabled for this server" ) ;
2017-06-06 23:45:21 -04:00
}
}
2017-06-05 22:49:26 -04:00
public class FastRestartPlugin : IPlugin
{
bool MatchEnded ;
DateTime MatchEndTime ;
2017-06-12 20:24:12 -04:00
public static ConfigurationManager ConfigManager { get ; private set ; }
2017-06-06 23:45:21 -04:00
public string Name { get { return "Fast Restarter" ; } }
2017-06-05 22:49:26 -04:00
public float Version { get { return 1.0f ; } }
public string Author { get { return "RaidMax" ; } }
public async Task OnEventAsync ( Event E , Server S )
{
if ( E . Type = = Event . GType . Start )
{
try
{
await S . GetDvarAsync < int > ( "scr_intermission_time" ) ;
}
catch ( SharedLibrary . Exceptions . DvarException )
{
2017-06-12 17:47:31 -04:00
await S . SetDvarAsync ( "scr_intermission_time" , 20 ) ;
2017-06-06 23:45:21 -04:00
}
2017-06-05 22:49:26 -04:00
}
}
2017-06-12 17:47:31 -04:00
public async Task OnLoadAsync ( Server S )
2017-06-05 22:49:26 -04:00
{
2017-06-12 20:24:12 -04:00
ConfigManager = new ConfigurationManager ( typeof ( FastRestartPlugin ) ) ;
ConfigManager . AddConfiguration ( S ) ;
if ( ConfigManager . GetConfiguration ( S ) . Keys . Count = = 0 )
ConfigManager . AddProperty ( S , new KeyValuePair < string , object > ( "Enabled" , false ) ) ;
2017-06-05 22:49:26 -04:00
}
public async Task OnTickAsync ( Server S )
{
2017-06-12 20:24:12 -04:00
if ( ( bool ) ConfigManager . GetConfiguration ( S ) [ "Enabled" ] = = false )
2017-06-06 23:45:21 -04:00
return ;
2017-06-05 22:49:26 -04:00
MatchEnded = ( await S . GetDvarAsync < int > ( "scr_gameended" ) ) . Value = = 1 ;
if ( MatchEnded & & MatchEndTime = = DateTime . MinValue )
MatchEndTime = DateTime . Now ;
2017-06-06 23:45:21 -04:00
// I'm pretty sure the timelength from game ended to scoreboard popup is 2000ms
if ( MatchEnded & & ( DateTime . Now - MatchEndTime ) . TotalSeconds > = ( ( await S . GetDvarAsync < int > ( "scr_intermission_time" ) ) . Value - 2 ) )
2017-06-05 22:49:26 -04:00
{
await S . ExecuteCommandAsync ( "fast_restart" ) ;
MatchEndTime = DateTime . MinValue ;
}
}
2017-06-12 17:47:31 -04:00
public Task OnUnloadAsync ( Server S )
2017-06-05 22:49:26 -04:00
{
return null ;
}
}
}