diff --git a/scripting/l4d2_autorestart.sp b/scripting/l4d2_autorestart.sp index 4236db8..88bcfc9 100644 --- a/scripting/l4d2_autorestart.sp +++ b/scripting/l4d2_autorestart.sp @@ -26,9 +26,22 @@ public void OnPluginStart() SetFailState("This plugin is for L4D/L4D2 only."); } + RegAdminCmd("sm_request_restart", Command_RequestRestart, ADMFLAG_GENERIC); + CreateTimer(60.0, Timer_Check, _, TIMER_REPEAT); } +public Action Command_RequestRestart(int client, int args) { + if(IsServerEmpty()) { + ReplyToCommand(client, "Restarting..."); + LogAction(client, -1, "requested to restart server if empty."); + ServerCommand("quit"); + }else{ + ReplyToCommand(client, "Players are online."); + } + return Plugin_Handled; +} + public Action Timer_Check(Handle h) { // char time[8]; // FormatTime(strtime, sizeof(strtime), "%H%M"); @@ -38,24 +51,37 @@ public Action Timer_Check(Handle h) { // ServerCommand("quit"); // return Plugin_Stop; // }else - if(IsServerEmpty()) { + if(IsServerEmptyWithOnlyBots()) { //Server is stuck in non-hibernation with only bots, quit LogAction(0, -1, "Detected server in hibernation with no players, restarting..."); ServerCommand("quit"); } } -//Returns true if there is a bot connected and there is no real players -bool IsServerEmpty() { - bool hasClient; - for(int i = 1; i < MaxClients; i++) { +bool IsServerEmptyWithOnlyBots() { + bool hasBot; + for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i)) { if(IsFakeClient(i)) - hasClient = true; + //Has a bot, but there could be other players. + hasBot = true; else + //Is player, not empty. return false; } } - return hasClient; + return hasBot; +} + +//Returns true if there is a bot connected and there is no real players +bool IsServerEmpty() { + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i)) { + if(!IsFakeClient(i)) + return false; + + } + } + return true; }