ApplyAnimation

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск

Описание:

Применяет анимацию к игроку.

Параметры:

(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
playerid ID игрока, для которого требуется применить анимацию.
animlib[] Название библиотеки анимаций.
animname[] Название анимации.
Float:fDelta Скорость воспроизведения (стандартная скорость: 4.0).
loop Если не равен 0, анимация зацикливается, иначе - воспроизводится один раз.
lockx, locky При нулевом значении перемещение игрока по осям X и Y блокируется (после воспроизведения анимации игрок возвращается на прежние координаты).
freeze Если не равен 0, замораживает игрока в конце анимации.
time Время воспроизведения в миллисекундах. Значение меньше или равное 0 означает, что анимация будет воспроизведена однократно, если параметр loop равен 0, или бесконечно зациклена, если loop имеет ненулевое значение.
forcesync Заставляет других игроков, находящихся в радиусе стрима, видеть воспроизведение анимации игроком playerid даже когда сам игрок не может воспроизвести анимацию - например, если он вышел в меню паузы или анимация не синхронизируется (см. прим.)


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

Всегда возвращает 1.

Info rhombus.png
Примечание
Некоторые анимации не влияют на ноги персонажа (т.е. их можно проигрывать во время ходьбы/бега игрока), если параметр freeze не равен 0. При этом игрок не сможет контролировать персонажа (если персонаж стоит на месте, он продолжит стоять, а если идёт/бежит - продолжит идти или бежать сам, не отвечая на нажатие кнопок игроком) на время воспроизведения анимации (т.е. на time миллисекунд). Чтобы избежать потери контроля, можно в параметре time указать значение 1 (см. пример ниже).
Воспроизведение анимации "CARRY:crry_prtial" равносильно сбросу анимации, но без остановки игрока во время ходьбы/бега, как это делает ClearAnimations().


Bug.png
Баг SA-MP
При первой попытке использования библиотеки анимация из неё не будет воспроизведена. Чтобы обойти эту проблему, можно с первого раза воспроизвести анимацию дважды, либо организовать предварительную загрузку библиотеки с помощью вызова ApplyAnimation(), указав название несуществующей анимации:
// Предварительная загрузка анимаций из библиотеки "MISC".
ApplyAnimation(playerid, "MISC", "z", 4.0, 0, 0, 0, 0, 0);

У анимаций из библиотек "BLOWJOBZ" и "SnM" нет собственных ID (ранее они были заблокированы наравне с анимациями из библиотеки "SEX", а при разблокировке им забыли присвоить ID) и по умолчанию они не синхронизируются у других игроков. Чтобы обойти эту проблему, следует передать ненулевое значение в параметр forcesync.
Функция всегда возвращает 1, даже когда игрок не подключен.
Параметры lockx и locky названы против своего значения (названия подразумевают блокировку перемещения по X и Y, когда аргументы имеют ненулевое значение, но на самом деле блокировка происходит только когда, наоборот, lockx и locky равны нулю).


Bug.png
Баг SA-MP
Указание несуществующей библиотеки анимаций или названия анимации длинее 36 символов приводит к вылету из игры.
Указание пустой строки вместо названия анимации или библиотеки приводит к падению сервера.


public OnPlayerText(playerid, text[])
{
    // Воспроизведём случайную анимацию разговора, причём так,
    // чтобы это не мешало игроку идти/бежать.
    static const talk_anims[][] = {
        "prtial_gngtlkA", "prtial_gngtlkB", "prtial_gngtlkC", "prtial_gngtlkD",
        "prtial_gngtlkE", "prtial_gngtlkF", "prtial_gngtlkG", "prtial_gngtlkH"
    };
    ApplyAnimation(playerid, "GANGS", talk_anims[random(sizeof(talk_anims))], 4.0, 1, 1, 1, 1, 1);

    // Установим таймер на сброс анимации рук. Чем длиннее введённый игроком текст,
    // тем дольше будет действовать анимация.
    new len = strlen(text);
    SetTimerEx("TalkHandsOff", (len < 5) ? 500 : len * 100, 0, "d", playerid);
}

forward TalkHandsOff(playerid);
public  TalkHandsOff(playerid)
{
    // Сброс анимации (см. прим. выше).
    return ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0, 0);
}


См. также: