Создание собственого скрипта с анимациями

Тема в разделе "CLEO", создана пользователем Владислав, 6 июл 2014.

  1. Владислав

    Владислав Member Основатель

    Регистрация:
    29 май 2014
    Сообщения:
    109
    Симпатии:
    0
    Создание собственного скрипта анимаций.
    Для этого нам нужны будут Sanny Builder 3(дальше SB), обновленные файлы базы опкодов Cleo 4(Как установить будет описано в архиве), инклуд клавиш(Как установить будет описано в архиве), Anim manager, любой скин игрока и прямые руки.
    Немного информации. Анимации в GTA SA храняться в трех местах. Это ped.ifp, anim.img и gta3.img. Анимации с anim.img такие самые, как в gta3.img. Так что в скриптах используются анимации с ped.ifp и gta3.img
    Теперь перейдем к поиску анимации. Для начала будем их искать в ped.ifp. Открываем Anim manager, загружаем в него наш скин. Для на панели инструментов выбераем "Preview" и нажимаем "Load model". Скрин.
    Теперь открываем ped.ifp и видем такой список. В нем есть 3 вещи, которые нам нужны. Это названия архива анимаций, название анимации и время анимации. После того как выбрали анимацию запихиваем её в скрипт. Я уже написал небольшой скрипт, который уже готовый для компилирования.
    Код:
    {$CLEO} //Пишем это для того, чтобы у нас при компилировании скрипт был формата CS, а не scm. SCM-скрипты не работают в сампе.
    {$include includes\vk_keys.txt} //Подключаем инклуд для того, чтобы не смотреть значения клавиш в справке SB
    
    0000://Пмшем это для того, чтобы у нас при компилировании скрипта не было ошибки "Переход на нулевой оффсет"
    
    while true
    wait 0
    if and//Данная строка проверяет условия для дальнейшей работы скрипта.
    0AB0: key_pressed VK_SHIFT //Нажата клавиша Левый Шифт
    0AB0: key_pressed VK_3 //Нажата клавиша 3
    not actor.Driving($PLAYER_ACTOR) //Игрок не за рулем
    Player.CanMove($PLAYER_CHAR) = True //Игрок может двигаться. Это условие пишем, чтобы мы не могли использовать анимацию под тазером.
    then //Если все условия выполнены, то скрипт идет дальше.
    Player.CanMove($PLAYER_CHAR) = True
    0812: AS_actor $PLAYER_ACTOR perform_animation "DOOR_LHINGE_O" IFP_file "PED" 50.0 loopA 0 lockX 0 lockY 0 lockF 1 time 90 //Где $PLAYER_ACTOR - это глобальная переменная ped'a которым мы играем с SAMP. DOOR_LHINGE_O - название анимации, "PED" - где именно храниться анимация. 50.0, 0, 0, 0, 1 - я сам не знаю, что это. 90 - время проигрывания анимации. Его мы узнаем в anim manager.
    end//Заканчиваем проверку условий
    end
    Компилируем(Нажимем F6 или "Запуск" -> "Компилировать") и проверяем в игре.
    Теперь будем искать анимации в gta3.img. Ищем их так же само, как и в ped.ifp. После того, нашли анимацию ставляем это в SB.
    Код:
    {$CLEO} //Пишем это для того, чтобы у нас при компилировании скрипт был формата CS, а не scm. SCM-скрипты не работают в сампе.
    {$include includes\vk_keys.txt} //Подключаем инклуд для того, чтобы не смотреть значения клавиш в справке SB
    
    0000://Пишем это для того, чтобы у нас при компилировании скрипта не было ошибки "Переход на нулевой оффсет"
    
    while true
    wait 0
    if and//Данная строка проверяет условия для дальнейшей работы скрипта.
    key_pressed VK_SHIFT //Нажата клавиша Левый Шифт
    key_pressed VK_3 //Нажата клавиша 3
    not actor.Driving($PLAYER_ACTOR) //Игрок не за рулем
    Player.CanMove($PLAYER_CHAR) = True //Игрок может двигаться. Это условие пишем, чтобы мы не могли использовать анимацию под тазером.
    then //Если все условия выполнены, то скрипт идет дальше.
    04ED: load_animation "ON_LOOKERS" //Загружаем архив анимаций.
    if //Если
    04EE: animation "ON_LOOKERS" loaded //Архив анимаций загружен.
    then //Тогда
    0615: define_AS_pack_begin 18@ //
    0605: actor -1 perform_animation_sequence "LKAROUND_IN" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0605: actor -1 perform_animation_sequence "LKAROUND_LOOP" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0605: actor -1 perform_animation_sequence "LKAROUND_LOOP" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0605: actor -1 perform_animation_sequence "LKAROUND_OUT" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0616: define_AS_pack_end 18@
    0618: assign_actor $PLAYER_ACTOR to_AS_pack 18@
    061B: remove_references_to_AS_pack 18@
    04EF: release_animation "ON_LOOKERS"
    end
    end//Заканчиваем проверку условий
    end
    Этот скрипт будет проигрывать вот такую анимацию по нажатию клавиш Левый Шифт и 3. В нем меняем только клавиши, архив анимаций и название анимаций.
    Теперь как совместить несколько анимаций. Пример.
    Код:
    {$CLEO} //Пишем это для того, чтобы у нас при компилировании скрипт был формата CS, а не scm. SCM-скрипты не работают в сампе.
    {$include includes\vk_keys.txt} //Подключаем инклуд для того, чтобы не смотреть значения клавиш в справке SB
    
    0000://Пишем это для того, чтобы у нас при компилировании скрипта не было ошибки "Переход на нулевой оффсет"
    
    while true
    wait 0
    //Начало первой анимации
    if and//Данная строка проверяет условия для дальнейшей работы скрипта.
    key_pressed VK_SHIFT //Нажата клавиша Левый Шифт
    key_pressed VK_2 //Нажата клавиша 2
    not actor.Driving($PLAYER_ACTOR) //Игрок не за рулем
    Player.CanMove($PLAYER_CHAR) = True //Игрок может двигаться. Это условие пишем, чтобы мы не могли использовать анимацию под тазером.
    then //Если все условия выполнены, то скрипт идет дальше.
    04ED: load_animation "ON_LOOKERS" //Загружаем архив анимаций.
    if //Если
    04EE: animation "ON_LOOKERS" loaded //Архив анимаций загружен.
    then //Тогда
    0615: define_AS_pack_begin 18@ //
    0605: actor -1 perform_animation_sequence "LKAROUND_IN" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0605: actor -1 perform_animation_sequence "LKAROUND_LOOP" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0605: actor -1 perform_animation_sequence "LKAROUND_LOOP" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0605: actor -1 perform_animation_sequence "LKAROUND_OUT" IFP_file "ON_LOOKERS" 4.0 loop 0 0 0 0 time -1
    0616: define_AS_pack_end 18@
    0618: assign_actor $PLAYER_ACTOR to_AS_pack 18@
    061B: remove_references_to_AS_pack 18@
    04EF: release_animation "ON_LOOKERS"
    end
    end//Заканчиваем проверку условий
    //Конец первой анимации
    //Начало второй анимации
    if and//Данная строка проверяет условия для дальнейшей работы скрипта.
    0AB0: key_pressed VK_SHIFT //Нажата клавиша Левый Шифт
    0AB0: key_pressed VK_3 //Нажата клавиша 3
    not actor.Driving($PLAYER_ACTOR) //Игрок не за рулем
    Player.CanMove($PLAYER_CHAR) = True //Игрок может двигаться. Это условие пишем, чтобы мы не могли использовать анимацию под тазером.
    then //Если все условия выполнены, то скрипт идет дальше.
    Player.CanMove($PLAYER_CHAR) = True
    0812: AS_actor $PLAYER_ACTOR perform_animation "DOOR_LHINGE_O" IFP_file "PED" 50.0 loopA 0 lockX 0 lockY 0 lockF 1 time 90 //Где $PLAYER_ACTOR - это глобальная переменная ped'a которым мы играем с SAMP. DOOR_LHINGE_O - название анимации, "PED" - где именно храниться анимация. 50.0, 0, 0, 0, 1 - я сам не знаю, что это. 90 - время проигрывания анимации. Его мы узнаем в anim manager.
    end//Заканчиваем проверку условий
    //Конец первой анимации
    end
    Чтобы вам не мучаться я написал готовые части скрипта. Их вставляем как показанно на примере выше.
    Для анимаций с ped.ifp
    Код:
    //Начало анимации
    if and
    0AB0: key_pressed Клавиша
    0AB0: key_pressed Клавиша
    not actor.Driving($PLAYER_ACTOR)
    Player.CanMove($PLAYER_CHAR) = True
    then
    Player.CanMove($PLAYER_CHAR) = True
    0812: AS_actor $PLAYER_ACTOR perform_animation "Название анимации" IFP_file "PED" 50.0 loopA 0 lockX 0 lockY 0 lockF 1 time 90
    end
    //Конец анимации
    Для анимаций с gta3.img:
    Код:
    //Начало анимации
    if and
    key_pressed Клавиша
    key_pressed Клавиша
    not actor.Driving($PLAYER_ACTOR)
    Player.CanMove($PLAYER_CHAR) = True
    then
    04ED: load_animation "Название архива анимации"
    if //Если
    04EE: animation "Название архива анимации" loaded
    then //Тогда
    0615: define_AS_pack_begin 18@ //
    0605: actor -1 perform_animation_sequence "Название анимации" IFP_file "Название архива анимации" 4.0 loop 0 0 0 0 time -1
    0616: define_AS_pack_end 18@
    0618: assign_actor $PLAYER_ACTOR to_AS_pack 18@
    061B: remove_references_to_AS_pack 18@
    04EF: release_animation "Название архива анимации"
    end
    end
    //Конец анимации
     
    #1

Поделиться этой страницей