> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00100/00600/000153.-primer-polnocennoi-missii-and-quot-ograblenie-and-quot.md).

# 000153. Пример полноценной миссии \&quot;Ограбление\&quot;

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

| <p>{$CLEO}<br>thread 'STARTER'<br><br>while true<br>wait 0<br>    if<br>    $ONMISSION == 0<br>    then<br>    03A1: show\_sphere\_at 401.501 2539.6433 16.5452 radius 2.0<br>        if<br>        00EC:   actor $PLAYER\_ACTOR sphere 0 near\_point 401.501 2539.6433 radius 2.0 2.0<br>        then<br>        Player.CanMove(0, 0)<br>        Actor.SetImmunities($PLAYER\_ACTOR, 1, 1, 1, 1, 1)<br>        01F0: set\_max\_wanted\_level\_to 0<br>        0ACF: show\_formatted\_styled\_text "HEIST" time 4000 style 2<br>        fade 0 1000<br>        0A94: start\_custom\_mission "HEIST"<br>        wait 1000<br>        end<br>    end<br>end<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

| <p>goto @LOAD\_MODEL\_END<br>:LOAD\_MODEL<br>Model.Load(0@)<br>038B: load\_requested\_models<br>0AB2: ret 0<br>:LOAD\_MODEL\_END // Функция загрузки модели<br><br>goto @PASTE\_CAMERA\_END<br>:PASTE\_CAMERA<br>04E4: refresh\_game\_renderer\_at 0@ 1@<br>015F: set\_camera\_position 0@ 1@ 2@ rotation 0.0 0.0 0.0<br>0160: set\_camera\_point\_at 3@ 4@ 5@ switchstyle 2<br>0AB2: ret 0<br>:PASTE\_CAMERA\_END // Функция установки камеры<br><br>goto @RESTORE\_CAMERA\_END<br>:RESTORE\_CAMERA<br>Camera.Restore\_WithJumpCut<br>Camera.SetBehindPlayer<br>0AB2: ret 0<br>:RESTORE\_CAMERA\_END // Функция, которая возвращает камеру в обычное положение<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

| <p>0AB1: call\_scm\_func @LOAD\_MODEL 1 #ADMIRAL<br>0AB1: call\_scm\_func @PASTE\_CAMERA 6 position 401.501 2539.6433 16.5452 point 401.501 2539.6433 16.5452<br>0AB1: call\_scm\_func @RESTORE\_CAMERA 0<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

| <p>goto @SPAWN\_CAR\_END<br>:SPAWN\_CAR<br>0AB1: call\_scm\_func @LOAD\_MODEL 1 0@<br>3@ -= 1.0<br>5@ = Car.Create(0@, 1@, 2@, 3@)<br>car.Angle(5@) = 4@<br>Model.Destroy(0@)<br>0AB2: ret 1 5@<br>:SPAWN\_CAR\_END<br></p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

| <p>0AB1: call\_scm\_func @SPAWN\_CAR 5 model #ADMIRAL at 401.501 2539.6433 16.5452 angle 31.1548 handle\_as $CAR<br></p> |
| ------------------------------------------------------------------------------------------------------------------------ |

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

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

| <p>goto @ENABLE\_SCREEN\_MODE\_END<br>:ENABLE\_SCREEN\_MODE<br>00BE: text\_clear\_all<br>03E6: remove\_text\_box<br>if<br>0@ == 1<br>then<br>0826: enable\_hud 0<br>0581: enable\_radar 0<br>02A3: enable\_widescreen 1<br>else<br>0826: enable\_hud 1<br>0581: enable\_radar 1<br>02A3: enable\_widescreen 0<br>end<br>0AB2: ret 0<br>:ENABLE\_SCREEN\_MODE\_END<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

| <p>0AB1: call\_scm\_func @ENABLE\_SCREEN\_MODE 1 as 1<br></p> |
| ------------------------------------------------------------- |

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

| <p><br><br></p> |
| --------------- |

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

| <p><br></p> |
| ----------- |

\
Идёт разработка...\
\
\
\
\
\
\
\
\
\
\
\
\
\
|19|1|0||primer\_polnocennoj\_missii\_ograblenie|1393619746
