Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 4 ПерваяПервая ... 2 3 4
Показано с 31 по 34 из 34
  1. #31
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от XemyL Посмотреть сообщение
    Всё дело в том, что одно срабатывание из foreach (для одного игрока) проходит например за 0.25 - 1 мс (в зависимости от оптимизации и мощности процессора), что впрочем то не так уж и страшно. Но когда игроков 200, выполнение таймера занимает уже от 50 мс до 200 мс каждую секунду и пока весь таймер не закончит своё действие, сервер своими делами не займётся (синхронизация игроков и т.п.), поэтому в эти 200 мс сервер тупо висит - вот она причина лагов.
    Зачем подсчитывать срабатывания, когда можно перезапускать таймер?

    PHP код:
    new player_timer_id[MAX_PLAYERS];

    @
    OnPlayerUpdate(playerid);
    @
    OnPlayerUpdate(playerid)
    {
        
    player_timer_id[playerid] = SetTimerEx("@OnPlayerUpdate"1_000false"i"playerid);
    }

    public 
    OnPlayerConnect(playerid)
    {
        
    player_timer_id[playerid] = SetTimerEx("@OnPlayerUpdate"1_000false"i"playerid);  
        return 
    1;
    }

    public 
    OnPlayerDisconnect(playeridreason)
    {
        
    KillTimer(player_timer_id[playerid]);
        return 
    1;


  2. #32
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Зачем подсчитывать срабатывания, когда можно перезапускать таймер?

    PHP код:
    new player_timer_id[MAX_PLAYERS];

    @
    OnPlayerUpdate(playerid);
    @
    OnPlayerUpdate(playerid)
    {
        
    player_timer_id[playerid] = SetTimerEx("@OnPlayerUpdate"1_000false"i"playerid);
    }

    public 
    OnPlayerConnect(playerid)
    {
        
    player_timer_id[playerid] = SetTimerEx("@OnPlayerUpdate"1_000false"i"playerid);  
        return 
    1;
    }

    public 
    OnPlayerDisconnect(playeridreason)
    {
        
    KillTimer(player_timer_id[playerid]);
        return 
    1;

    Ну допустим, для того что есть код который не должен входить в
    PHP код:
    new Timer1Second[MAX_PLAYERS];

    public 
    OnPlayerUpdate(playerid)
    {
        
    // Какой-то код
        
    if(Timer1Second[playerid] == 4)
        {
             
    // Код, который должен выполняться каждую секунду
             
    Timer1Second[playerid] = 0;
        }
        else 
    Timer1Second[playerid]++;
        return 
    1;

    но как уже и сказали ранее, этот метот не эффективен ибо OnPlayerUpdate не работает когда игрок АФК.

    А таймеры XemyL вполне нормальный способ создать второй OnPlayerUpdate и тот будет работать даже если игрок АФК.

  3. #33
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от seriu Посмотреть сообщение
    Ну допустим, для того что есть код который не должен входить в
    PHP код:
    new Timer1Second[MAX_PLAYERS];

    public 
    OnPlayerUpdate(playerid)
    {
        
    // Какой-то код
        
    if(Timer1Second[playerid] == 4)
        {
             
    // Код, который должен выполняться каждую секунду
             
    Timer1Second[playerid] = 0;
        }
        else 
    Timer1Second[playerid]++;
        return 
    1;

    но как уже и сказали ранее, этот метот не эффективен ибо OnPlayerUpdate не работает когда игрок АФК.

    А таймеры XemyL вполне нормальный способ создать второй OnPlayerUpdate и тот будет работать даже если игрок АФК.
    @OnPlayerUpdate не OnPlayerUpdate, если присмотреться. А в примере XemyL немного таймеры с BDSM. Подсчет тактов какой-то.

  4. Пользователь сказал cпасибо:
    #enotya (29.03.2017)
  5. #34
    Аватар для RefunQ
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.06.2016
    Сообщений
    5
    Репутация:
    0 ±
    Спасибо, толково обьяснил)

 

 
Страница 4 из 4 ПерваяПервая ... 2 3 4

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •