Деалем спецназ, спускающийся по верёвкам
В этойстатье, я хочу рассказать как создавать полицейский десант, который спускается с вертолёта по верёвкам. Да, да, именно по верёвкам ! Хотя в данной ситуации верёвку можно назвать по-разному: трос, канат и тд. Называйте её как хотите. Все из вас, наверное, играли в GTA San Andreas, и удирали от назойливого полицейского вертолёта, который ослеплял вас своим мощным прожектором, так в добавок ко всему, с этого вертолёта по верёвкам спускался до зубов вооруженный полицейский спецназ. Который , в прочем, на вас много времени не терял. В миг арестовывал или убивал. Но если вы прочтёте эту статью внимательно и ознакомитесь со всеми моими инструкциями, то совсем
скоро вы научитесь создавать такой же спецназ, спускающийся с вертолета по тросу, и управлять им.
Итак, начнём. для того, чтобы создать верёвку с актером (rappel), требуется всего один опкод. Вот и он: 0503: create_rappel 25 165 at $73 $74 $75 with_actor 84@ (опкод для Sanny Builder`a)
Рассмотрим все параметры: [25] - я не знаю зачем он нужен, да и вам его тоже знать не обязательно. Изменять его не следует. [165] - это id актёра, который будет спускаться по верёвке. Актёр может быть кто угодно: полицейский, пожарный, медик или же обычный пешеход. Правда, я не знаю можно ли так проделывать с игроком ($PLAYER_ACTOR). Перед использованием этого опкода необходимо загрузить модель актёра, думаю, все об этом знают. [$73] [$74] [$75] - это координаты начала верёвки, к ним мы ещё вернёмся [84@] - переменная актёра
Так, с основным опкодом мы разобрались. Теперь переходим к вспомогательным. Если вы хотите создать верёвку с актёром не зависемо от вертолёта, то используйте обычные координаты. А если вы хотите создать верёвку, спускающююся с вертолёта, то в этом случае рекомендую использовать вам переменные. Вот почему в вышеприведённом опкоде использовались переменные. Для того чтобы получить переменные координаты, исходящие от вертолёта используйте следующюю команду. 0407: create_coordinate $73 $74 $75 from_car 75@ offset -1.1 -0.3 -0.4
Значения: [$73] [$74] [$75] - собственно переменные тех координат, которые нам надо получить [75@] - перемнная вертолёта [-1.1 -0.3 -0.4] - сам offset
Кратко поясню, что такое offset . Offset это координаты полученные путём сдвига от центра какого ли бо объекта, в нашем случае это вертолёт. Для вашего удобства, я напишу offset`ы наиболее подходящих точек, для размещения тросов с актёрами, на вертолёте типа Maverick. 1.0 1.25 -0.4 ; 1.1 -0.3 -0.4 ; -1.0 1.25 -0.4 ; -1.1 -0.3 -0.4. Но для других вертолётов offset`ы высчитывайте сами.
Но это ещё не всё. Существует ряд нюансов, которые также необходимо учитывать при создании како-го либо скрипта с использованием возможности спуска актёров по верёвкам. Для опытных скриптёров прекрасно известно чтобы расчитать точный полёт вертолёта, необходимо задавать вертолёту небольшую скорость полёта. Дело всё в том,
что если вы попытаетесь сбросить людей не верёвках при полёте вертолёта, то у вас просто на просто ничего не получиться. Тросы с актёрами оторвуться, и актёры, упадя на землю погибнут. Поэтому, во-первых: задавайте небольшую скорость полёта (10-15 км/ч.). А во-вторых: после проверки находится ли вертолёт в определённых координатах с определённым радиусом, и если да, то тормозите вертолёт с помощью этой команды (или проще говоря, задаём ему скорость равную 0): 04BA: set_car $heli speed_instantly 0.0
Пример для SB:
------
:2 (начало 2 части)
0001: wait 0 ms (ждём 0 милисекунд)
if (если)
0100: actor $act0 near_point_in_car $10981 $10982 $10983 radius 20.0 20.0 20.0 sphere 0 (проверка)
jf @2 (если нет, то идём в начало)
04BA: set_car $heli speed_instantly 0.0 (тормозим вертолёт)
0407: create_coordinate $73 $74 $75 from_car $heli offset 1.0 1.25 -0.4 (создаём координаты через offset)
0407: create_coordinate $76 $77 $78 from_car $heli offset 1.1 -0.3 -0.4 (создаём координаты через offset)
0407: create_coordinate $79 $80 $81 from_car $heli offset -1.0 1.25 -0.4 (создаём координаты через offset)
0503: create_rappel 25 165 at $73 $74 $75 with_actor $act1 (десантируем первого актёра)
0503: create_rappel 25 165 at $76 $77 $78 with_actor $act2 (десантируем второго актёра)
0503: create_rappel 25 166 at $79 $80 $81 with_actor $act3 (десантируем третьего актёра)
jump @3 (переходим в 3 часть)
------
Ну вроде всё. С основными командами, которые нужны для создания верёвок с актёрами мы разобрались. И на последок хочу представить вам скрипт для вызова охраны, но которая не приезжает на машине, как обычно, а прилетает на вертолёте и спускается с вертолёта по верёвкам. Скрипт активируем кнопкой действия (обычно это TAB). Да, кстати охранники смахивают на людей в чёрном, из фильма MIB. Ну а вот и скрипт (для Sanny Builder`a):
------
:MIB_4
0001: wait 0 ms
if 2
0118: actor $act1 dead
0118: actor $act2 dead
0118: actor $act3 dead
jf @MIB_5
01C2: remove_references_to_actor $act1
01C2: remove_references_to_actor $act2
01C2: remove_references_to_actor $act3
jump @MIB_2
:MIB_5
0001: wait 0 ms
if
8256: NOT player $PLAYER_CHAR defined
jf @MIB_6
01C2: remove_references_to_actor $act1
01C2: remove_references_to_actor $act2
01C2: remove_references_to_actor $act3
jump @MIB_2
:MIB_6
0001: wait 0 ms
if 2
80F2: NOT actor $PLAYER_ACTOR near_actor $act1 radius 80.0 80.0 0
80F2: NOT actor $PLAYER_ACTOR near_actor $act2 radius 80.0 80.0 0
80F2: NOT actor $PLAYER_ACTOR near_actor $act3 radius 80.0 80.0 0
jf @MIB_5
01C2: remove_references_to_actor $act1
01C2: remove_references_to_actor $act2
01C2: remove_references_to_actor $act3
jump @MIB_2
end_thread
------
Даный скрипт является примером использования возможности спуска людей с вертолёта по верёвкам. Я думаю, что использовав эту возможность, можно писать интересные миссии, дополнительно приправив их зрелещными погонями полиции, прожекторами, взрывами, и другими спецефектами. Вот и всё. Если кому-то что-то не понятно пишите в коментариях или на форуме. Всегда буду рад помочь.