Вопросы, связанные со спеком -
Diman777 - 08.03.2013
Ребят хотел поинтересоваться на счёт слежки.
В спеке бывают такие случаи, что игрок может выйти из зоны видимости следящего.
Например: Я в спеке, а другой игрок находясь в авто (при том он в движении) уходит в паузу (escape) - и здесь слежка может сбиться. Тоже самое может произойти, если уйдет в паузу следящий.
Поэтому необходимо обновлять слежку. Собственно решил воспользоваться колбеком
OnPlayerStreamOut.
pawn Код:
public OnPlayerStreamOut(playerid, forplayerid)
{
new string[128];
// Если игрок forplayerid в спеке, и playerid находится в транспорте, то
if(GetPlayerState(forplayerid) == PLAYER_STATE_SPECTATING && spectate_id[forplayerid] == playerid && IsPlayerInAnyVehicle(playerid))
{
// обновляем слежку для следящего
PlayerSpectateVehicle(forplayerid, GetPlayerVehicleID(playerid));
// сообщаем
format(string, sizeof(string), "%s (%d) вышел из зоны видимости следящего. Обновляем слежку.", player_name(playerid), playerid);
SendClientMessage(forplayerid, -1, string);
}
}
Казалось бы всё нормально, но есть один момент. Если я переключаюсь уже на другого игрока, то естественно срабатывает
OnPlayerStreamOut, сообщая о том, что тот за кем я следил ранее - вышел из зоны видимости.
Как это можно было бы исправить? Сам пытался, но не получилось.
Re: Вопросы, связанные со спеком -
White_116 - 08.03.2013
spectate_id[forplayerid] == playerid
перед переключением меняй на ид того, за кем уже реально должен следить.
Re: Вопросы, связанные со спеком -
Diman777 - 08.03.2013
В функции слежки (в самом начале) я применил
INVALID_PLAYER_ID, т.е:
spectate_id[playerid] = INVALID_PLAYER_ID;
White_116 спасибо за совет, работает)