> 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/00200/00069.-vzryvy-i-vsyo-chto-svyazano-s-ognyom..md).

# 00069. Взрывы и всё, что связано с огнём.

Взрывы и всё, что связано с огнём.|В этом уроке мы рассмотрим взрывы, а также поиграем с огнём! :)|wmysterio|wmysterio||||Вы любите взрывы? Когда автомобиль взлетает на несколько метров вверх... Ммм... Я люблю! :) Чтобы узнать опкоды взрывов в поиске введите слово "explo" и Вам предоставится список опкодов для работы со взрывами. Я рассмотрю только несколько из них - которые я использую и проблем с ними не возникает.

Опкод создаёт взрыв:

```
0948: create_explosion_at 1205.0 162.0 13.0 type 11 camera_shake 5.0
```

Здесь:\
1205.0 162.0 13.0 - координаты, где должен произойти взрыв\
11 - тип взрыва ( см. [Типы взрывов](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/tipy_vzryvov_dlja_gta_san_andreas/1-1-0-30/README.md) )\
5.0 - параметр указывает как сильно будет шататься камера после взрыва. Чем больше число, тем сильнее будет шататься ( но большие значения не вводите )

Опкод воспроизводит звук взрыва:

```
0565: create_soundless_explosion_at 1205.0 162.0 13.0 type 11
```

Здесь:\
1205.0 162.0 13.0 - координаты, где должен произойти взрыв\
11 - тип взрыва. Звук будет подбираться по типу, так что используйте такой тип, который вы указали в опкоде 0948 ( обычно эти опкоды идут вместе )

Далее в нас опкод, который проверяет "Существует ли взрыв в кубе?":

```
0356: explosion_type -1 in_cube_cornerA 107@ 108@ 109@ cornerB 110@ 111@ 112@
```

Здесь:\
-1 - указывается тип взрыва ( см. [Типы взрывов](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/tipy_vzryvov_dlja_gta_san_andreas/1-1-0-30/README.md) ), которого нужно проверить. Если поставить -1, то проверятся будут любые взрывы в кубе\
107@ 108@ 109@ - координаты нижней левой точки куба ( можно использовать обычные координаты в место переменных )\
110@ 111@ 112@ - координаты верхней правой точки куба ( можно использовать обычные координаты в место переменных )

Эти опкоды заставляют транспорт "0@" взорваться:

```
020B: explode_car 0@ // versionA
070C: explode_car 0@ // versionB
```

Прикольно, правда? Давайте напишем скрипт: Когда СЖ сидит в транспорте и нажимает кнопку 8`, то в переменную заносится текущий автомобиль. Если СЖ нажмёт кнопку <kbd>9`, то этот транспорт взорвётся!

```
{$CLEO}
0000:

while true
 if AND
 actor.Driving($PLAYER_ACTOR)
 0AB0: key_pressed 56 // 8
 then
 03C0: 0@ = actor $PLAYER_ACTOR car
 0AD1: show_formatted_text_highpriority "Detonator enable!" time 3000
 end
 if AND
 car.Defined(0@)
 0AB0: key_pressed 57 // 9
 then
 if
 8119: not car 0@ wrecked
 then
 020B: explode_car 0@ // versionA
 end
 end
wait 0
end
```

По-традиции скрин:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/17423750.png)

Даю Вам задание: сделать точно такой же скрипт, только взрыв автомобиля не должен осуществляться опкодами: "020B", "070C" и "08CB". Принцип работы должен быть тем же: нажимаешь кнопку - БАХ!

Взрывы рассмотрели. Теперь рассмотрим огонь. Думаю расписывать что такое огонь не имеет смысла :D Перейдём к опкодам!

```
02CF: 0@ = create_fire_at 0.0 0.0 0.0 propagation 0 size 1
```

Одкод создаёт огонь.

Здесь:\
0@ - переменная, в которой хранится имя огня\
0.0 0.0 0.0 - указываем координаты, где должен создаться огонь\
0 - распространение огня. Чем больше параметр, тем быстрее огонь будет распространятся по площади 1 - размер огня. По-сути это размер ( радиус ) центра

```
02D1: remove_fire 0@
```

Выгружает с памяти ( тушит ) огонь.

```
031A: remove_all_fires
```

Тушит все огоньки.

```
0980: extinguish_all_fires_at -973.759 1077.152 1350.399 radius 200.0
```

Тушит все огони в определённой точке на расстоянии радиуса.

```
06F5: create_coordinate 1@ 2@ 3@ from_fire 0@
```

Записывает в переменные координаты огня "0@". Далее рассмотрим проверки для огней:

```
0973: fire 0@ exists // огонь 0@ существует?
02D0: fire 0@ extinguished // огонь 0@ потушен?
```

Есть так же два интересных опкода. Например: когда в машины мало жизней, то она начинает гореть. Мы можем заставить его гореть принудительно! Используем опкод:

```
0325: 0@ = create_car $CAR fire
```

Здесь:\
0@ - хэндл огня\
$CAR - хэндл транспорта. Если мы поставили иммунитеты к огню, то опкод может не сработать

Так же само мы можем заставить гореть актёра, используя опкод:

```
0326: 0@ = create_actor $ACTOR fire
```

Давайте напишем простейший скрипт - нажимаем кнопку 1\` и СЖ начинает гореть:

```
{$CLEO}
0000:

while true
 if
 0AB0: key_pressed 49
 then
 0326: 0@ = create_actor $PLAYER_ACTOR fire
 end
wait 0
end
```

Думаю основную ( если не полную :) ) информацию я вам предоставил. Вы можете использовать огни в своих миссиях.|1343|1|0|17423750`png`600`360`400\`240\`\`||vzryvy\_i\_vsjo\_chto\_svjazano\_s\_ognjom|1499704863
