Система анимаций в Pawn: применение анимаций

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Анимации делают игру более живой и реалистичной. Разберем работу с ними.

Применение анимации
Код:
ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync);
// Пример:
ApplyAnimation(playerid, "DANCING", "dance_loop", 4.1, 1, 0, 0, 0, 0, 0);

Параметры:
- animlib - библиотека анимации
- animname - название анимации
- fDelta - скорость анимации (4.1 - нормальная)
- loop - зацикливание (1 - да, 0 - нет)
- lockx, locky - блокировка движения
- freeze - заморозка игрока
- time - время анимации
- forcesync - принудительная синхронизация

Остановка анимации
Код:
ClearAnimations(playerid);
// или
ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0, 0);

Популярные библиотеки анимаций:
- DANCING - танцы
- PED - базовые анимации
- COP_AMBIENT - анимации полиции
- GANGS - анимации банд
- ON_LOOKERS - наблюдение
- DEALER - торговец
- SMOKING - курение
- FOOD - еда
- BAR - бар
- SHOP - магазин

Пример: команды анимаций
Код:
CMD:dance(playerid, params[])
{
    new danceid;
    if(sscanf(params, "i", danceid))
    {
        SendClientMessage(playerid, -1, "Использование: /dance [1-4]");
        return 1;
    }
    
    switch(danceid)
    {
        case 1: ApplyAnimation(playerid, "DANCING", "dance_loop", 4.1, 1, 0, 0, 0, 0, 0);
        case 2: ApplyAnimation(playerid, "DANCING", "DAN_LOOP_A", 4.1, 1, 0, 0, 0, 0, 0);
        case 3: ApplyAnimation(playerid, "DANCING", "DAN_LOOP_B", 4.1, 1, 0, 0, 0, 0, 0);
        case 4: ApplyAnimation(playerid, "DANCING", "DAN_LOOP_C", 4.1, 1, 0, 0, 0, 0, 0);
        default: SendClientMessage(playerid, -1, "Неверный номер танца (1-4)");
    }
    return 1;
}

CMD:stopanim(playerid, params[])
{
    ClearAnimations(playerid);
    SendClientMessage(playerid, -1, "Анимация остановлена");
    return 1;
}

CMD:handsup(playerid, params[])
{
    ApplyAnimation(playerid, "ROB_BANK", "SHP_HandsUp_Scr", 4.0, 0, 1, 1, 1, 0, 0);
    SendClientMessage(playerid, -1, "Руки вверх!");
    return 1;
}

CMD:smoke(playerid, params[])
{
    ApplyAnimation(playerid, "SMOKING", "M_smklean_loop", 4.0, 1, 0, 0, 0, 0, 0);
    SendClientMessage(playerid, -1, "Вы закурили");
    return 1;
}

CMD:drink(playerid, params[])
{
    ApplyAnimation(playerid, "BAR", "dnk_stndF_loop", 4.0, 1, 0, 0, 0, 0, 0);
    SendClientMessage(playerid, -1, "Вы пьете");
    return 1;
}

CMD:sit(playerid, params[])
{
    ApplyAnimation(playerid, "PED", "SEAT_idle", 4.0, 1, 0, 0, 0, 0, 0);
    SendClientMessage(playerid, -1, "Вы сели");
    return 1;
}

CMD:wave(playerid, params[])
{
    ApplyAnimation(playerid, "PED", "handsup", 4.0, 0, 0, 0, 0, 0, 0);
    SendClientMessage(playerid, -1, "Вы помахали рукой");
    return 1;
}

Пример: автоматические анимации
Код:
public OnPlayerSpawn(playerid)
{
    // Анимация при спавне
    ApplyAnimation(playerid, "PED", "IDLE_tired", 4.0, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    // Анимация смерти
    ApplyAnimation(playerid, "PED", "KO_shot_front", 4.0, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(!ispassenger)
    {
        // Анимация входа в транспорт
        ApplyAnimation(playerid, "CAR", "CAR_getin_LHS", 4.0, 0, 0, 0, 0, 0, 0);
    }
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    // Анимация выхода из транспорта
    ApplyAnimation(playerid, "CAR", "CAR_getout_LHS", 4.0, 0, 0, 0, 0, 0, 0);
    return 1;
}

Проверка анимации
Код:
new animlib[32], animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid), animlib, sizeof(animlib), animname, sizeof(animname));

// Проверка конкретной анимации
if(!strcmp(animlib, "DANCING") && !strcmp(animname, "dance_loop"))
{
    // Игрок танцует
}

Пример: система жестов
Код:
CMD:gesture(playerid, params[])
{
    new gestureid;
    if(sscanf(params, "i", gestureid))
    {
        SendClientMessage(playerid, -1, "Использование: /gesture [1-10]");
        SendClientMessage(playerid, -1, "1-Руки вверх 2-Помахать 3-Пожать плечами 4-Нет 5-Да");
        return 1;
    }
    
    switch(gestureid)
    {
        case 1: ApplyAnimation(playerid, "ROB_BANK", "SHP_HandsUp_Scr", 4.0, 0, 1, 1, 1, 0, 0);
        case 2: ApplyAnimation(playerid, "PED", "handsup", 4.0, 0, 0, 0, 0, 0, 0);
        case 3: ApplyAnimation(playerid, "PED", "IDLE_tired", 4.0, 0, 0, 0, 0, 0, 0);
        case 4: ApplyAnimation(playerid, "GANGS", "prtial_gngtlkA", 4.0, 0, 0, 0, 0, 0, 0);
        case 5: ApplyAnimation(playerid, "GANGS", "prtial_gngtlkB", 4.0, 0, 0, 0, 0, 0, 0);
        default: SendClientMessage(playerid, -1, "Неверный номер жеста");
    }
    return 1;
}

Важные моменты:
- Останавливайте анимации при необходимости
- Используйте правильные параметры для разных ситуаций
- Проверяйте анимации перед применением
- Синхронизируйте анимации для всех игроков

Анимации делают игру более живой и интересной!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху