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
.
Примечание |
Некоторые анимации не влияют на ноги персонажа (т.е. их можно проигрывать во время ходьбы/бега игрока), если параметр freeze не равен 0 . При этом игрок не сможет контролировать персонажа (если персонаж стоит на месте, он продолжит стоять, а если идёт/бежит - продолжит идти или бежать сам, не отвечая на нажатие кнопок игроком) на время воспроизведения анимации (т.е. на time миллисекунд). Чтобы избежать потери контроля, можно в параметре time указать значение 1 (см. пример ниже).
Воспроизведение анимации "CARRY:crry_prtial" равносильно сбросу анимации, но без остановки игрока во время ходьбы/бега, как это делает ClearAnimations() .
|
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);
}
{
// Воспроизведём случайную анимацию разговора, причём так,
// чтобы это не мешало игроку идти/бежать.
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);
}
См. также: