Posts: 98
Threads: 30
Joined: Dec 2010
Reputation:
0
Долгое время использовал y_timers, но решил вернуть обычные таймеры.
В OnPlayerConnect:
PlayerInfo[playerid][pTimer] = SetTimerEx("PlayerTimer", 500, true, "i", playerid);
В OnPlayerDisconnect:
KillTimer(PlayerInfo[playerid][pTimer]);
При первом входе на сервер всё нормально. Но если перезайти, то таймеры начинаются выполняться в 2 раза быстрее. И так каждый раз в 2 раза быстрее.
Похоже на то, что таймер не убивается при выходе. А при входе создаётся еще один.
Почему так может быть?
Posts: 658
Threads: 3
Joined: Sep 2009
Reputation:
0
Самостоятельно вызвать OnPlayerDisconnect для каждого игрока при вызове перезагрузки.
Либо, если OnPlayerDisconnect изначально не был предназначен у вас для такого случая, вызвать те процедуры из этого callback, которые приведут к убийству таймера, сохранению данных и ещё чего-либо нужного.
Posts: 72
Threads: 2
Joined: Oct 2017
Reputation:
0
Отдебаж PlayerInfo[playerid][pTimer] до и после вызова KillTimer
Таймер зациклен, можно киллнуть его внутри него, если игрок отключен.
Posts: 35
Threads: 6
Joined: Nov 2017
Reputation:
0
Легче SetTimerEx("PlayerTimer", 500, false, "i", playerid);
public PlayerTimer(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
SetTimerEx("PlayerTimer", 500, false, "i", playerid);
return 1;
}
Или
public PlayerTimer(playerid)
{
if(!IsPlayerConnected(playerid)) return KillTimer(PlayerInfo[playerid][pTimer]);
return 1;
}
Posts: 176
Threads: 17
Joined: Jan 2013
Reputation:
0
А что мешает создать один таймер, который будет просчитывать игроков, и не заморачиваться ?
В теле таймера гнать цикл и проверять игроков на коннект итд. Не придётся ничего создавать и убивать таймер.
Posts: 770
Threads: 4
Joined: Apr 2012
Reputation:
0
возможно, где-то выше в OnPlayerDisconnect происходит runtime ошибка и выполнение паблика прерывается, поэтому таймер и не убивается. crashdetect стоит?
Posts: 473
Threads: 8
Joined: May 2015
Reputation:
0
Вайт красава разложил по полочкам