RestartManager: last polish + safe restart command
+ remove UptimeRestarts
This commit is contained in:
parent
4643f44cb1
commit
591065c25c
@ -1,6 +1,7 @@
|
|||||||
#include <sourcemod>
|
#include <sourcemod>
|
||||||
#include <files>
|
#include <files>
|
||||||
#include <mapchooser_extended>
|
#include <mapchooser_extended>
|
||||||
|
#include <multicolors>
|
||||||
|
|
||||||
#pragma semicolon 1
|
#pragma semicolon 1
|
||||||
#pragma newdecls required
|
#pragma newdecls required
|
||||||
@ -20,10 +21,10 @@ public Plugin myinfo =
|
|||||||
name = "RestartManager",
|
name = "RestartManager",
|
||||||
author = "Dogan + Neon",
|
author = "Dogan + Neon",
|
||||||
description = "Display Server Uptime and do controlled Restarts",
|
description = "Display Server Uptime and do controlled Restarts",
|
||||||
version = "1.0.0",
|
version = "2.0.0",
|
||||||
url = ""
|
url = ""
|
||||||
};
|
};
|
||||||
// TODO: SAFE command for admins to restart!!!
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
// Purpose:
|
// Purpose:
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
@ -31,6 +32,7 @@ public void OnPluginStart()
|
|||||||
{
|
{
|
||||||
RegAdminCmd("uptime", Command_Uptime, ADMFLAG_GENERIC, "Displays server Uptime");
|
RegAdminCmd("uptime", Command_Uptime, ADMFLAG_GENERIC, "Displays server Uptime");
|
||||||
RegAdminCmd("sm_uptime", Command_Uptime, ADMFLAG_GENERIC, "Displays server Uptime");
|
RegAdminCmd("sm_uptime", Command_Uptime, ADMFLAG_GENERIC, "Displays server Uptime");
|
||||||
|
RegAdminCmd("sm_forcerestart", Command_ForceRestart, ADMFLAG_RCON, "Force-restarts the server");
|
||||||
|
|
||||||
g_cvarDefaultMap = CreateConVar("sm_defaultmap", "ze_atix_panic_b3t", "default map of the server");
|
g_cvarDefaultMap = CreateConVar("sm_defaultmap", "ze_atix_panic_b3t", "default map of the server");
|
||||||
g_cvarMaxUptime = CreateConVar("sm_maxuptime", "68", "Uptime in hours after which the server should be restarted", FCVAR_NONE);
|
g_cvarMaxUptime = CreateConVar("sm_maxuptime", "68", "Uptime in hours after which the server should be restarted", FCVAR_NONE);
|
||||||
@ -44,6 +46,18 @@ public void OnPluginStart()
|
|||||||
RegServerCmd("changelevel", BlockMapSwitch);
|
RegServerCmd("changelevel", BlockMapSwitch);
|
||||||
|
|
||||||
CreateTimer(60.0, CheckForRestart, _, TIMER_REPEAT);
|
CreateTimer(60.0, CheckForRestart, _, TIMER_REPEAT);
|
||||||
|
CreateTimer(20.0, ForceRestartMessage, _, TIMER_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public Action Command_ForceRestart(int client, int args)
|
||||||
|
{
|
||||||
|
ReplyToCommand(client, "[SM] Confirm the force-restart please!");
|
||||||
|
OpenAdminPanel(client);
|
||||||
|
|
||||||
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
@ -94,11 +108,56 @@ public Action Command_Uptime(int client, int args)
|
|||||||
if (g_bRestart)
|
if (g_bRestart)
|
||||||
ReplyToCommand(client, "[SM] Server is going to restart on next mapswitch");
|
ReplyToCommand(client, "[SM] Server is going to restart on next mapswitch");
|
||||||
else
|
else
|
||||||
ReplyToCommand(client, "[SM] Time until next restart: %.2fh", ((g_cvarMaxUptime.FloatValue * 3600.0) - GetEngineTime()) / 3600.0);
|
ReplyToCommand(client, "[SM] Time until next force-restart: %.2fh", ((g_cvarMaxUptime.FloatValue * 3600.0) - GetEngineTime()) / 3600.0);
|
||||||
|
|
||||||
return Plugin_Handled;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public void OpenAdminPanel(int client)
|
||||||
|
{
|
||||||
|
Menu menu = new Menu(MenuHandler_MainMenu);
|
||||||
|
|
||||||
|
menu.SetTitle("Are you sure you want to force-restart the server?", client);
|
||||||
|
|
||||||
|
char sBuffer[32];
|
||||||
|
|
||||||
|
Format(sBuffer, sizeof(sBuffer), "Yes.");
|
||||||
|
menu.AddItem("0", sBuffer);
|
||||||
|
|
||||||
|
Format(sBuffer, sizeof(sBuffer), "No.");
|
||||||
|
menu.AddItem("1", sBuffer);
|
||||||
|
|
||||||
|
menu.Display(client, MENU_TIME_FOREVER);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int selection)
|
||||||
|
{
|
||||||
|
char sMap[64];
|
||||||
|
GetCurrentMap(sMap, sizeof(sMap));
|
||||||
|
|
||||||
|
switch(action)
|
||||||
|
{
|
||||||
|
case(MenuAction_Select):
|
||||||
|
{
|
||||||
|
switch(selection)
|
||||||
|
{
|
||||||
|
case(0): PrepareRestart(sMap, client, true);
|
||||||
|
case(1): PrintToChat(client, "[SM] You declined the force-restart.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case(MenuAction_Cancel):
|
||||||
|
{
|
||||||
|
PrintToChat(client, "[SM] You declined the force-restart.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
// Purpose:
|
// Purpose:
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
@ -157,17 +216,14 @@ public bool IsItTimeToRestartForced()
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
g_bRestart = true;
|
g_bRestart = true;
|
||||||
NotifyAdmins();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
// Purpose:
|
// Purpose:
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
public void PrepareRestart(char[] sMap)
|
public void PrepareRestart(char[] sMap, int client, bool bAdmin)
|
||||||
{
|
{
|
||||||
NotifyAdmins();
|
|
||||||
|
|
||||||
g_fCumulativeUptime += GetEngineTime();
|
g_fCumulativeUptime += GetEngineTime();
|
||||||
|
|
||||||
char sUptime[64];
|
char sUptime[64];
|
||||||
@ -186,14 +242,52 @@ public void PrepareRestart(char[] sMap)
|
|||||||
delete NextmapFile;
|
delete NextmapFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(bAdmin)
|
||||||
|
{
|
||||||
|
LogToFile("addons/sourcemod/logs/restarts.log", "%N successfully force-restarted the Server.", client);
|
||||||
|
PrintToChat(client, "[SM] You confirmed the force-restart.");
|
||||||
|
|
||||||
|
CPrintToChatAll("{red}WARNING:{white} Restarting Server in 8 Seconds!");
|
||||||
|
CPrintToChatAll("{red}WARNING:{white} Restarting Server in 8 Seconds");
|
||||||
|
CPrintToChatAll("{red}WARNING:{white} You may disconnect, reconnect if necessary!");
|
||||||
|
PrintCenterTextAll("WARNING: Restarting Server in 8 Seconds.");
|
||||||
|
|
||||||
|
Panel hNotifyPanel = new Panel(GetMenuStyleHandle(MenuStyle_Radio));
|
||||||
|
hNotifyPanel.DrawItem("WARNING: Restarting Server in 8 Seconds.", ITEMDRAW_RAWLINE);
|
||||||
|
hNotifyPanel.DrawItem("", ITEMDRAW_SPACER);
|
||||||
|
hNotifyPanel.DrawItem("IMPORTANT: You may disconnect, reconnect if necessary!", ITEMDRAW_RAWLINE);
|
||||||
|
for(int i = 1; i <= MaxClients; i++)
|
||||||
|
{
|
||||||
|
hNotifyPanel.Send(client, MenuHandler_NotifyPanel, 8);
|
||||||
|
}
|
||||||
|
delete hNotifyPanel;
|
||||||
|
|
||||||
|
CreateTimer(8.0, AdminForceRestart);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
SimulateMapEnd();
|
SimulateMapEnd();
|
||||||
for(int i = 1; i <= MaxClients; i++)
|
for(int i = 1; i <= MaxClients; i++)
|
||||||
{
|
{
|
||||||
if(IsClientConnected(i) && !IsFakeClient(i))
|
if(IsClientConnected(i) && !IsFakeClient(i))
|
||||||
ClientCommand(i, "retry");
|
ClientCommand(i, "retry");
|
||||||
}
|
}
|
||||||
|
|
||||||
LogToFile("addons/sourcemod/logs/restarts.log", "Successfully force-restarted the Server.");
|
LogToFile("addons/sourcemod/logs/restarts.log", "Successfully force-restarted the Server.");
|
||||||
RequestFrame(Restart);
|
RequestFrame(Restart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
int MenuHandler_NotifyPanel(Menu hMenu, MenuAction iAction, int iParam1, int iParam2)
|
||||||
|
{
|
||||||
|
switch (iAction)
|
||||||
|
{
|
||||||
|
case MenuAction_Select, MenuAction_Cancel:
|
||||||
|
delete hMenu;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
@ -201,8 +295,6 @@ public void PrepareRestart(char[] sMap)
|
|||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
public void PrepareRestartNight()
|
public void PrepareRestartNight()
|
||||||
{
|
{
|
||||||
NotifyAdmins();
|
|
||||||
|
|
||||||
g_fCumulativeUptime += GetEngineTime();
|
g_fCumulativeUptime += GetEngineTime();
|
||||||
|
|
||||||
char sUptime[64];
|
char sUptime[64];
|
||||||
@ -248,7 +340,7 @@ public Action BlockMapSwitch(int args)
|
|||||||
|
|
||||||
char sMap[64];
|
char sMap[64];
|
||||||
GetCmdArg(1, sMap, sizeof(sMap));
|
GetCmdArg(1, sMap, sizeof(sMap));
|
||||||
PrepareRestart(sMap);
|
PrepareRestart(sMap, 0, false);
|
||||||
return Plugin_Handled;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,16 +379,33 @@ public void SetStartMap(char[] sMap)
|
|||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
// Purpose:
|
// Purpose:
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
public void NotifyAdmins()
|
public Action ForceRestartMessage(Handle timer)
|
||||||
{
|
{
|
||||||
|
if(!g_bRestart)
|
||||||
|
return Plugin_Continue;
|
||||||
|
|
||||||
|
CPrintToChatAll("{red}WARNING:{white} Restarting Server when this Map ends!");
|
||||||
|
CPrintToChatAll("{red}WARNING:{white} Restarting Server when this Map ends!");
|
||||||
|
CPrintToChatAll("{red}WARNING:{white} You may disconnect, reconnect if necessary!");
|
||||||
|
|
||||||
|
return Plugin_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public Action AdminForceRestart(Handle timer)
|
||||||
|
{
|
||||||
|
SimulateMapEnd();
|
||||||
for(int i = 1; i <= MaxClients; i++)
|
for(int i = 1; i <= MaxClients; i++)
|
||||||
{
|
{
|
||||||
if(IsValidClient(i) && CheckCommandAccess(i, "", ADMFLAG_KICK))
|
if(IsClientConnected(i) && !IsFakeClient(i))
|
||||||
{
|
ClientCommand(i, "retry");
|
||||||
PrintToChat(i, "[SM] WARNING: Server will be restarted on mapswitch!");
|
|
||||||
PrintToChat(i, "[SM] WARNING: Server will be restarted on mapswitch!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RequestFrame(Restart);
|
||||||
|
|
||||||
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
@ -1,247 +0,0 @@
|
|||||||
#pragma semicolon 1
|
|
||||||
|
|
||||||
#include <sourcemod>
|
|
||||||
#include <files>
|
|
||||||
#include <multicolors>
|
|
||||||
|
|
||||||
float g_fUptime;
|
|
||||||
int g_iRestartCountdown;
|
|
||||||
bool g_bForcedRestart;
|
|
||||||
|
|
||||||
ConVar g_cvarMaxPlayersForControlledRestart;
|
|
||||||
ConVar g_cvarMinPlayersForForcedRestart;
|
|
||||||
ConVar g_cvarMinHoursUptimeForForcedRestart;
|
|
||||||
ConVar g_cvarDefaultMap;
|
|
||||||
|
|
||||||
public Plugin myinfo =
|
|
||||||
{
|
|
||||||
name = "UptimeRestart",
|
|
||||||
author = "Dogan",
|
|
||||||
description = "Display Server Uptime and do controlled Restarts",
|
|
||||||
version = "3.0.0",
|
|
||||||
url = ""
|
|
||||||
};
|
|
||||||
|
|
||||||
public void OnPluginStart()
|
|
||||||
{
|
|
||||||
RegAdminCmd("uptime", Command_Uptime, ADMFLAG_GENERIC, "Displays server Uptime");
|
|
||||||
RegAdminCmd("sm_uptime", Command_Uptime, ADMFLAG_GENERIC, "Displays server Uptime");
|
|
||||||
|
|
||||||
g_cvarMaxPlayersForControlledRestart = CreateConVar("sm_maxplayers_controlled_restart", "1", "Max Amount of Players Connected to Server to do a controlled restart in the night", FCVAR_NONE, true, 1.0, true, 64.0);
|
|
||||||
g_cvarMinPlayersForForcedRestart = CreateConVar("sm_minplayers_forced_restart", "55", "Min Amount of Players Connected to Server to do a forced restart in the afternoon", FCVAR_NONE, true, 1.0, true, 64.0);
|
|
||||||
g_cvarMinHoursUptimeForForcedRestart = CreateConVar("sm_minhours_forced_restart", "60", "Min Hours of Uptime to force a forced restart in the afternoon", FCVAR_NONE, true, 1.0, true, 96.0);
|
|
||||||
g_cvarDefaultMap = CreateConVar("sm_defaultmap", "ze_atix_panic_b3t", "default map of the server");
|
|
||||||
|
|
||||||
g_iRestartCountdown = 5;
|
|
||||||
g_bForcedRestart = false;
|
|
||||||
GetUptimeIfControlledRestart();
|
|
||||||
SetCorrectDefaultMapAgain();
|
|
||||||
|
|
||||||
AutoExecConfig(true, "plugin.UptimeRestarts");
|
|
||||||
|
|
||||||
CreateTimer(60.0, CheckRestart, _, TIMER_REPEAT);
|
|
||||||
CreateTimer(20.0, ForceRestartMessage, _, TIMER_REPEAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnMapEnd()
|
|
||||||
{
|
|
||||||
if(!g_bForcedRestart)
|
|
||||||
return;
|
|
||||||
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Restarting Server now!");
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Restarting Server now!");
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Restarting Server now!");
|
|
||||||
PrintCenterTextAll("WARNING: Restarting Server now!");
|
|
||||||
|
|
||||||
float fUptime = GetEngineTime();
|
|
||||||
g_fUptime = g_fUptime + fUptime;
|
|
||||||
|
|
||||||
char sUptime[64];
|
|
||||||
FloatToString(g_fUptime, sUptime, sizeof(sUptime));
|
|
||||||
File UptimeFile = OpenFile("uptime.txt", "w");
|
|
||||||
UptimeFile.WriteLine(sUptime);
|
|
||||||
delete UptimeFile;
|
|
||||||
|
|
||||||
char sNextmap[64];
|
|
||||||
GetCurrentMap(sNextmap, sizeof(sNextmap));
|
|
||||||
char sMapFile[64];
|
|
||||||
Format(sMapFile, sizeof(sMapFile), "map %s", sNextmap);
|
|
||||||
|
|
||||||
if(!StrEqual(sMapFile, ""))
|
|
||||||
{
|
|
||||||
DeleteFile("cfg/defaultmap.cfg");
|
|
||||||
File NextmapFile = OpenFile("cfg/defaultmap.cfg", "w");
|
|
||||||
NextmapFile.WriteLine(sMapFile);
|
|
||||||
delete NextmapFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 1; i <= MaxClients; i++)
|
|
||||||
{
|
|
||||||
if(IsClientConnected(i))
|
|
||||||
ClientCommand(i, "retry");
|
|
||||||
}
|
|
||||||
|
|
||||||
LogToFile("addons/sourcemod/logs/restarts.txt", "Successfully force-restarted the Server.");
|
|
||||||
CreateTimer(0.01, ForceRestart);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Action ForceRestart(Handle timer)
|
|
||||||
{
|
|
||||||
ServerCommand("_restart");
|
|
||||||
return Plugin_Handled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetCorrectDefaultMapAgain()
|
|
||||||
{
|
|
||||||
DeleteFile("cfg/defaultmap.cfg");
|
|
||||||
char sDefaultMap[64];
|
|
||||||
GetConVarString(g_cvarDefaultMap, sDefaultMap, sizeof(sDefaultMap));
|
|
||||||
char sMapFile[64];
|
|
||||||
Format(sMapFile, sizeof(sMapFile), "map %s", sDefaultMap);
|
|
||||||
File NextmapFile = OpenFile("cfg/defaultmap.cfg", "w");
|
|
||||||
NextmapFile.WriteLine(sMapFile);
|
|
||||||
delete NextmapFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GetUptimeIfControlledRestart()
|
|
||||||
{
|
|
||||||
File UptimeFile = OpenFile("uptime.txt", "r");
|
|
||||||
|
|
||||||
if(UptimeFile != null)//Server was restarted automatically by this plugin
|
|
||||||
{
|
|
||||||
char sUptime[64];
|
|
||||||
UptimeFile.ReadLine(sUptime, sizeof(sUptime));
|
|
||||||
g_fUptime = StringToFloat(sUptime);
|
|
||||||
delete UptimeFile;
|
|
||||||
DeleteFile("uptime.txt");
|
|
||||||
}
|
|
||||||
else//Server crashed or restarted manually
|
|
||||||
LogToFile("addons/sourcemod/logs/restarts.txt", "Server crashed or was restarted manually.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public Action Command_Uptime(int client, int args)
|
|
||||||
{
|
|
||||||
float fUptime = GetEngineTime();
|
|
||||||
char sUptime[64];
|
|
||||||
int iUptime = RoundFloat(fUptime);
|
|
||||||
|
|
||||||
int iDays = (iUptime / 86400);
|
|
||||||
int iHours = (iUptime / 3600) % 24;
|
|
||||||
int iMinutes = (iUptime / 60) % 60;
|
|
||||||
int iSeconds = (iUptime % 60);
|
|
||||||
|
|
||||||
if (iDays)
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Days %d Hours %d Minutes %d Seconds.", iDays, iHours, iMinutes, iSeconds);
|
|
||||||
else if (iHours)
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Hours %d Minutes %d Seconds.", iHours, iMinutes, iSeconds);
|
|
||||||
else if (iMinutes)
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Minutes %d Seconds.", iMinutes, iSeconds);
|
|
||||||
else
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Seconds.", iSeconds);
|
|
||||||
|
|
||||||
ReplyToCommand(client, "[SM] Real Server Uptime: %s", sUptime);
|
|
||||||
|
|
||||||
fUptime = GetEngineTime() + g_fUptime;
|
|
||||||
iUptime = RoundFloat(fUptime);
|
|
||||||
|
|
||||||
iDays = (iUptime / 86400);
|
|
||||||
iHours = (iUptime / 3600) % 24;
|
|
||||||
iMinutes = (iUptime / 60) % 60;
|
|
||||||
iSeconds = (iUptime % 60);
|
|
||||||
|
|
||||||
if (iDays)
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Days %d Hours %d Minutes %d Seconds.", iDays, iHours, iMinutes, iSeconds);
|
|
||||||
else if (iHours)
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Hours %d Minutes %d Seconds.", iHours, iMinutes, iSeconds);
|
|
||||||
else if (iMinutes)
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Minutes %d Seconds.", iMinutes, iSeconds);
|
|
||||||
else
|
|
||||||
Format(sUptime, sizeof(sUptime), "%d Seconds.", iSeconds);
|
|
||||||
|
|
||||||
ReplyToCommand(client, "[SM] Cumulative Server Uptime: %s", sUptime);
|
|
||||||
return Plugin_Handled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Action CheckRestart(Handle timer)
|
|
||||||
{
|
|
||||||
if(g_bForcedRestart)
|
|
||||||
return Plugin_Continue;
|
|
||||||
|
|
||||||
float fMinHoursUptime = g_cvarMinHoursUptimeForForcedRestart.FloatValue * 60.0 * 60.0;
|
|
||||||
|
|
||||||
int iPlayers = GetClientCount(false);
|
|
||||||
for(int i = 1; i <= MaxClients; i++)
|
|
||||||
{
|
|
||||||
if(IsClientConnected(i) && IsFakeClient(i))
|
|
||||||
iPlayers--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((GetEngineTime() > fMinHoursUptime) && (iPlayers > g_cvarMinPlayersForForcedRestart.IntValue))
|
|
||||||
{
|
|
||||||
g_bForcedRestart = true;
|
|
||||||
return Plugin_Continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!IsItRestartTime() || GetEngineTime() < 57500)
|
|
||||||
return Plugin_Continue;
|
|
||||||
|
|
||||||
if(iPlayers > g_cvarMaxPlayersForControlledRestart.IntValue) //jenz's autism bot
|
|
||||||
return Plugin_Continue;
|
|
||||||
|
|
||||||
float fUptime = GetEngineTime();
|
|
||||||
g_fUptime = g_fUptime + fUptime;
|
|
||||||
|
|
||||||
char sUptime[64];
|
|
||||||
FloatToString(g_fUptime, sUptime, sizeof(sUptime));
|
|
||||||
File UptimeFile = OpenFile("uptime.txt", "w");
|
|
||||||
UptimeFile.WriteLine(sUptime);
|
|
||||||
delete UptimeFile;
|
|
||||||
|
|
||||||
CreateTimer(1.0, RestartCountdown, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
|
|
||||||
|
|
||||||
return Plugin_Continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
stock bool IsItRestartTime()
|
|
||||||
{
|
|
||||||
int iTime = GetTime();
|
|
||||||
int iHour;
|
|
||||||
char sTime[32];
|
|
||||||
|
|
||||||
FormatTime(sTime, sizeof(sTime), "%H", iTime);
|
|
||||||
|
|
||||||
iHour = StringToInt(sTime[0]);
|
|
||||||
|
|
||||||
if (iHour >= 3 && iHour < 8)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Action RestartCountdown(Handle timer)
|
|
||||||
{
|
|
||||||
PrintCenterTextAll("WARNING: Restarting Server in %d.", g_iRestartCountdown);
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Restarting Server in %d.", g_iRestartCountdown);
|
|
||||||
g_iRestartCountdown--;
|
|
||||||
|
|
||||||
if(g_iRestartCountdown < 0)
|
|
||||||
{
|
|
||||||
LogToFile("addons/sourcemod/logs/restarts.txt", "Successfully auto-restarted the Server.");
|
|
||||||
ServerCommand("_restart");
|
|
||||||
return Plugin_Handled;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Plugin_Handled; //Server is dead by here anyway xD
|
|
||||||
}
|
|
||||||
|
|
||||||
public Action ForceRestartMessage(Handle timer)
|
|
||||||
{
|
|
||||||
if(!g_bForcedRestart)
|
|
||||||
return Plugin_Continue;
|
|
||||||
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Restarting Server when this Map ends!");
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Restarting Server when this Map ends!");
|
|
||||||
CPrintToChatAll("{red}WARNING:{white} Remember to rejoin after couple seconds!");
|
|
||||||
|
|
||||||
return Plugin_Continue;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user