000153. Пример полноценной миссии "Ограбление"

Пример полноценной миссии "Ограбление"||wmysterio|wmysterio|wmysterio@yandex.ru|||Всем привет! Мы продолжаем писать полноценные миссии, и сегодня будем писать скрипт ограбления. Заодно и познакомимся с магнитами поближе, так как ограбления будут на вертолёте! Допустим, что Торино понадобилась помощь CJ в одной операции. Согласно ней, CJ должен украсть 3 патриота, которые стоят в троих разных посёлках. Начнём, конечно, со стартера, который поменяет только координаты названия миссии с предыдущего примера полноценной миссии:

{$CLEO} thread 'STARTER' while true wait 0 if $ONMISSION == 0 then 03A1: show_sphere_at 401.501 2539.6433 16.5452 radius 2.0 if 00EC: actor $PLAYER_ACTOR sphere 0 near_point 401.501 2539.6433 radius 2.0 2.0 then Player.CanMove(0, 0) Actor.SetImmunities($PLAYER_ACTOR, 1, 1, 1, 1, 1) 01F0: set_max_wanted_level_to 0 0ACF: show_formatted_styled_text "HEIST" time 4000 style 2 fade 0 1000 0A94: start_custom_mission "HEIST" wait 1000 end end end

Точка старта будет в регионе кладбища самолётов. По просьбе одного из пользователей, я добавлю scm-функции, которые будем использовать на примере этот миссии. Прежде всего, на ум попадет написать ф-ю загрузки моделей, а также установка камеры. Воспользуемся такими "прототипами":

goto @LOAD_MODEL_END :LOAD_MODEL Model.Load(0@) 038B: load_requested_models 0AB2: ret 0 :LOAD_MODEL_END // Функция загрузки модели goto @PASTE_CAMERA_END :PASTE_CAMERA 04E4: refresh_game_renderer_at 0@ 1@ 015F: set_camera_position 0@ 1@ 2@ rotation 0.0 0.0 0.0 0160: set_camera_point_at 3@ 4@ 5@ switchstyle 2 0AB2: ret 0 :PASTE_CAMERA_END // Функция установки камеры goto @RESTORE_CAMERA_END :RESTORE_CAMERA Camera.Restore_WithJumpCut Camera.SetBehindPlayer 0AB2: ret 0 :RESTORE_CAMERA_END // Функция, которая возвращает камеру в обычное положение

В результате мы имеем 3 функции:

0AB1: call_scm_func @LOAD_MODEL 1 #ADMIRAL 0AB1: call_scm_func @PASTE_CAMERA 6 position 401.501 2539.6433 16.5452 point 401.501 2539.6433 16.5452 0AB1: call_scm_func @RESTORE_CAMERA 0

Давайте думать, какие ещё полезные функции можно добавить. К примеру мы можем написать функцию спавна транспорта. Она будет иметь примерно такой вид:

goto @SPAWN_CAR_END :SPAWN_CAR 0AB1: call_scm_func @LOAD_MODEL 1 0@ 3@ -= 1.0 5@ = Car.Create(0@, 1@, 2@, 3@) car.Angle(5@) = 4@ Model.Destroy(0@) 0AB2: ret 1 5@ :SPAWN_CAR_END

Мы воспользовались функцией загрузки внутри функции спавна. На выходе мы получаем хендл транспорта. Сигнатура самой функции будет такой:

0AB1: call_scm_func @SPAWN_CAR 5 model #ADMIRAL at 401.501 2539.6433 16.5452 angle 31.1548 handle_as $CAR

Следует участь, что описание не имеет значения. Краткий пример такой функции естественно будет таким:

Также полезно будет написать функцию, которая будет управлять за режимы экрана(для видеоролика или обычная). Следующий код будет таким:

goto @ENABLE_SCREEN_MODE_END :ENABLE_SCREEN_MODE 00BE: text_clear_all 03E6: remove_text_box if 0@ == 1 then 0826: enable_hud 0 0581: enable_radar 0 02A3: enable_widescreen 1 else 0826: enable_hud 1 0581: enable_radar 1 02A3: enable_widescreen 0 end 0AB2: ret 0 :ENABLE_SCREEN_MODE_END

Сигнатура этого прототипа будет такой:

0AB1: call_scm_func @ENABLE_SCREEN_MODE 1 as 1

Думаю, такое количество функций будет достаточно. Начнём скриптить миссию. Начало будет, как обычно, такое:

Теперь мы увидим сцену, в которой Торино звонит CJ со своим очередным заданием:

Идёт разработка... |19|1|0||primer_polnocennoj_missii_ograblenie|1393619746

Last updated