GetPlayerAnimationIndex

Материал из Pro-Pawn Wiki
Версия от 00:11, 9 июня 2019; Daniel-Cortez (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Описание:

Узнаёт внутренний ID текущей анимации игрока.

Параметры:

(playerid)
playerid ID игрока.


Возвращаемое значение:

Номер текущей анимации игрока, либо 0, если игрок не подключен или его текущее состояние отличается от PLAYER_STATE_ONFOOT.

Info rhombus.png
Примечание
Сервер SA-MP передаёт каждому игроку информацию о том, какие анимации воспроизводятся на данный момент у других игроков в зоне стрима (без этого игрок видел бы, как персонажи других игроков перемещаются, но с анимацией стояния на месте). При этом игрокам сообщаются не названия анимаций, а их так называемые "внутренние ID": делается это для экономи трафика, т.к. позволяет вместо двух строк (название самой анимации и библиотеки) закодировать анимацию всего одним ID (числом) размером в 2 байта. Тем не менее, у некоторых анимаций нет своего ID и поэтому они не синхронизируются (единственный способ заставить других игроков увидеть такие анимации - вызвать ApplyAnimation() с параметром forcesync, не равным нулю).


Bug.png
Баг SA-MP
Функция возвращает 0 не только когда игрок не подключен, но и когда он в состоянии, отличном от PLAYER_STATE_ONFOOT. Чтобы отличить эти два случая, может потребоваться дополнительный вызов функции IsPlayerConnected().


Пример использования:

public OnPlayerUpdate(playerid)
{
    new animid = GetPlayerAnimationIndex(playerid);
    switch (animid)
    {
        // 1189: PED:IDLE_stance - стояние на месте
        // 1224: PED:run_civi - бег
        // 1234: PED:run_stop - остановка после бега
        // 1257: PED:WALK_civi - ходьба
        // Если у игрока одна из перечисленных выше анимаций - он держит мешок в руках
        case 1189, 1224, 1234, 1257: {}
        // Если же у него любая другая анимация - он роняет мешок
        default:
        {
            SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
            SendClientMessage(playerid, -1, "Вы уронили мешок!");
        }
    }
}


См. также: