From 7ddf01ec3d500123e281ff0f1e486738a868b7af Mon Sep 17 00:00:00 2001 From: Jackz Date: Tue, 9 Nov 2021 10:26:37 -0600 Subject: [PATCH] autorestart: Restart when empty over 7 days --- plugins/l4d2_autorestart.smx | Bin 3634 -> 3916 bytes scripting/l4d2_autorestart.sp | 40 ++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/plugins/l4d2_autorestart.smx b/plugins/l4d2_autorestart.smx index 2d59bfd96193e020711036ae12b773821dab9ede..71e87afcc53acb05c55acafc724d264781212c80 100644 GIT binary patch delta 3729 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 Mx{pX@ltc&p2Y8JpzW@LL delta 3444 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 diff --git a/scripting/l4d2_autorestart.sp b/scripting/l4d2_autorestart.sp index 88bcfc9..7a0f8eb 100644 --- a/scripting/l4d2_autorestart.sp +++ b/scripting/l4d2_autorestart.sp @@ -4,13 +4,14 @@ //#define DEBUG #define PLUGIN_VERSION "1.0" +#define MAX_TIME_ONLINE_MS 604800 #include #include //#include +int startupTime, triesBots, triesEmpty; -public Plugin myinfo = -{ +public Plugin myinfo = { name = "L4D2 Autorestart", author = "jackzmc", description = "", @@ -18,8 +19,8 @@ public Plugin myinfo = url = "" }; -public void OnPluginStart() -{ +public void OnPluginStart() { + startupTime = GetTime(); EngineVersion g_Game = GetEngineVersion(); if(g_Game != Engine_Left4Dead && g_Game != Engine_Left4Dead2) { @@ -28,7 +29,7 @@ public void OnPluginStart() RegAdminCmd("sm_request_restart", Command_RequestRestart, ADMFLAG_GENERIC); - CreateTimer(60.0, Timer_Check, _, TIMER_REPEAT); + CreateTimer(30.0, Timer_Check, _, TIMER_REPEAT); } public Action Command_RequestRestart(int client, int args) { @@ -43,21 +44,28 @@ public Action Command_RequestRestart(int client, int args) { } public Action Timer_Check(Handle h) { - // char time[8]; - // FormatTime(strtime, sizeof(strtime), "%H%M"); - // int time = StringToInt(time); - // if(0400 <= time && time <= 0401) { - // //If around 4 AM - // ServerCommand("quit"); - // return Plugin_Stop; - // }else 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"); + if(++triesBots > 0) { + //Server is stuck in non-hibernation with only bots, quit + LogAction(0, -1, "Detected server in hibernation with no players, restarting..."); + ServerCommand("quit"); + } + } else if(GetTime() - startupTime > MAX_TIME_ONLINE_MS) { + LogAction(0, -1, "Server has passed max online time threshold, will restart if remains empty"); + if(IsServerEmpty()) { + if(++triesEmpty > 2) { + LogAction(0, -1, "Server has passed max online time threshold and is empty, restarting now"); + ServerCommand("quit"); + } + } + } else { + triesBots = 0; + triesEmpty = 0; } + return Plugin_Continue; } +// Returns true if server is empty, and there is only bots. No players bool IsServerEmptyWithOnlyBots() { bool hasBot; for(int i = 1; i <= MaxClients; i++) {