Команда DROP
Присказка
С помощью команды Drop можно создавать разные эффекты, связанные с дымом, огнём, водой и др. Она создаёт некую огненную или дымовую частицу, которая потом улетает, или падает, или ещё что в зависимости от заданных параметров.
Формат
Drop
[
- ShapeName,
- AnimationName,
- Type,
- TimerPeriod,
- LifeTime,
- Position,
- MoveVelocity,
- RotationVelocity,
- Weight,
- Volume,
- Rubbing,
- Size,
- Color,
- AnimationPhase,
- RandomDirectionPeriod,
- RandomDirectionIntensity,
- OnTimer,
- BeforeDestroy,
- Object
]
Описание
:
Глобальные параметры:
- 1) ShapeName - Название модели, определяющей частицу (путь к *.p3d файлу). Есть, например, "cl_fire", "cl_basic", "cl_water". Последнюю можно использовать для создания воды (скажем, водопада), первую - для создания огня. Ещё есть "kouleSvetlo" для создания эффектов света, фонарей, осветительных/сигнальных ракет. (Модели можно посмотреть в папке DTA, файл Data3D.pbo).
- 2) AnimationName - Название анимации частицы.
- 3) Type Тип частицы ("Billboard" - плоский или "SpaceObject" - объёмный). Плоский тип - тип для частиц, одинаковых со всех сторон (например, огонь, вода). А объёмный - это для танков, вертолётов и т.п.
- 4) TimerPeriod - Период таймера частицы, с. Каждые несколько секунд, указанных в этом параметре, запускается скрипт, указанный в параметре OnTimer. Например, если указать TimerPeriod = 2, а OnTimer = "script.sqs", то скрипт "script.sqs" будет запускаться каждые 2 секунды.
- 5) LifeTime - Время жизни частицы, с. Время в течение которой частица витает в воздухе, при завершении которого она исчезает (растворяется).
Физические параметры:
- 6) Position - Координаты [x, y, z]. Координаты, откуда стартует частица. Это могут быть просто координаты точки (x,y,z) или, если указать в 19-ом параметре объект, то в этом
параметре будут указаны координаты относительно этого объекта (также как при команде camSetRelPos для камер, например).
- 7) MoveVelocity - Вектор [x, y, z] (относительно объекта) направления частицы.
Направление и скорость движения частицы. Например, [0,10,10] направит частицу вперёд и вверх со скоростью 10 м/с, или [0,100,0] прямо вперёд по горизонтали с большой скоростью 100 м/с. (Когда будете экспериментировать,
не забывайте про другие параметры, способные изменить направление, например rubbing или weight).
Кстати, про координаты относительно объекта. Допустим, есть солдат. Относительно его ось x направлена от лица вперёд, ось y направлена вправо, z - вверх. Так, например, [0,100,0] отправит частицу от лица солдата
не на север, а вперёд, как если бы он эту частицу выплюнул. Или [0,-100,5] отправит частицу из затылка назад и вверх.
- 8) RotationVelocity - Частота вращения частицы, в Гц.
- 9) Weight - Масса частицы (в кг).
- 10) Volume - Объём частицы (в кубических метрах).
Если вы знаете физику, то вам известно, что вес и объём связаны формулой плотность=масса/объём. Если плотность частицы будет равна плотности
воздуха, то она зависнет в воздухе. В OFP плотность воздуха равна 1.275 кг/(м в кубе), тогда если объём равен 1, то, если массу указать 1.275,
частица зависнет в воздухе. Плотность прямо пропорциональна массе, поэтому если указать массу > 1.275, то частица начнёт падать (плотность частицы
больше плотности воздуха), в обратном случае - взлетать.
- 11) Rubbing - Взаимодействие окружающей среды и частицы. 0 - нет взаимодействия. Например, зависимость частицы от направления ветра. Дунет ветер и понесёт по своему направлению частицу с силой, пропорциональной этому параметру. И не удивляйтесь потом, почему MoveVelocity кривит.
Render-параметры:
Обратите внимание, что все эти параметры установлены как массивы, чтобы показать их развитие. Т.е., если вы устанавливаете размер [1,2], тогда вначале жизни размер частицы будет 1 и в конце жизни её размер увеличится до 2.
- 12) Size - Размер частицы (м).
- 13) Color - Цвет частицы (RGBA).
"RGB" - это палитра цветов RGB, а "A" - это альфа-свойство, т.е. уровень прозрачности. 0 - полностью прозрачен, 1 - непрозрачен.
Например, в фотошопе RGB [255,0,0] означает ярко-красный цвет (можете проверить в фотошопе, палитра color (Window=>Color), покрутите ползунки).
В команде drop это же будет выглядеть так: [1,0,0,1]. 1 означает макимальную насыщенность данного цвета. Все значения от 0 до 1.
- 14) AnimationPhase - Фаза анимации. 0 - начало анимации, 1 - конец. Если написать [0,1] то частица будет анимировать (т.е. клубиться как дымок).
Параметры случайных чисел:
- 15) RandomDirectionPeriod - Период изменения вектора скорости, с.
- 16) RandomDirectionIntensity- Величина случайного изменения.
Например, параметры RandomDirectionPeriod = 1 и RandomDirectionIntensity = 2 будут каждую секунду изменять скорость и направление частицы на 2 м/с.
- 17) OnTimer - Имя запускаемого скрипта (см. параметр TimerPeriod). При этом коордиаты частицы будут передаваться в скрипт через переменную
_this. Т.е. в запускаемом скрипте переменная _this будет массивом, содержащим координаты частицы во время вызова этого скрипта. Например, Hint Format
["%1, %2, %3", (_this select 0), (_this select 1), (_this select 2)] в запускемом скрипте выведет подсказку с координатами частицы.
- 18) BeforeDestroy - Имя скрипта, вызываемого сразу после уничтожения частицы (в конце жизни). Здесь точно как в параметре OnTimer координаты места смерти частицы будут передаваться в скрипт через переменную _this.
- 19) Object - Объект, связанный с частицей (пишите без кавычек), см. параметр Position.
Примерчики
Эту команду используют кондоры или вити-4000/5000/6000... в их скриптах "ядрёный взрыв" или "бочки" (помните такие?). На самом деле ничего здесь сложного нет.
Вот пример. Допустим, нам нужен синий костёр. Ставим костёр, обзываем его, скажем "koster". В ините пишем [] exec "drop.sqs".
И создаём файл "drop.sqs". В нём и пишем:
~2
drop ["cl_basic", "", "Billboard", 1, 0.5, getpos koster, [0, 0, (random 10)+2], 1, 1, 1, 2, [0.5,2], [[0,0,1,1]], [0,1], 1, 1, "", "", ""]
Итак,
1 - cl_basic,
2 - пропускаем, ставим "",
3 - пишем "Billboard",
4 - ставим 1,
5 - время жизни, нам хватит 0.5 секунд,
6 - ставим координаты костра (и верно, из него же дымить должно),
7 - направление частиц, здесь мы ставим x=0, y=0, высоту ставим (random 10)+2 (+2 - чтоб снизу не толстело); если бы ветер не дул (rubbing=0), то был бы вертикальный столб с переменной высотой.
8 - частоту ставим 1 Гц,
9 - ставим 1 (меньше 1.275, см. параметр volume). Дым должен улетать в небо,
10 - ну объём ставим 1,
11 - зависимость от окр. среды, т.е. от ветра, для костра это конечно надо, поэтому ставим 2,
12 - размер; у нас написано [0.5,2]; это значит, что у самого низа размер будет 0.5, а вверху уже растолстеет до 2, как и подобает дыму от костра; можно написать и так [0.5, 2, 0.5] тогда получится что-то типа клизмочки и т.д.,
13 - цвет [[0,0,1,1]] - синий; думаю я вам толком объяснил про цвета в команде drop; здесь тоже как с размером можно писать и так: [ [0,0,1,1], [1,0,0,1] ], тогда в начале жизни частица будет синей, а к концу плавно перейдёт в красный цвет, это можно применять для создания огня, снизу оранжевый, а к верху черный (в смысле дым),
14 - давайте поставим [0,1],
15, 16 - поставим по 1. Скрипты нам вызывать не надо, поэтому 17, 18 - "". Объект тоже не нужен - "".
Короче, через 2 сек. после запуска вылетит из костра наша синяя частица. Вроде всё. Ан нет, не всё. Нам же костёр нужен, а не дымок одиночный.
Поэтому засунем всё это в цикл:
#loop
drop ["cl_basic", "", "Billboard", 1, 0.5, getpos koster, [0, 0, (random 10)+2], 1, 1, 1, 2, [0.5,2], [[0,0,1,1]], [0,1], 1, 1, "", "", ""]
~0.01
goto "loop"
И тогда у нас костёр задымится синим дымом.
Или вот ещё:
_Target=_this select 0
@(getDammage _Target != 0)
_bumba="Heat73" camCreate getpos _Target
_i=6
#loop
?(_i < 0.1): goto "next"
? ((getpos _Target select 2) < 1): _i=_i-0.03
drop ["cl_fire", "", "Billboard", 1, 0.7, getpos _Target, [sin(random 360)*2,cos(random 360)*2,random _i/2], 1, 1, 3, 2, [_i/5,_i], [[1,1,1,1], [0.5,0.5,0.5,1], [0.1,0.1,0.1,1]], [1,1,1], 0.5, 0.5, "", "", ""]
~0.00001
goto "loop"
#next
exit
Бочку ставите, в ините пишите [this] exec "bochka.sqs". Ну и файл bochka.sqs с этим скритом делаем, запускаем и стреляем по бочке.
Вот так, используя эту команду, можно делать и костры, и горящую технику, и бочки угорелые, ну и ядерные взрывы конечно. Так что поэкспериментируйте побольше с этой командой. Всё вроде.