# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00200/00069.-vzryvy-i-vsyo-chto-svyazano-s-ognyom..md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
