#include <sourcemod>
#undef REQUIRE_PLUGIN
#include <adminmenu>
new Handle:hTopMenu,
bool:bInCountdown;
public OnPluginStart()
{
RegAdminCmd("sm_restart", Cmd_Restart, ADMFLAG_ROOT);
new Handle:topmenu;
if(LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) OnAdminMenuReady(topmenu);
}
public OnLibraryRemoved(const String:name[])
{
if(StrEqual(name, "adminmenu")) hTopMenu = INVALID_HANDLE;
}
public OnAdminMenuReady(Handle:topmenu)
{
if(topmenu == hTopMenu) return;
hTopMenu = topmenu;
new TopMenuObject:server_cmds = FindTopMenuCategory(hTopMenu, ADMINMENU_SERVERCOMMANDS);
if(server_cmds != INVALID_TOPMENUOBJECT) AddToTopMenu(hTopMenu, "sm_restart", TopMenuObject_Item, AdminMenu_Restart, server_cmds, "sm_restart", ADMFLAG_ROOT);
}
public AdminMenu_Restart(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, param, String:buffer[], maxlength)
{
switch(action)
{
case TopMenuAction_DisplayOption: Format(buffer, maxlength, "Перезагрузить сервер", param);
case TopMenuAction_SelectOption: Restart(param);
}
}
public Action:Cmd_Restart(client, args)
{
Restart(client);
return Plugin_Handled;
}
stock Restart(client)
{
if(bInCountdown) return;
PrintCenterTextAll("Сервер будет перезагружен через 10 сек.");
CreateTimer(1.0, Timer_Restart, _, TIMER_REPEAT);
}
public Action:Timer_Restart(Handle:timer)
{
bInCountdown = true;
static time = 10;
if(--time < 1)
{
PrintCenterTextAll("Сервер перезагружается.");
PrintToChatAll("\x04[SM] \x01Сервер перезагружается.");
if(time == -1) ServerCommand("sm_kick @all Сервер перезагружается");
if(time == -2) ServerCommand("_restart");
}
else PrintCenterTextAll("Сервер будет перезагружен через %d сек.", time);
return Plugin_Continue;
}