Вопросы, связанные со спеком
#1

Ребят хотел поинтересоваться на счёт слежки.
В спеке бывают такие случаи, что игрок может выйти из зоны видимости следящего.
Например: Я в спеке, а другой игрок находясь в авто (при том он в движении) уходит в паузу (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, сообщая о том, что тот за кем я следил ранее - вышел из зоны видимости.
Как это можно было бы исправить? Сам пытался, но не получилось.
Reply
#2

spectate_id[forplayerid] == playerid
перед переключением меняй на ид того, за кем уже реально должен следить.
Reply
#3

В функции слежки (в самом начале) я применил INVALID_PLAYER_ID, т.е:
spectate_id[playerid] = INVALID_PLAYER_ID;
White_116 спасибо за совет, работает)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)