punkochel
28.06.2019, 12:10
При вызове команды, функция GameTextForPlayer(playerid, "text", 3000, 3) через 3 секунды останавливает глобальный таймер, если изменить 3000 на 1000, то таймер после вызова функции проработает 1 секунду.
CMD:buyhouse(playerid)
{
for(new h = 1; h <= TotalHouses; h++)
{
if(IsPlayerInDynamicArea(playerid, HouseInfo[h][hZone_Exit]))
{
GameTextForPlayer(playerid, "~w~welcome home", 3000, 3);
return 1;
}
}
return 1;
}
UPD: Только что проверил, вообще любой вызов функции GameTextForPlayer останавливает глобальный таймер. А точнее по завершению работы функции GameTextForPlayer останавливается глобальный таймер
UPD: Заметил что при отключении игрока от сервера, останавливается глобальный таймер. Функции KillTimer для глобального таймера в OnPlayerDisconnect не используется.
UPD: При создании таймера функцией SetTimer в OnGameModeInit, ID таймера = 1. При создании уже второго таймера в OnPlayerConnect функцией SetTimerEx, ID таймера так-же = 1. Следовательно при отключении игрока, уничтожается таймер с ID 1.
Далее я смоделирую ситуацию:
OnPlayerStateChange(playerid, newstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
TimerSpeedometer[playerid] = SetTimerEx("UpdateSpeedometer", 150, 1, "i", playerid);
}
else if(newstate == PLAYER_STATE_ONFOOT)
{
if(TimerSpeedometer[playerid] != 0) {
KillTimer(TimerSpeedometer[playerid]);
}
}
return 1;
}
Когда игрок - водитель, то таймер запускается. Когда игрок НЕ водитель - таймер продолжает работать.
Не могу понять в чем может быть проблема, куда копать. Понятно что проблема в таймерах, но что конкретно, не ясно.
Проверил все на new.pwn. Все работает как нужно.
https://i.imgur.com/IQOJmed.png
CMD:buyhouse(playerid)
{
for(new h = 1; h <= TotalHouses; h++)
{
if(IsPlayerInDynamicArea(playerid, HouseInfo[h][hZone_Exit]))
{
GameTextForPlayer(playerid, "~w~welcome home", 3000, 3);
return 1;
}
}
return 1;
}
UPD: Только что проверил, вообще любой вызов функции GameTextForPlayer останавливает глобальный таймер. А точнее по завершению работы функции GameTextForPlayer останавливается глобальный таймер
UPD: Заметил что при отключении игрока от сервера, останавливается глобальный таймер. Функции KillTimer для глобального таймера в OnPlayerDisconnect не используется.
UPD: При создании таймера функцией SetTimer в OnGameModeInit, ID таймера = 1. При создании уже второго таймера в OnPlayerConnect функцией SetTimerEx, ID таймера так-же = 1. Следовательно при отключении игрока, уничтожается таймер с ID 1.
Далее я смоделирую ситуацию:
OnPlayerStateChange(playerid, newstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
TimerSpeedometer[playerid] = SetTimerEx("UpdateSpeedometer", 150, 1, "i", playerid);
}
else if(newstate == PLAYER_STATE_ONFOOT)
{
if(TimerSpeedometer[playerid] != 0) {
KillTimer(TimerSpeedometer[playerid]);
}
}
return 1;
}
Когда игрок - водитель, то таймер запускается. Когда игрок НЕ водитель - таймер продолжает работать.
Не могу понять в чем может быть проблема, куда копать. Понятно что проблема в таймерах, но что конкретно, не ясно.
Проверил все на new.pwn. Все работает как нужно.
https://i.imgur.com/IQOJmed.png