Привет всем!
У меня настроен таймер, который запущен на ежесекундное обновление. В нем есть условие, при которое должно срабатывать в том случае если старое время меньше нового и минуты равны нулю, если это так должна запуститься функция PayDay(). Но он работает некорректно. В том случае если я нахожусь на сервере (не АФК), то он срабатывает, а если при этом у меня свернута игра (в АФК), то при выходи из АФК например на 30 минуте, то timestamp показывает что сработал несколько секунд назад. Как исправить эту проблему?
Вот собственно код:
PHP код:
new g_hour, g_minute, g_second;
new g_year, g_month, g_day;
forward SecondUpdater();
SetTimer("SecondUpdater", 1000, true);
public SecondUpdater() {
foreach(new i : Player) {
if(pInfo[i][pLoggedIn] == false) return 1;
CommonTime(i);
}
return 1;
}
stock CommonTime(playerid) {
new nhour, nminute, nsecond;
gettime(nhour, nminute, nsecond);
if((nhour > g_hour) || (nhour == 0 && g_hour == 23)) {
g_hour = nhour;
SetWorldTime(nhour);
format(string, sizeof(string), "Time %d:00 hours", nhour);
SendClientMessage(playerid, COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, "Payday run!");
}
if(nminute == 10 && nsecond == 0 || nminute == 40 && nsecond == 0) {
SendClientMessageToAll(COLOR_WHITE, "Реклама на сервере.");
}
return 1;
}
PS: Что можете сказать вообще о коде? Стоит ли делать foreach? Или хватит простого playerid?