Помощь с плагином АвтоРестарт

dvernoff

Добрая душа
Сообщения
638
Реакции
591
Autorestart:
#include sourcemod

// Глобальные
float TIME_SECOND = 60.0; //72000
int g_Player,
    i_Player;

stock const char g_sLogFile[] = "addons/sourcemod/logs/Restart_Logs.log";

public void OnPluginStart()
{
    CreateTimer(120.0, TimerHandler);
    LogToFile(g_sLogFile, "Авто рестарт запущен, и будет сделан через %f секунд", TIME_SECOND);
}

public Action TimerHandler(Handle timer)
{
    for (new i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && !IsFakeClient(i))
        {  
            i_Player++;
        }
    }
    LogToFile(g_sLogFile, "После рестарта на сервере осталось %i игроков.", i_Player);
}


public OnMapEnd()
{
    if(TIME_SECOND > GetEngineTime())
    {
        for (new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i) && !IsFakeClient(i))
            {
                ClientCommand(i,"retry");
                g_Player++;
            }
        }
    }
    LogToFile(g_sLogFile, "[УСПЕШНО] Был сделан автоматический рестарт сервера, на сервере было %i игроков.", g_Player);
    ServerCommand("_restart");
}

Написал небольшой плагин который рестартит сервер после таймера в конце карты, и реконектит игрока.
В общем не могу разобраться почему часть кода OnMapEnd не выполняется :/

60 сек сделал специально для теста.
 

Tomiks

Участник
Сообщения
419
Реакции
288
А разве TIME_SECOND будет больше GetEngineTime()?

А какая часть именно мапенд не выполняется?
 

dvernoff

Добрая душа
Сообщения
638
Реакции
591
А разве TIME_SECOND будет больше GetEngineTime()?

А какая часть именно мапенд не выполняется?
Верно, есть значение 60, использую как секунды,
если при конце карты сервер проработал больше 60 секунд,
должен выполниться рестарт. Вот как было задумано
 

Tomiks

Участник
Сообщения
419
Реакции
288
Верно, есть значение 60, использую как секунды,
если при конце карты сервер проработал больше 60 секунд,
должен выполниться рестарт. Вот как было задумано
Ну сейчас это выглядит вроде как так:
Если время РАБОТЫ СЕРВЕРА меньше 60 секунд, то пусть игроков переподключит.

Как я понял тебе надо наоборот, если РАБОТА СЕРВЕРА больше 60 секунд, то пусть игроков переподключит через retry и выполнит рестарт(кстати, вроде как рестарт в конце карты так и так выполнится, надо занести последние две строчки в мапенд в иф после for)

C++:
public OnMapEnd()
{
    if(TIME_SECOND < GetEngineTime())
    {
        for (new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i) && !IsFakeClient(i))
            {
                ClientCommand(i,"retry");
                g_Player++;
            }
        }
        LogToFile(g_sLogFile, "[УСПЕШНО] Был сделан автоматический рестарт сервера, на сервере было %i игроков.", g_Player);
        ServerCommand("_restart");
    }
}
 

dvernoff

Добрая душа
Сообщения
638
Реакции
591
Ну сейчас это выглядит вроде как так:
Если время РАБОТЫ СЕРВЕРА меньше 60 секунд, то пусть игроков переподключит.

Как я понял тебе надо наоборот, если РАБОТА СЕРВЕРА больше 60 секунд, то пусть игроков переподключит через retry и выполнит рестарт(кстати, вроде как рестарт в конце карты так и так выполнится, надо занести последние две строчки в мапенд в иф после for)

C++:
public OnMapEnd()
{
    if(TIME_SECOND < GetEngineTime())
    {
        for (new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i) && !IsFakeClient(i))
            {
                ClientCommand(i,"retry");
                g_Player++;
            }
        }
        LogToFile(g_sLogFile, "[УСПЕШНО] Был сделан автоматический рестарт сервера, на сервере было %i игроков.", g_Player);
        ServerCommand("_restart");
    }
}
Вот, я пробовал так:

L 05/26/2020 - 22:58:11: [auto_restart.smx] [УСПЕШНО] Был сделан автоматический рестарт сервера, на сервере было 0 игроков.

Получается он не сделал цикл, и не рестартнул сервер в итоге, а смена карты была. (проверил по GOTV )
 

Tomiks

Участник
Сообщения
419
Реакции
288
Вот, я пробовал так:

L 05/26/2020 - 22:58:11: [auto_restart.smx] [УСПЕШНО] Был сделан автоматический рестарт сервера, на сервере было 0 игроков.

Получается он не сделал цикл, и не рестартнул сервер в итоге, а смена карты была. (проверил по GOTV )
У тебя привязана команда _restart к перезапуску сервера? Или просто узнал про эту команду где-то?(со стороны скрипта всё ок, вроде, но если не сделало рестарт, то эта команда за рестарт не отвечает)
 

dvernoff

Добрая душа
Сообщения
638
Реакции
591
У тебя привязана команда _restart к перезапуску сервера? Или просто узнал про эту команду где-то?(со стороны скрипта всё ок, вроде, но если не сделало рестарт, то эта команда за рестарт не отвечает)
Хост MyArena, вводил в консоль для теста _restart, сервер рестартнуло.
Сообщения автоматически склеены:

У тебя привязана команда _restart к перезапуску сервера? Или просто узнал про эту команду где-то?(со стороны скрипта всё ок, вроде, но если не сделало рестарт, то эта команда за рестарт не отвечает)
Может из за того что смена карты проходит через админ меню? Но бред же :/
Сообщения автоматически склеены:

Хост MyArena, вводил в консоль для теста _restart, сервер рестартнуло.
Сообщения автоматически склеены:


Может из за того что смена карты проходит через админ меню? Но бред же :/
Прикрепил на конец раунда, всё работает. Я бы поставил лайк) Мне блок дали :d
 
Последнее редактирование:

dvernoff

Добрая душа
Сообщения
638
Реакции
591
Ну я не знаю как устроена консоль на myaren'e, тут лучше спросить у более знающих людей @Kruzya

А так есть вариант, что с консоли сайта идёт команда на какой-то обработчик, и там уже сверяет команды, если не попадает под тип команд вроде _restart, то переводить команду в консоль сервера и там уже она выполняется(но может быть это мой бредXD)

А так попробуй ради эксперимента поставить "_restart" на команду в чате, вот тогда точно и узнаем(хотя тут тоже, если в лог вывело, то скорее всего и команду на стороне сервера осилило)

Я склоняюсь к тому, что обработка команд вроде _restart идёт в каком-то другом месте, но не на сервере игры(ну, может быть, Крузя точнее скажет)
Выше отписал, работает но прикрепил к концу раунда, ещё раз спасибо за всё)
Сообщения автоматически склеены:

Слушайте всё супер, команда _restart рестартит сервер,
но создаётся CRASH лог, есть аналоговые варианты рестарта?
 
Последнее редактирование:
Сверху Снизу