# 00080. Тюнинг транспорта, работа с компонентами тюнинга

Тюнинг транспорта, работа с компонентами тюнинга|Этот урок будет посвящен тюннингу, используя скриптинг.|wmysterio|wmysterio||||Одним из главных нововведений в ГТА стал тюнинг транспорта. В первую очередь обращаю Ваше внимание на том, что не все автомобили могут быть тюнингированы и, к тому-же, некоторый тюнинг доступный только конкретной машине. Спойлер, колёса, бампера и т.п являются компонентами автомобиля. Количество таких компонентов зависит от автомобиля, что "прокачивается". В этом уроке мы попробуем тюнингировать #ELEGY.

Первое, что нужно сделать - узнать какие компоненты доступны для тюнинга. Для этого откроем файл "carmods.dat" любым текстовым редактором и ищем строку, которая начинается с ELEGY:

elegy, exh\_a\_l, exh\_c\_l, fbmp\_a\_l, fbmp\_c\_l, nto\_b\_l, nto\_b\_s, nto\_b\_tw,\
rbmp\_a\_l, rbmp\_c\_l, rf\_a\_l, rf\_c\_l, spl\_a\_l\_b, spl\_c\_l\_b, wg\_l\_a\_l,\
wg\_l\_c\_l

Каждой запятоц выделено компонент, доступный для тюнинга. Во многих случаях компоненты начинаются с одного префикса:

\*\*nto\*\*\_b\_l\
\*\*nto\*\*\_b\_s\
\*\*nto\*\*\_b\_tw

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

| Префикс | Описание                                                   |
| ------- | ---------------------------------------------------------- |
| exh     | Выхлопная труба                                            |
| fbmp    | Передний бампер ( \*\*f\*\*orward \*\*b\*\*u\*\*mp\*\*er ) |
| nto     | Нитро ( \*\*n\*\*i\*\*t\*\*r\*\*o\*\* )                    |
| rbmp    | Задний бампер                                              |
| spl     | Спойлер                                                    |

Существуют и другие компоненты, но Вы уже сами протестируете их. Я только привел пример этих префиксов. Суть этой информации в том, что бы не делать ошибок при загрузке компонентов. Мне иногда приходят письма об этих компонентах и как же удивляются адресанты когда я им отвечаю, что "нельзя загружать два одинаковых компонента", хотя как они пишут: "Эти компоненты находятся в списке". Отвечаю наперёд: можно использовать только один компонент из одинаковых префиксов.

Это теория. Советую вам обратить большое внимание на это, так как это поможет вам миновать ошибки. Перейдём к опкодам:

```
06E9: load_car_component #rbmp_c_l // загрузить компонент
06EA: car_component #rbmp_c_l available // проверка "Загрузился ли компонент?"
06E7: 1@ = add_car_component #rbmp_c_l to_car 0@ // устанавливает компонент транспорту
```

Здесь:\
1@ - в эту переменную будет записан компонент\
\#rbmp\_c\_l - модель загруженного компонента\
0@ - наш автомобиль

Как только компонент прицеплен к машине, можем смело очищать память игры от загруженной модели компонента:

```
06EB: release_car_component #rbmp_c_l
```

Наш скрипт будет примерно таким:

```
{$CLEO}
0000:

:1
thread '1'
wait 0
06E9: load_car_component #rbmp_c_l
model.Load(#ELEGY)
038B: load_requested_models

:1_1
wait 0
if AND
06EA: car_component #rbmp_c_l available
model.Available(#ELEGY)
jf @1_1
0@ = car.Create(#ELEGY, 2493.1716, -1667.1075, 12.3437)
car.Angle(0@) = 178.0475
model.Destroy(#ELEGY)
06E7: 1@ = add_car_component #rbmp_c_l to_car 0@
06EB: release_car_component #rbmp_c_l
0A93: end_custom_thread
```

Результат нашего тюнинга:

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

Как видим, задний бампер успешно поставлен!

Кроме загрузки компонентов, возможно давать автомобилю некоторые примочки. Рассмотрим несколько опкодов из этой категории ( компонентов загружать не нужно ):

```
09E9: car 0@ add_single_nitro // установить одноразовый нитроускоритель
07FF: set_car 0@ hydraulics 1 // установить гидравлику
0216: enable_taxi 0@ light 1 // включает или выключает значок "Такси" на машине ( только для машин такси )
0572: enable_taxi_nitros 1 // опкод включает нитро во всех такси
```

Есть ещё проверка "Машина имеет гидравлику?":

```
0803: car 0@ have_hydraulics
```

Одпокы для работы с покраской:

```
06ED: set_car 0@ paintjob 2
0988: get_car 0@ paintjob 1@
```

Опкод установит/получит тачке необходимую покраску ( они ещё называются винилы ).

Здесь:\
0@ - машина\
2 - номер винила. Диапазон винил: от 0 до 2. Если поставить число больше или меньше, то покраска не поставится. Тоже самое касается автомобилей, которые не поддерживают перекраски винил\
1@ - в эту переменную будет занесен номер текущей покраски опкодоа 06ED

Опкоды, для работы с цветом машины:

```
0229: set_car 0@ primary_color_to 11 secondary_color_to 0 // задать основные цвета
03F3: get_car 0@ primary_color_to 1@ secondary_color_to 2@ // получить основные цвета
```

Так же существуют и такие странные опкоды:

```
0A11: set_car 0@ tertiary_color_to 11 quaternary_color_to 0 // задать вторичные цвета
0A12: get_car 0@ tertiary_color_to 1@ quaternary_color_to 2@ // получить вторичные цвета
```

Это как бы 3-й и 4-й цвет ( используется не некоторых автомобилях ). Также мы можем задать номерной знак автомобилю опкодом:

```
0674: set_car_model #ELEGY numberplate "AA_TELL"
```

Здесь:\
\#ELEGY - модель транспорта. Использовать опкод нужно перед созданием машины\
"AA\_TELL" - текст номерного знака. Не всегда работает и обычно меняются только задние номера

Ну и напоследок давайте прокачаем наш ELEGY:

```
{$CLEO}
0000:

:1
thread '1'
wait 0
06E9: load_car_component #rbmp_c_l
06E9: load_car_component #spl_a_l_b
model.Load(#ELEGY)
038B: load_requested_models

:1_1
wait 0
if AND
06EA: car_component #rbmp_c_l available
06EA: car_component #spl_a_l_b available 
model.Available(#ELEGY)
jf @1_1
0@ = car.Create(#ELEGY, 2493.1716, -1667.1075, 12.3437)
car.Angle(0@) = 178.0475
model.Destroy(#ELEGY)

06E7: 1@ = add_car_component #rbmp_c_l to_car 0@
06E7: 2@ = add_car_component #spl_a_l_b to_car 0@ 
06EB: release_car_component #rbmp_c_l
06EB: release_car_component #spl_a_l_b 
 
09E9: car 0@ add_single_nitro
07FF: set_car 0@ hydraulics 1
06ED: set_car 0@ paintjob 1 

0A93: end_custom_thread
```

Результат:

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

На этом урок окончен. =)|2567|1|0|56885858`png`500`300`400`240``\|90309845`png`500`300`400`240\`\`||tjuning\_transporta\_rabota\_s\_komponentami|1499755417
