Если повторно удалить таймер для игрока, что-то может быть не так? Тоесть, если для игрока удалил таймер в одном месте и затем ещё раз удаляю вдругом.
Если повторно удалить таймер для игрока, что-то может быть не так? Тоесть, если для игрока удалил таймер в одном месте и затем ещё раз удаляю вдругом.
Допустим, Ваш код выглядит примерно так:
Заходит первый игрок. ID таймера, например, 1, будет записан в pTimer[0] (так как playerid начинается с 0). Удаляете этот таймер. Запускаете еще какой-то таймер (необязательно связанный вообще как-то с игроками. Любой таймер). Его ID снова будет 1 (мог бы быть 2, если бы вы первый не удалили). Опять удаляете таймер игрока (а ведь его ранее уже удаляли), ID которого хранится в pTimer[0]. Но ведь этот ID таймера, хранящегося там, совпадает с ID таймера, который был создан последним и с игроком никак не связан. В итоге, Вы удаляете какой-то таймер, теряя работоспособность кода. Как вариант, после удаления таймера записывайте в pTimer[playerid] значение, равное -1. Тогда и проблем не будет с этим связанных:PHP код:
new pTimer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
pTimer[playerid] = SetTimerEx("OnPlayerSecondTimer", 1000, true, "i", playerid);
return 1;
}
stock SomeFunc(playerid)//какая-то функция
{
KillTimer(pTimer[playerid]);
return 1;
}
А далее уже добавляйте проверку: если значение не равно -1, таймер удаляете. Можно, конечно, и без проверок, но лишний раз вызывать какие-то функции... Зачем?PHP код:
new pTimer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
pTimer[playerid] = SetTimerEx("OnPlayerSecondTimer", 1000, true, "i", playerid);
return 1;
}
stock SomeFunc(playerid)//какая-то функция
{
KillTimer(pTimer[playerid]);
pTimer[playerid] = -1;
return 1;
}
Последний раз редактировалось Elrmrnt-Kritik; 15.03.2018 в 19:13.
Не правда, ID созданных таймеров не повторяются (до переполнения их счетчика). Об этом, кстати, написано на wiki.
Elrmrnt-Kritik (15.03.2018) Nash_Brigers (16.03.2018)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)