Рейтинг - 5.0 (1)

Всем привет! С вами wmysterio! Сейчас поговорим детальнее об анимации. Существует целый ряд опоков, связанных с ними, но остановлюсь я на последовательностях или так называемых AS-паках ( action sequences ).

Перейдём к опкодам.

0615: define_AS_pack_begin $ActSeq // Создаёт начало экшн-пака
0616: define_AS_pack_end $ActSeq // Создаёт конец экшн-пака

Заставить выполнять актёра последовательность анимации можно с помощью опкода:

0618: assign_actor $0@ to_AS_pack $ActSeq
Здесь:
0@ - хендл, актёра
$ActSeq - естественно имя AS-пака

Заставить выполнять последовательность анимации целую группу можно с помощью опкода:

087D: assign_group $PLAYER_GROUP to_AS_pack $ActSeq
Здесь:
$PLAYER_GROUP - группа, что будет вкалывать :)
$ActSeq - имя AS-пака

Следующий опкод выгружает последовательность:

061B: remove_references_to_AS_pack $ActSeq

Между опкодами "0615" и "0616" пишутся списки анимаций, которые будут выполняться последовательно. Для примера, я взял "3" анимации, которые актёр будет выполнять:

0605: actor -1 perform_animation_sequence "BOM_PLANT_IN" from_file "BOMBER" 4.0 loop 0 0 0 1 -1
0605: actor -1 perform_animation_sequence "BOM_PLANT_LOOP" from_file "BOMBER" 4.0 loop 0 0 0 0 -1
0605: actor -1 perform_animation_sequence "BOM_Plant_2Idle" from_file "BOMBER" 4.0 loop 0 0 0 0 -1

В этот список можно указывать анимации с любых IFP-файлов ( даже разных ), главное их загрузить перед процессом выполнения. Перейдём к скриптам. Давайте создадим экшн-пак, и заставим актёра выполнять его:

{$CLEO}
0000:

