00067. Использование турелей

Использование турелей|Мы продолжаем изучать скриптинг, и сегодня речь пойдет о турелях, а точнее о режиме турели.|wmysterio|wmysterio||||Что это значит? Думаю в оригинальной игре вам предоставлялись шансы пострелять как бы с места пассажира: по-центру появляется прицел и можем стрелять. Например: в миссии Зеро нам нужно было сбивать самолётики миниганом. Мы не могли сдвинуться с места, но могли вращать оружие и стрелять. Такой режим принято называть режимом турели ( от слова turret ). Вот как выглядит этот режим:

Знакомо, правда? Давайте рассмотрим опкоды для работы с турелью:

0464: put_actor $PLAYER_ACTOR into_turret_on_car $CAR at_car_offset -0.2 0.5 0.0 position 0 shooting_angle_limit 0.0 with_weapon 0 
06A7: put_actor $PLAYER_ACTOR into_turret_on_car $CAR at_car_offset -0.2 0.5 0.0 position 1 shooting_angle 110.0 70.0 with_weapon 43

Данные опкоды позволяют использовать турель на машине.

Здесь: $PLAYER_ACTOR - хэндл актёра $CAR - хэндл машины, к которой будет прицеплен режим -0.2 0.5 0.0 - определяется позиция, с которой можно будет вести обстрел. Эти координаты берутся относительно автомобиля. Мы поговорим об этом ниже position 0 - выбирается позиция. Я точно не знаю что именно имеется ввиду под словом "позиция", поэтому используйте число указанное в опкодах shooting_angle_limit 0.0 - определяется лимит поворота на определённый угол with_weapon 0 - указывается номер оружия, с которого будет вестись обстрел shooting_angle 110.0 70.0 - Указывается лимит углов поворота. Первое число - поворот по горизонтали. Если поставить 360.0, то можно стрелять вокруг всей тачки. Второе число - поворот по вертикали ( вверх/вниз ). Советую так оставить число 70.0, так как если поставить число больше игра может вылететь. Советую вам использовать опкод 06A7, с ним у меня проблем не возникало, а вот с другим были проблемы с номером оружия

Так же есть возможность прицепить режим турели к объекту:

04F4: put_actor $PLAYER_ACTOR into_turret_on_object $OBJECT offset_from_object_origin -0.2 0.5 0.0 orientation 0 both_side_angle_limit 360.0 lock_weapon 38

Здесь: $PLAYER_ACTOR - хендл актёра $OBJECT - хендл созданного объекта -0.2 0.5 0.0 - определяется позиция, с которой можно будет вести обстрел. Эти координаты берутся относительно объекта, на котором будет турель 360.0 - угловой лимит по горизонтали 38 - номер оружия, с которого будет обстрел

Что бы выйти с режима турели используется опкод:

0465: remove_actor $PLAYER_ACTOR from_turret_mode

Увы, я не нашел опкода, который позволит ходить с турелью. Если я что нибудь разнюхаю, выложу сюда. Если игрока поставить в режим турели, то он не будет передвигаться, а будет следовать за автомобилем или объектом.

Давайте рассмотрим координаты относительно объекта ( оффсеты ) "offset_from_object 0.0 0.0 0.0". Допустим в нас есть объект-звезда. Так и или иначе в неё есть перед ( место, куда "смотрит" объект ). Назовём это место "перёд объекта". Естественно у объекта есть центр. Это будет точка. На рисунке она обозначена красным цветом.

Эта точка имеет координаты 0.0 0.0 0.0. Если мы будем увеличивать только первое число, то оффсет переместится в сторону "перёд объекта":

Если мы будем уменьшать значение и уйдем в минус, то оффсет передвинется в противоположную сторону, то есть, как бы это интересно не звучало, в з"ад объекта" )))

Редактирование первого числа позволяет сдвигать оффсет по желтой линии на рисунке. По зелёной линии мы сможем смещать оффсет влево ( второе число положительное ) или вправо ( второе число отрицательное ) от объекта:

Третье число указывает высоту смещения от объекта. Если оно положительное, то оффсет сместится вверх. Если отрицательное - сместится вниз. Для примера, оффсет "5.0 -5.0 0.0" будет в этой точке:

Самое главное, что координаты ведутся относительно объекта, то есть нам ничего другого вычислять не надо. Объект может быть где угодно и под любыми углами - за нас всё уже сделано! :)

Что касается оффсета автомобиля, то там есть отличия:

  • Первое число - движение влево ( отрицательное число ) / вправо( положительное число );

  • Второе число - движение назад ( отрицательное число ) / вперед ( положительное число );

  • Третье число - движение вниз ( отрицательное число ) / вверх ( положительное число );

Как по мне, то такой вариант намного лучше, чем с объектами. Почему разработчики сделали для каждого класса свои оффсеты - не берусь предположить :) С оффсетами вроде разобрались. Переходим к скриптингу. Давайте напишем скрипт, что бы нажатии кнопки T`, СЖ помещался в режим турели и он мог стрелять с минигана. Для разнообразия сделаем, что бы СЖ оказался возле какого то транспорта:

{$CLEO}
0000:

:NAME
thread 'NAME'
wait 0
model.Load(#MINIGUN)
038B: load_requested_models

:NAME_1
wait 0
if
model.Available(#MINIGUN)
jf @NAME_1

:NAME_2
wait 0
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
if AND
0AB0: key_pressed 84 // T
car.Defined(0@)
then
 if AND
 83C9: not car 0@ damaged
 82BF: not car 0@ sunk
 then
 06A7: put_actor $PLAYER_ACTOR into_turret_on_car 0@ at_car_offset 1.0 0.2 0.3 position 1 shooting_angle 360.0 70.0 with_weapon 38
 wait 250
 jump @NAME_3
 end
end
jump @NAME_2

:NAME_3
wait 0
if OR
actor.Dead($PLAYER_ACTOR)
0AB0: key_pressed 84 // T
03C9: car 0@ damaged
02BF: car 0@ sunk
then
0465: remove_actor $PLAYER_ACTOR from_turret_mode
wait 250
jump @NAME_2
end
jump @NAME_3

Вот скрин:

Выбираем нужную тачку и нажимаем T, помещаемся в неё и начинаем палить во всё подряд! Нажимаем ещё раз <kbd>T, и выходим с режима турели. Интересный вышел скриптик, который можно и в миссию запихнуть ;)

Что касается других актёров, то их тоже можно ставить в режим турели. Они просто будут стоять на месте и стрелять ( нужно заставить их убить кого то опкодом "05E2" ).

Одно я точно не знаю - нужна ли загрузка нужной модели или нет, но на всякий случаи загружайте ;)|1868|1|0|92582055png600375400250``\|15433893png473486399410\|63004922`png`473`486`399`410|44693461png473486399410``\|69616219png473486399410\|25373552`png`473`486`399`410|19110219png473486399410``\|50413679png600375400250``||ispolzovanie_turelej|1499697357

Last updated