Создаем актеров и манипулируем ими
Создаем актеров и манипулируем ими
by ScrewBoy
Friday 12 March 2004 - 06:20:17
В этой главе я расскажу о создании актеров. Перед тем, как создавать актера нужно сначала загрузить соответствующую модель в память, иначе игра повиснет. Делается это так:
0247: request model #модель
#модель это id модели в файле default.ide, так же можно использовать номер модели, который является первым параметром в файле default.ide
Этой командой мы только дали запрос на загрузку модели, сама загрузка идет после команды 038B: load requested models, правда иногда ее можно опустить, но лучше все же писать. Эта команда идет после запроса на загрузку всех моделей, то есть если вы напишите
0247: request model #модель1
038B: load requested models
0247: request model #модель2
038B: load requested models
То это будет не правильно, а вот правильно будет:
0247: request model #модель1
0247: request model #модель2
038B: load requested models
Конечно первый вариант тоже может заработать, но игра может подтормаживать или вообще вылететь с ошибкой. Вот мы запросили модель, загрузили ее в память, пора бы уже эту модель использовать! Но перед этим нужно провести дополнительную проверку, загрузилась ли модель или нет:
:TestLoad
0001: wait 0 ms
00D6: if 1
0248: model #модель1 available
0248: model #модель2 available
004D: jump_if_false ЈTestLoad
........
То есть полностью конструкция загрузки модели выглядит следубщим образом:
0247: request model #модель1
0247: request model #модель2
038B: load requested models
:TestLoad
0001: wait 0 ms
00D6: if 1
0248: model #модель1 available
0248: model #модель2 available
004D: jump_if_false ЈTestLoad
Вот теперь уже можно создавать актера. Делается это командой:
009A: $my_act = create_actor 4 #модель1 at x y z
Назначение $my_act, #модель1, x, y и z вы уже должны знать, но вот что за непонятная цифра 4? Это как бы тип актера, а типы бывают следующие: pedtypes:
0=player
1=player2
2=player3
3=player4
Вот назначение типов 1,2,3 мне не очень понятно.
4=мужчина
5=женщина
6=полицейский
7=кубинец
8=гаитянец
9=уличный хулиган
10=не известно
11=частный охраник (такой в синей форме, на спине еще P.I.G написано)
12=байкер
13=бандит Версетти
14=игрок в гольф
15=не известно
16=медик
17=пожарный
18=приступник (те, за которых дают 50$ если по лицу дашь)
19=специальный, используется в роликах
От типа зависит и поведение актера, то есть если создать актера с моделью копа и поставить ему тип 4, то при нападении на него звездочки не появятся, а вот если поставить тип 6, то появятся. Так же и с бандами.
Итак, вот создан актер, а что с ним собственно говоря делать? Для начала разберем, какие параметры можно присвоить актеру:
0223: set_actor $test_act health_to 100 - установить текущий уровень здоровья
035F: set_actor $test_act armour_to 100 - то же для брони
02E2: set actor $my_act weapon accuracy to 80 - установить точность в процентах
Так же актеру можно присвоить многие флаги (тоже что то вроде параметров). Все флаги никто не знает, кроме разработчиков игры, но, если порыться в оригинальном main.scm становиться ясно, что есть присвоить актеру флаг 64 то он будет атаковать полицейских и всех, кто нападает на игрока, а также на членов других банд. Этот флаг лучше присваивать актерам с типом 13. А вот если поставить актеру флаги 1 и 16 одновременно, то он будет убивать всех подряд, включая игрока. Так же у актера есть такая вещь, как статы, это тоже таки параметры. Например, чтобы актер защищал игрока, ему нужно поставить стат 6, а чтоб убивал то 16. Флаги ставятся командой:
011A: set_actor $my_act flags 64 а статы командой:
0243: set_actor $my_act ped_stats_to 6
Еще актера можно заставиьт следовать за персонажем, причем аж двумя командами, особой разницы я не заметил:
01DF: tie_actor $my_act to_player $PLAYER_CHAR
или
01D2: actor $my_act follow_player $PLAYER_CHAR
Также, актерам можно дать оружие, что делается командой 01B2: give_actor $my_act weapon 23 ammo 9999 где 23 - номер модели оружия в default.ide, а 9999 - количество патронов. Модель оружия нужно предварительно загрзить так же, как и модель актера. Ну и еще актеру можно задать угол поворота по оси Z, система та же, что и у парковок машин: 0173: set_actor $my_act z_angle_to $угол
Ну вот, теперь, благодаря изученным командам сделаем телохранителя. Создайте thread MyBodyG (как это сделать писалось в предыдущей главе). А вот что нужно написать после :MyBodyG :
0001: wait 0 ms
0247: request model #PGA
0247: request model #M4
038B: load_requested_models
:TestLoad
0001: wait 0 ms
00D6: if 1
0248: model #PGA available
0248: model #M4 available
004D: jump_if_false ЈЈTestLoad
009A: $my_act = create_actor 4 #PGA at x y z
01B2: give_actor $my_act weapon 26 ammo 9999
0243: set_actor $my_act ped_stats_to 6
011A: set_actor $my_act flags 64
01DF: tie_actor $my_act to_player $PLAYER_CHAR
004E: end_thread
Мы создали актера, который, если к нему подойти, пойдет за игроком и будет стрелять в ментов и в тех, кто атакует игрока.
Иногда при выстрелах актеру убегают, чтобы этого не было нужно их флаг not_scared поставить в значение 1:
0350: unknown actor $my_act not scared flag 1
Так, если нужно чтобы актер стоял на месте, его флагу wander_state выставить значение 0:
0319: set actor $my_act wander state to 0 (off)
Актерами можно присваивать некоторые из анимаций игры, делаетмя это командой
0372: set actor $my_act anim 24 wait state time 60000000 ms
24 - номер анимации, 60000000 - время, в течениии которого проигрывать анимацию. Если нужно чтобы анимация проигралась до конца, то ставьте побольше. Вот списо анимаций:
1 - стоять
2 - стоять, руки за спину
3 - оглядваться по сторонам
8 - сначала руки за спину, потом почесать голову
9 - как прохожие в игре, когда при беге натолкнулись на стену
10 - разворот на 180 градусов
11 - 9, а затем 8
12 - как устал после бега
14 - как стреляет сидя
15 - удивлен
16 - взмах рукой, как ловит такси
17 - руки вверх
19 - разговаривает
21 - садиться
23 - встает
24 - сидит
25 - как что-то дает из кармана и что-то забирает назад
30 - падает
31 - смотрит на часы
33 - пинок ногой
Так же есть анимации, которые требуют загрузку дополнительных анимационных файлов, таких анимаций всего 3: RIOT, LANCE, STRIP, загружаются анимации командой
04ED: load_animation "название анимации". Для этих анимаций тоже есьт номера:
29 - махать руками, выражать недовольство, при желании може потянуть на взмахи болельщиков (анимация RIOT)
32 - танцевать (анимация RIOT)
34 - сидеть на стуле как будто без сознания, как Лэнс в миссии, где его на свалке пытают, поэтому и название у анимации соответствующее - LANCE.
Если нужно сделать так, что два актера как будто разговаривают межу собой:
03F9: make actors $act1 $act2 converse in 999999999 ms
где 999999999 время, в течении которого они разговаривают. Так же актеров можно заставить передвигать куда-нибудь, причем не только шагом, но и бегом и спринтом:
0211: actor $my_act walk_to x y - идти
0239: actor $my_act run_to x y - бежать
0502: unknown_actor $my_act sprint_to x y- быстро бежать (спринт). Не удивляйтесь, что в этих командах все 2 координаты - так надо. Еще актеру можно выставить иммунитеты на разные типы атак:
02AB: set actor $my_act immunities 1 1 1 1 1
Первая цифра - защита от пуль, вторая - от огня, третья - от взрывов, четвертая - не знаю, похоже от кулаков, про пятую цифру никто ничего не знает.
Наверно вы уже поняли что цифра 1 - иммунитет включен, 0 - выключен. Так, вроде бы все про актеров рассказал. Вскоре перейдем к машинам