Команда позволяет перезапустить ваш сервер любым удобным вам вариантом: в определенное время и немедленно! Вы можете установить авто-рестарт на определенный момент времени вплоть до секунд и можете изменить это время. Все данные сохраняются в файл '../scriptfilse/restart.ini'. Если вы забыли на какое время установлен авто-рестарт, то можете это узнать (не открывая файл '../scriptfilse/restart.ini' или можете там :3). Если вам понадобится отменить рестарт, то пожалуйста.
Автор: Untonyst
Открыть/закрыть
PHP код:
#include <dc_cmd>
#include <sscanf2>
#include <mxINI>
new
restart_hour, restart_minute, restart_second,
restart_timer;
const DEFAULT_RESTART_HOUR = 00, DEFAULT_RESTART_MINUTE = 00, DEFAULT_RESTART_SECOND = 00;
enum
{
DLG_RESTART_INPUT_OR_NOT = 1,
DLG_RESTART_INPUT_INFO
};
COMMAND:restart(playerid, params[])
{
if(sscanf(params, "i", params[0]))
{
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFFFF}Введите /restart <тип>");
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFACD}Типы{FFFFFF}:");
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFACD}| {FFFFFF}0 {FFFACD}- узнать время на рестарт");
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFACD}| {FFFFFF}1 {FFFACD}- установить новое время");
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFACD}| {FFFFFF}2 {FFFACD}- загрузить последние изменения");
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFACD}| {FFFFFF}3 {FFFACD}- перезапустить сервер сейчас");
SendClientMessage(playerid, 0xAAC5E3FF, "{FFFACD}| {FFFFFF}4 {FFFACD}- отменить рестарт");
return 0;
}
switch(params[0])
{
case 0:
{
static const format_message[] = "{FFFACD}Рестарт произойдет в {FFFFFF}%i:%i:%i {FFFACD}!";
new send_message[sizeof(format_message) + (-6) + 6 + 1];
format(send_message, sizeof(send_message), format_message, restart_hour, restart_minute, restart_second);
SendClientMessage(playerid, 0xAAC5E3FF, send_message);
return 1;
}
case 1:
{
return ShowPlayerDialog(playerid, DLG_RESTART_INPUT_OR_NOT, DIALOG_STYLE_MSGBOX, "Установка времени на рестарт:", "{FFFFFF}Вы действительно хотите обновить время на рестарт сервера?", "Да", "Нет");
}
case 2:
{
if(!fexist("restart.ini"))
{
SendClientMessage(playerid, 0xAAC5E3FF, "{FF6347}Невозможно совершить выбранное действие!");
return 0;
}
new restart_file = ini_openFile("restart.ini");
ini_getInteger(restart_file, "hour", restart_hour);
ini_getInteger(restart_file, "minute", restart_minute);
ini_getInteger(restart_file, "second", restart_second);
ini_closeFile(restart_file);
restart_timer = SetTimer("ServerRestart", 500, false);
SendClientMessage(playerid, 0xAAC5E3FF, "{32CD32}Данные успешно загруженны!");
return 1;
}
case 3:
{
SendClientMessageToAll(0xAAC5E3FF, "{FF6347}Происходит рестарт сервера!");
GameModeExit();
return 1;
}
case 4:
{
SendClientMessageToAll(0xAAC5E3FF, "{FF6347}Рестарт был отменен!");
KillTimer(restart_timer);
return 1;
}
default:
{
SendClientMessageToAll(0xAAC5E3FF, "{FF6347}Указан не верный тип рестарта!");
}
}
return 1;
}
forward ServerRestart();
public ServerRestart()
{
new hour, minute, second;
gettime(hour, minute, second);
if(hour == restart_hour && minute == restart_minute && second == restart_second)
{
SendClientMessageToAll(0xAAC5E3FF, "{FF6347}Происходит рестарт сервера!");
GameModeExit();
return 1;
}
restart_timer = SetTimer("ServerRestart", 500, false);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DLG_RESTART_INPUT_OR_NOT:
{
if(!response)
return 0;
ShowPlayerDialog(playerid, DLG_RESTART_INPUT_INFO, DIALOG_STYLE_INPUT, "Установка времени на рестарт:", "{FFFFFF}Введите время на рестарт, разделяя часы, минуты и секунды запятыми!", "Ввести", "Отмена");
}
case DLG_RESTART_INPUT_INFO:
{
if(!response)
return 0;
if(!strlen(inputtext))
return 0;
if(strlen(inputtext) < 3 && strlen(inputtext) > 6)
return 0;
for(new i = strlen(inputtext) - 1; i != -1; i--)
if ((inputtext[i] >= '0' && inputtext[i] <= '9') ||
(inputtext[i] == ',')) continue;
else
return 0;
sscanf(inputtext, "p<,>iii", restart_hour, restart_minute, restart_second);
if(!(0 <= restart_hour <= 23) || !(0 <= restart_minute <= 59) || !(0 <= restart_second <= 59))
return 0;
new restart_file = ini_openFile("restart.ini");
ini_setInteger(restart_file, "hour", restart_hour);
ini_setInteger(restart_file, "minute", restart_minute);
ini_setInteger(restart_file, "second", restart_second);
ini_closeFile(restart_file);
static const format_message[] = "{FFFACD}Время на рестарт обновленно на %i:%i:%i";
new send_message[sizeof(format_message) + (-6) + 6 + 1];
format(send_message, sizeof(send_message), format_message, restart_hour, restart_minute, restart_second);
SendClientMessage(playerid, 0xAAC5E3FF, send_message);
}
}
return 1;
}
Копирование данной темы без разрешения автора запрещено!