SA-MP Forums Archive
Вопросы, связанные со спеком - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Вопросы, связанные со спеком (/showthread.php?tid=421131)



Вопросы, связанные со спеком - 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 спасибо за совет, работает)