Сообщение от
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_000, false, "i", playerid);
}
public OnPlayerConnect(playerid)
{
player_timer_id[playerid] = SetTimerEx("@OnPlayerUpdate", 1_000, false, "i", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
KillTimer(player_timer_id[playerid]);
return 1;
}