:SEQ
thread 'SEQ'
wait 5000
04ED: load_animation "BOMBER"
model.Load(#WMYDRUG)
038B: load_requested_models

:SEQ_1
wait 0
if and
04EE: animation "BOMBER" loaded
model.Available(#WMYDRUG)
jf @SEQ_1

0615: define_AS_pack_begin $ActSeq
0605: actor -1 perform_animation_sequence "BOM_PLANT_IN" from_file "BOMBER" 4.0 loop 0 0 0 1 -1
0605: actor -1 perform_animation_sequence "BOM_PLANT_LOOP" from_file "BOMBER" 4.0 loop 0 0 0 0 8000
0605: actor -1 perform_animation_sequence "BOM_Plant_2Idle" from_file "BOMBER" 4.0 loop 0 0 0 0 -1
0616: define_AS_pack_end $ActSeq

04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 5.0 -1.0
4@ = actor.Angle($PLAYER_ACTOR)
4@ += 180.0
0@ = actor.Create(5, #WMYDRUG, 1@, 2@, 3@)
model.destroy(#WMYDRUG)
actor.Angle(0@) = 4@
0618: assign_actor $0@ to_AS_pack $ActSeq
0AD0: show_formatted_text_lowpriority "ežo¢ek ¢¨£ož®¬e¦ £ocžešo¢a¦ež©®oc¦© a®œ¯a œœ." time 4000
wait 4000
0AD0: show_formatted_text_lowpriority "­eže™ko e¯y :)" time 4000
wait 4000
061B: remove_references_to_AS_pack $ActSeq
04EF: release_animation "BOMBER"
0A93: end_custom_thread

В результате наш актёр выполняет указанные анимации:

Если вы искали в поисковике опкодов воспроизведение анимации актёра, то наверняка вы сталкивались с сутуацией, когда находило целых три опкода. Вот эти:

0605: actor $PLAYER_ACTOR perform_animation_sequence "phone_talk" IFP_file "PED" 4.0 loop 0 0 0 0 time 2000 // versionA
0812: AS_actor $PLAYER_ACTOR perform_animation "phone_talk" IFP_file "PED" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 2000 // versionB
0A1A: actor $PLAYER_ACTOR perform_animation "phone_talk" IFP_file "PED" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 2000 ms // versionC

Возникают вопросы: Почему? С какой целью разработчики сделали это? В чем разница? Я покопался и интернете и, кажется, нашел ответ: эти версии создавались для различных ситуаций с актёрами и вела себя, соответственно, от состояния актёра.

ВерсияОписание
AАнимация будет останавливаться, когда актёра ударили, выстрелили в него или когда нужно выполнять анимации, запрограммированных в EXE-шнике.
BАнимация будет проигрываться, в независимо от ситуации. Чаще используется в AS-паках. Вообще все опкоды с приставкой AS используются в основном в последовательностях, причем не только анимационные команды.
CПозволяет актёру двигаться, выполняя анимацию. Прерывается, когда актёр прыгает, падает, плывёт.

Я, правда, остаюсь верным опкоду "0605" :)

Рассмотрим так же опкоды, которые привлекли моё внимание:

0611: actor $PLAYER_ACTOR performing_animation "phone_talk"

Проверка: "Выполняет ли актёр $PLAYER_ACTOR анимацию 'phone_talk'?".

0613: 26@ = actor $PLAYER_ACTOR animation "phone_talk" time

Заносит в переменную "26@" время выполнения актёром "$PLAYER_ACTOR" анимации "phone_talk".

0614: set_actor $PLAYER_ACTOR animation "phone_talk" progress_to 2@ // 0.0 to 1.0

Устанавливает прогресс выполения актёром "$PLAYER_ACTOR" анимации "phone_talk".

Здесь:
2@ - дробное число от 0.0 до 1.0. Например, если нам нужно, что бы актёр начал выполнять анимацию не сначала а с середины, то устанавливают анимации прогресс в 0.5.

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

0605: actor $PLAYER_ACTOR perform_animation_sequence "phone_talk" IFP_file "PED" 4.0 loop 0 0 0 0 time 2000 // versionA
0614: set_actor $PLAYER_ACTOR animation "phone_talk" progress_to 0.5

Опкод записывает общее время воспроизведения актёром "$PLAYER_ACTOR" анимации "phone_talk" в переменную "23@":

061A: get_actor $PLAYER_ACTOR animation "phone_talk" total_time_to 23@

Есть ещё этот:

0612: set_actor $PLAYER_ACTOR animation "phone_talk" paused 0

По-идеи, опкод должен ставить анимацию на паузу и продолжать воспроизведение, однако он у меня как-то неадекватно ведёт себя, а точнее, вообще никакой реакции :) Что-же, урок подошел к концу. Надеюсь мои находки будут для вас новыми и интересными ;)


Теги: action sequences, AS pack, Последовательность в анимации

SanKing   (01.04.13 10:41)
Огромное спасибо за урок! В SBManual 3 тоже есть про экшн-паки, но у тебя подробнее и лучше объяснено! И спасибо за различия между VersionA, VersionB и VersionC.

Fox1324   (01.10.14 15:54)
Извините, я новичок и хотел бы узнать что означает: 4@ += 180.0, переменная 18@, Откуда они вообще берутся эти переменные? Можете ссылку кинуть на урок?

Fox1324   (01.10.14 16:04)
Дайте ссылку, почитать про все переменные пожалуйста

0
wmysterio   (01.10.14 16:41)

GeniusZ   (29.07.15 10:56)
А как заставить актера куда нибудь пойти или побежать, желательно в AS паке?

0
wmysterio   (29.07.15 19:46)
Код
0615: define_AS_pack_begin 2@  
  05D3: AS_actor -1 goto_point 2500.376 -1685.9846 13.472 mode 4 time -1 ms  
  05D3: AS_actor -1 goto_point 2485.1157 -1686.6415 13.5085 mode 4 time -1 ms  
  // 0643: set_AS_pack 2@ loop 1 // - если нужно зациклить выполнение экшн-пака
  0616: define_AS_pack_end 2@
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
А вы проходили GTA San Andreas на 100% без читов и скриптов?
Всего ответов: 6
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
DK22Pac
Реклама