Таймер....

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Ни как не получается заставить таймер работать.
в OnMapStart создаю таймер.
C-подобный:
CreateTimer(1.0, Global_Timer, _, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);

public Action:Global_Timer(Handle:timer)
{
    for (new client = 1; client <= MaxClients; client++)
    {
        if (!IsClientInGame(client)) continue;
    }
          
    for (new client = 1; client <= MaxClients; client++)
    {
        if (IsClientInGame(client))
        UpdateGlobal_Timer(client);
    }
      
    return Plugin_Continue;
}

UpdateGlobal_Timer(client)
{
if(!IsClientInGame(client))
{
return;
}

if (Jail_Time[client] > 0)
{
Jail_Time[client] -= 1;
}

else if (Jail_Time[client] == 1)
{
Exit_Player(client); // Выпускаем из тюрьмы
Jail_Time[client] = 0;
}
}
 

Reg1oxeN

Участник
Сообщения
403
Реакции
319
когда приходит время проверки else if (Jail_Time[client] == 1), то у тебя Jail_Time[client] всегда равен нулю :ab:
используй лучше GetTime() или любой другой ее аналог. просто прибавь к нему время в секундах и сверяй в любое время. это явно лучше, чем каждую секунду делать -1 в таймере.
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Лишние проверки, какие-то непонятные действия. Пустые циклы, которые не делают ничего.
Возьмём твои гениальные условия:
if (Jail_Time[client] > 0) и else if (Jail_Time[client] == 1)
Если придаться элементарной логике, то второе условие подпадет под первое условие, и выходя из этого, что если переменная больше нуля, в том числе и один, всегда будет срабатывать первое условие.
Выход из этого нелепого велосипеда прост, сделай первую проверку if (Jail_Time[client] > 1), чтобы она не подпадала под второе условие.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
в OnMapStart создаю таймер
ОффтопТвоя основная ошибка, как и сказали выше:
1 > 0, так? А далее:
else if (Jail_Time[client] == 1)
Что ломает логику работы этой части кода, до её исполнения никогда не добраться.
Лучше уж тогда так:
PHP:
CreateTimer(1.0, Global_Timer, _, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);

public Action:Global_Timer(Handle:timer)
{
    for (new client = 1; client <= MaxClients; client++)
    {
        if (IsClientInGame(client))
        {
            if (--Jail_Time[client] == 0)
            {
                Exit_Player(client); // Выпускаем из тюрьмы
                //return Plugin_Stop; ???
            }
        }
    }
  
    return Plugin_Continue;
}
Как-то не совсем понятно, когда требуется остановить таймер.
 
Последнее редактирование:
Сверху Снизу