Создание крутящейся лампочки ReflectorLights
Создать лампочку очень просто, поэтому немного усложним задачу и сделаем так, чтобы она крутилась вокруг своей оси (типа маяка). Такую лампу можно повесить на стену в каком -нибудь подземелье, будет выглядеть эффектно.
Для того чтобы она билась, и вокруг нее вращался отражатель — нужно сделать 2 селекшена light_1_hide и light_1_rotate
В ЛОДе «memory» создаем 4 точки.
light_axis — 2 точки — ось вращения отражателя
light_1_pos и light_1_dir — позиция и направление луча света. Так же выделяем их и называем точно так же, как назван отражатель в нулевом ЛОДе (light_1_rotate)
Затем создаем ЛОД Hit-points и ставим точку в центре самой лампочки, и называем что то вроде light_1_hit
При попадании пули в область этой точки — лампочке будет засчитываться повреждение.
Теперь чтобы при выстреле в лампочку раздавался звук бьющегося стекла — нужно создать ЛОД Fire Geometry (или просто Geometry — роли большой не играет)
Ставим небольшой бокс в область лампочки, выделяем его и нажимаем английскую «E». В material выбираем материал стекла, который лежит примерно «A3\data_f\penetration\glass.rvmat»
ВАЖНО! Для Fire Geometry действуют такие же правила как для Geometry (кроме веса) — нужно чтобы каждый компонент состоял из примитивов (боксов) и каждый компонент назывался какComponent01, Component02… Для этого выполняем Structure -> Topology -> Find Components.
С моделью все, можно сохранять. Переходим к конфигу.
Создаем текстовик и называем Config.cpp
Вот пример конфига:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
class CfgPatches { class NAME_OF_YOUR_PBO { units[] = {}; weapons[] = {}; requiredAddons[] = {"A3_Structures_F_Civ_Lamps"}; requiredVersion = 0.1; }; }; class CfgVehicleClasses { class MY_LAMPS { displayName = "My lamps"; //имя вашего класса, отображаемое в редакторе }; }; class CfgVehicles { class Lamps_base_F; class MY_LAMPS_base : Lamps_base_F//создаем свой базовый класс наших объектов. Здесь можно задать множество параметров, если их нет, они берутся из родительского класса (class Lamps_base_F) { model = ""; vehicleClass = "MY_LAMPS"; armor = 0.5; //количество брони объекта. Слишком высокое значение сделает невозможным разбить лампочку. }; class MY_LAMP1 : MY_LAMPS_base { scope = 2; scopeCurator = 2; displayName = "MY Lamp Rotation"; model = "\my_objects\lights\my_lamp_rotation.p3d"; //указываем путь до нашей модели class Hitpoints {}; class AnimationSources {}; /*Сюда вставляем конфиг лампочки*/ }; }; |
Ссылка на конфиг и описание параметров света
Этого хватит чтобы лампочка горела, но чтобы крутился отражатель, и она пропадала после попадания, надо сделать следующее:
Создаем текстовик с именем «model.cfg» и записываем в него следующий код:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
class CfgSkeletons { class Default { isDiscrete = 1; skeletonInherit = ""; skeletonBones[] = {}; }; class MY_LAMP_skeleton : Default { SkeletonBones[]= { "light_1_rotate","" //обозначаем движущие части модели }; }; }; class CfgModels { class Default { sectionsInherit=""; sections[] = {}; skeletonName = ""; }; class MY_LAMP1 : Default //имя класса нашей лампочки. должен быть такой же как в config.cpp { skeletonName="MY_LAMP_skeleton "; sections[]= { "Light_1_hide","" //тот самый селекшн, который исчезает при попадании в лампочку. }; class Animations { class light_1_rotation { type="rotation"; angle0=0; angle1=6.2 axis="light_axis"; memory=0; minValue=0; maxValue=1; minPhase=0; maxPhase=1; source="time"; sourceAddress="loop"; selection="light_1_rotate"; }; }; }; }; |
Готово. Наш объект появится в редакторе, ставим, проверяем.
Приветствую! Спасибо за внятное объяснение принципа, но у меня не получается в итоге сделать вращение простой фигуры вокруг заданной оси. Нельзя ли получить от вас пример работающего образца в исходниках для изучения? 🙂 Просто не могу понять, в какой момент я делаю неправильно. Как анимация должна срабатывать? По исполняющей команде, триггеру, через init файл? Или достаточно просто поместить ее в на карту?
вся анимация указана в model.cfg — который при забинаривании «вшивается» в саму .p3d модель. Никаких триггеров, команд — лампочка должна крутиться всегда и постоянно. Возможно не работает, из за того, что БИСы в новых патчах что-нибудь опять понаизменяли, и поломали старую рабочюю систему)) Я такую лампочку еще под 54 (вроде) патч делал. Будет время — проверю на последней версии Армы.
А в бульдозере лампочка вообще крутится? При прокручивании колесиком мыши она должна вращаться. Если не вращается — значит ошибка в model.cfg
И я немного не правильно написал — в строке «class MY_LAMP1 : Default» — MY_LAMP1 — должно быть названием .p3d файла
Спасибо еще раз, во всем разобрался, все крутится, светит, красота =)
Обращайтесь)
Скажите, а где брать эту папку «А3»? У меня её нет и я так понял без неё ничего создать не получиться.
Папка A3 является корневой папкой проекта Армы 3, т.е. она виртуальная.
Когда ты создаешь свой мод, ты создаешь папку с названием своего будущего проекта на диске P:\ (виртуальный диск, рабочая среда так сказать), далее в папке проекта создаются подпапки, что в итоге станут .ПБОшками
Oskar, а нет такого урока по установке этого проекта? Диск P:\ у меня появился, но он пустой, ни одной папке в нем нет. Не могу понять, как правильно его установить.
Oskar, братик, ты писал что «вся анимация указана в model.cfg — который при забинаривании «вшивается» в саму .p3d модель.» Так вот вопрос- как забинарить модель??? Перерыл пол интернета- никакой инфы не нашел.
Сама утилита бинаризации входит в набор инстурментов от БИСов + Addon Builder — утилита для создания ПБО и бинаризации
Вот тут есть небольшое описания программ для создания ПБО
http://armatools.info/category/pbo/