Как добавить задержку в код?

sehor

Участник
Сообщения
75
Реакции
4
Операционная система
Linux
При заходе на сервер, выполняется команда от клиента, но как добавить задержку, чтобы игрок зашел и только через 5 секунд выполнялся код

C-подобный:
public void OnClientPutInServer(int iClient)
{
    if (!IsFakeClient(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
При заходе на сервер, выполняется команда от клиента, но как добавить задержку, чтобы игрок зашел и только через 5 секунд выполнялся код

C-подобный:
public void OnClientPutInServer(int iClient)
{
    if (!IsFakeClient(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}
C++:
public void OnClientPutInServer(int iClient)
{
    if(!IsFakeClient(iClient))
    {
        CreateTimer(5.0, Timer_DelayClientLoad, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE);
    }
}

public Action Timer_DelayClientLoad(Handle timer, int iClient)
{
    iClient = GetClientOfUserId(iClient);

    if(iClient > 0 && IsClientInGame(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}
 
Последнее редактирование:

Tomiks

Участник
Сообщения
419
Реакции
288
C++:
public void OnClientPutInServer(int iClient)
{
    if (!IsFakeClient(iClient))
    {
        CreateTimer(5.0, Timer_Callback, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE);
    }
}

Action Timer_Callback(Handle timer, int iClient)
{
    iClient = GetClientOfUserId(iClient);
    
    if(iClient > 0 && iClient <= MaxClients && IsClientInGame(iClient) && !IsFakeClient(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}

Если нигде не ошибся, то вот
 

Temlik

Участник
Сообщения
668
Реакции
174
У вас какой-то определённый стиль ставить скобки после if в первом случае через пробел, а во втором случае сразу, без пробела?)
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
У вас какой-то определённый стиль ставить скобки после if в первом случае через пробел, а во втором случае сразу, без пробела?)
кому как нравится, просто не заметил, та часть кода не правилась - потому что нормально
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
У вас какой-то определённый стиль ставить скобки после if в первом случае через пробел, а во втором случае сразу, без пробела?)
обычно так получается из за редактора. например, некоторые редакторы делают так когда в конце строки ставится ;
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
обычно так получается из за редактора. например, некоторые редакторы делают так когда в конце строки ставится ;
это Линтер делает в IDE, если я правильно назвал эту скотину Оффтоп
 

sehor

Участник
Сообщения
75
Реакции
4
C++:
public void OnClientPutInServer(int iClient)
{
    if (!IsFakeClient(iClient))
    {
        CreateTimer(5.0, Timer_Callback, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE);
    }
}

Action Timer_Callback(Handle timer, int iClient)
{
    iClient = GetClientOfUserId(iClient);
   
    if(iClient > 0 && iClient <= MaxClients && IsClientInGame(iClient) && !IsFakeClient(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}

Если нигде не ошибся, то вот

C++:
public void OnClientPutInServer(int iClient)
{
    if(!IsFakeClient(iClient))
    {
        CreateTimer(5.0, Timer_DelayClientLoad, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE);
    }
}

public Action Timer_DelayClientLoad(Handle timer, int iClient)
{
    iClient = GetClientOfUserId(iClient);

    if(iClient > 0 && IsClientInGame(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}
Спасибо <3
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
C++:
public void OnClientPutInServer(int iClient)
{
    if (!IsFakeClient(iClient))
    {
        CreateTimer(5.0, Timer_Callback, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE);
    }
}

Action Timer_Callback(Handle timer, int iClient)
{
    iClient = GetClientOfUserId(iClient);
   
    if(iClient > 0 && iClient <= MaxClients && IsClientInGame(iClient) && !IsFakeClient(iClient))
    {
        FakeClientCommand(iClient, "sm_");
    }
}

Если нигде не ошибся, то вот
Типа спустя 5 секунд существует шанс того, что игрок, не считавшийся ботом, станет им?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Типа спустя 5 секунд существует шанс того, что игрок, не считавшийся ботом, станет им?
Возможно и такое, если после старта таймера выйдет игрок и зайдёт бот, но шанс сего произойти ничтожно мал, только специально можно такое устроить.
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Возможно и такое, если после старта таймера выйдет игрок и зайдёт бот, но шанс сего произойти ничтожно мал, только специально можно такое устроить.
Не подумал. Буду иметь ввиду, спасибо за пояснение
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@iLoco, так if - это ведь оператор, а не функция. После него должен быть пробел
там тригериться на дужку, межу названием функции и дужкой может быть сколько угодно пробелов
1653078029434.png
 

Fleeeshi

Добрая душа
Сообщения
231
Реакции
202
@iLoco, В таймер же передается GetClientUserId(iClient), после чего достаточно условия iClient > 0, если даже выйдет игрок, то индекс станет равен 0.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Возможно и такое, если после старта таймера выйдет игрок и зайдёт бот, но шанс сего произойти ничтожно мал, только специально можно такое устроить.
У бота другой UserID будет.
Проверка на бота в таймере не нужна.
Только чтобы ClientID, полученный из UserID не был равен 0 (ещё м/б нужна проверка наличия игрока на сервере).
 
Сверху Снизу