Таймер....

Тема в разделе "Программирование / Скриптинг", создана пользователем Hejter, 5 мар 2016.

  1. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Ни как не получается заставить таймер работать.
    в OnMapStart создаю таймер.
    Код:
    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;
    }
    }
    
     
  2. Reg1oxeN

    Reg1oxeN

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

    gibs Фитиль народного волненья

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

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.512
    Симпатии:
    1.964
    Оффтоп Твоя основная ошибка, как и сказали выше:
    1 > 0, так? А далее:
    Что ломает логику работы этой части кода, до её исполнения никогда не добраться.
    Лучше уж тогда так:
    PHP:
    CreateTimer(1.0Global_Timer_TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);

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