# 00086. Движения объектов и эффектов

Движения объектов и эффектов|Опять возвращаемся к объектам. На этот раз мы будем их перемещать. Всё это нужно, что бы мы могли двигать эффекты.|wmysterio|wmysterio||||Думаю во многих модах вы видели, когда к эффекты, например огня, двигаются. Отсюда и вопрос - как заставить их двигаться, ведь нет опкодов для перемещения эффектов. Именно для этого мы вернёмся к движению объектов.

Рассмотрим, уже вам известные опкоды, для перемещения объектов:

```
01BC: put_object $OBJ at 2413.5225 -1659.0372 13.3828
034E: move_object 0@ to 2413.5225 -1659.0372 20.3828 speed 0.5 1.0 1.0 flag 0
```

Опкод "034E" отличается тем, что перемещение происходит плавно. Единственный минус, что этот опкод используется, как условие и использовать нужно только в циклах, например: в "while" или в блоках условий. Здесь:

Здесь:\
0@ - хендл объекта\
2413.5225 -1659.0372 13.3828 - координаты, куда должен переместится объект\
0.5 1.0 1.0 - скорость перемещения: 1-й параметр - по оси X, 2-ой - по оси Y, 3-й - по оси Z. Если поставить все значения в 0.0, то никакого перемещения не будет, так как итерация равна нулю. Тоесть, если к координатам прибавить эти нули, то координаты не поменяют свои значения\
0 - флаг. Если 0, то объект будет перемещаться до тех пор, пока не будет в заданной точке. Если поставить 1, то перемещение может прекратится ещё до заданных координат. Чем это объянить я не знаю, поэтому используем 0

Давайте напишем пример с перемещением объекта:

```
{$CLEO}
0000:

var
0@: object
end

:NAME
thread 'NAME'
wait 0
0@.Create(1248, 2505.4763, -1677.182, 13.3773)
wait 3000

while 834E: not move_object 0@ to 2413.5225 -1659.0372 13.3828 speed 0.25 0.25 0.0 flag 0 
wait 0
end 

0A93: end_custom_thread
```

Аналогично перемещаются и эффекты. Суть в том, что мы должны прицепить эффект к объекту. Давайте допишем парочку строчек к нашему примеру:

```
{$CLEO}
0000:
 
var
0@: object
end
 
:NAME
thread 'NAME'
wait 0
0@.Create(1248, 2505.4763, -1677.182, 13.3773)
wait 3000
066E: create_particle "nitro" attached_to_object 0@ with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0 flag 1 handle_as 1@ //
064C: make_particle 1@ visible //
 
while 834E: not move_object 0@ to 2413.5225 -1659.0372 13.3828 speed 0.25 0.25 0.0 flag 0 
wait 0
end 
 
0A93: end_custom_thread
```

Таким образом, при перемещении объекта будет перемещаться и эффект. Так как эффекта почти не видно из за объекта, нужно как то замаскировать его :) Не вопрос! Есть опкод, который делает невидимым объект:

```
0750: set_object 0@ visibility 0
```

Здесь:\
0@ - хендл объекта\
0 - установить видимость. Если 0 - невидимый, 1 - видимый

А так же сделаем немного медленнее перемещение, что бы эффект был заметнее:

```
{$CLEO}
0000:
 
var
0@: object
end
 
:NAME
thread 'NAME'
wait 0
0@.Create(1248, 2505.4763, -1677.182, 13.3773)
wait 3000 
066E: create_particle "nitro" attached_to_object 0@ with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0 flag 1 handle_as 1@ 
064C: make_particle 1@ visible 
0750: set_object 0@ visibility 0 //
 
while 834E: not move_object 0@ to 2413.5225 -1659.0372 13.3828 speed 0.15 0.15 0.0 flag 0 
wait 0
end 
 
0A93: end_custom_thread
```

Обратите внимание на то, что делать невидимым объект нужно после того, как создали и запустили эффект. В противном случаи эффект может скрыться вместе с объектом :)

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

Используя эти возможности вы можете как-то усовершенствовать эти знания, добавив, например, вращение объекта по осям. Ваше задание - проверить как будет лететь эффект, если задавать в цикле меняющийся угол поворота поворота объекта. Для достижения нужного результата установите в опкоде "066E" оффсет "0.0 1.0 0.0". Результат вас удивит.

P. S. Можно делать невидимыми не только объекты, но и транспорт и даже актёров!

* 0338: set\_car $CAR visibility 0&#x20;
* 0337: set\_actor $ACTOR visibility 0

Эффект действует на всех актёров, кроме СЖ.|1791|1|0|53422508`jpg`500`300`400\`240\`\`||dvizhenija\_obektov\_i\_ehffektov|1500712228


---

# 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/00086.-dvizheniya-obektov-i-effektov.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.
