Sidebar

Переключаемый(аварийный) свет

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=http://cs-mapping.com.ua/forum/forumdisplay.php?f=12]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

Chakki Skrip

Active member
13.09.2014
514
24
83
28
next21.ru
Переключаемый(аварийный) свет

Для реализации переключаемого света нам понадобится:
• Light_surface (2 шт.)
• Trigger_changetarget (2 шт.)
• Env_render (2 шт.)
• Multi_manager(3 шт)
• Trigger_auto(1 шт.)
• Func_door (1 шт.)
• Func_rot_button (1 шт.)
• Func_wall(1 шт.)
• Func_detail(1 шт.)​

Примечание: В этом методе, для реализации аварийного освещения, используется брашевая энтить, в которую входят аварийные источники света. При включении аварийного освещения, к показателям wpoly прибавятся полигоны ламп аварийного освещения.

Принцип работы: Создаем 2 источника света, в виде двух light_surface, один для основного, второй для аварийного. Дублируя браши с текстурой основного света, превращаем его в энтить. В начале игры лампы аварийного света необходимо скрыть, иначе они будут отображаться негорящими поверх основного света. Для этого используем trigger_auto. Для переключения режима света используем рычаг(func_rot_button), который будет включать переключать основной и аварийный свет между собой. Для исправления одного бага, используем func_door.

1. Подготовка освещения к логике.
1) В моем случае, текстура основного света имеет имя light01_pl, а аварийного light01_sl. Что означает Primary Lighting и Secondary Lighting.
Предполагается, что основной свет уже расставлен на карте. Если же нет, то это необходимо это проделать.
После расстановки основного источника света, необходимо перевести все браши с текстурой основного света в func_detail:
Параметры:
Func_detailЗначение
Detail Level2
Passableyes

[thead]

[/thead]
[tbody]

[/tbody]

Примечание к func_detail: Если лампы соприкасаются с другим func_detail, то необходимо помнить, чтобы Detail Level у лампочек был всегда выше, чем на другом func_detail.
2) Следующим шагом будет дублирование брашей основного света. После дублирования основного света, скрываем неиспользуемые объекты, выделив дублированный объект и нажав сочетание клавиш Ctrl+H. Теперь, нам необходимо заменить текстуры основного света на всех лампах на аварийный. Проделать подобную операцию можно в Texture Application Mode(Shift+A). Откроется окно, выбираем Replace…, будет 2 поля. Find: текстура Red; Replace: текстура, на которую необходимо заменить. В моем случае выйдет вот так: Find: light01_pl Replace: light01_sl. Такую же операцию проводим и для боковых граней брашей аварийного освещения, избавляемся от ненужных полигонов. В поле Find вводим имя боковых граней текстуры лампы, в поле Replace текстура по имени noclip. В итоге, должна быть только текстура аварийного освещения.
Продублированный основной свет превращаем в func_wall, добавив только имя:
Параметры:
Func_wallЗначение
NameSecondaryLight

[thead]

[/thead]
[tbody]

[/tbody]

3) Размещение двух light_surface.
Параметры основного света:
Light_surfaceЗначение //
Texture Namelight01_plИмя текстуры
Texture Brightness225Яркость текстуры
Color200 220 255Цвет R G B
Adjust Emit Scale70Умножение света. Желательно устанавливать в районе от 10 до 100. Зависит от помещения, размера лампы.
NamePrimaryLightИмя для взаимодействия.

[thead]

[/thead]
[tbody]

[/tbody]

Остальные параметры и флаги для основного света не трогаем.

Параметры аварийного света:
Light_surfaceЗначение //
Texture Namelight01_slИмя текстуры
Texture Brightness100Яркость текстуры
Color255 250 208Цвет R G B
Adjust Emit Scale40Умножение света. Желательно устанавливать в районе от 10 до 100. Зависит от помещения, размера лампы.
NameSecondaryLightИмя для взаимодействия.
Filter Entity NameSecondaryLightПоиск для освещения именно аварийных источников.

[thead]

[/thead]
[tbody]

[/tbody]
Флаги:
Flags
Initially DarkВыключен в начале.

[thead]

[/thead]
[tbody]

[/tbody]

4) Следующий шаг, создать кнопку, а в моем случае рычаг, который будет переключать основной свет и аварийный.
Параметры:
Func_rot_buttonЗначение
Namecontrol_lighting
Targetlight01

[thead]

[/thead]
[tbody]

[/tbody]
Флаги:
Flags
Not SolidДелает рычаг не материальным
ToggleРычаг не будет возвращаться сам в исходное положение, пока его не активируют.

[thead]

[/thead]
[tbody]

[/tbody]


2. Логика.
1) Уберем из видимости аварийный свет, объект func_wall с помощью энтити env_render:
Параметры для скрытия:
Env_renderЗначение
NameSecondaryLight_off
TargetSecondaryLight
Render ModeTexture
FX Amount0

[thead]

[/thead]
[tbody]

[/tbody]

Параметры для отображения:
Env_renderЗначение
NameSecondaryLight_on
TargetSecondaryLight
Render ModeNormal
FX Amount255

[thead]

[/thead]
[tbody]

[/tbody]

Примечание: Если вы планируете использовать детальные текстуры на источники света, то необходимо помнить, что детальная текстура накладывается на брашевую энтить только тогда, когда Render mode: Normal. Будь там любой другой режим, детальная текстура на эту поверхность, принадлежащую этой брашевой энтити, накладываться не будет!

2) Создадим 2 multi_manager’а для переключения основного света на аварийный и наоборот:
Примечание: Для добавления новых параметров необходимо отжать кнопку SmartEdit
Параметры 1-го mm:
Multi_managerЗначение //
targetnamelight01Имя multi_manager’а
PrimaryLight0.0Выключение основного света
SecondaryLight0.5Включение аварийного света
SecondaryLight_on0.5Делает видимым func_wall.
light01_off0.5Переключение target у рычага с light01, на light02

[thead]

[/thead]
[tbody]

[/tbody]

Параметры 2-го mm:
Multi_managerЗначение //
targetnamelight02Имя multi_manager’а
SecondaryLight0.0Выключение аварийного света
SecondaryLight_off0.0Скрытие ламп func_wall
PrimaryLight0.5Включение основного света
light02_off0.5Переключение target у рычага с light02, на light01

[thead]

[/thead]
[tbody]

[/tbody]

3) В multi_manager’ах мы указали изменение параметра target у рычага. Необходимо использовать 2 энтити trigger_changetarget:
Параметры 1-го trigger_changetarget:
trigger_changetargetЗначение//
Namelight01_offИмя для вызова
Targetcontrol_lightingИмя рычага, у которого будет менять target
New Targetlight02Новый target у рычага.

[thead]

[/thead]
[tbody]

[/tbody]

Параметры 2-го trigger_changetarget:
trigger_changetargetЗначение//
Namelight02_offИмя для вызова
Targetcontrol_lightingИмя рычага, у которого будет менять target
New Targetlight01Новый target у рычага.

[thead]

[/thead]
[tbody]

[/tbody]

3. Заключительный этап.
1) Размещаем trigger_auto для того, чтобы скрыть неактивные лампы в первом раунде:
Параметры:
Trigger_autoЗначение
TargetSecondaryLight_off

[thead]

[/thead]
[tbody]

[/tbody]

2) Устраняем баг, если раунд закончился при включенном аварийном освещение. В новом раунде лампы аварийного света будут включены, и target у рычага остается с прошлого раунда. Исправлять такое поведение мы будем с помощью волшебного func_door:
Параметры:
Func_doorЗначение
Targetlighting_fix_mm
Delay before close-1

[thead]

[/thead]
[tbody]

[/tbody]
Флаги:
Flags
Starts OpenАктивировать в начале раунда.
PassableУбрать коллизию.

[thead]

[/thead]
[tbody]

[/tbody]

Создаем multi_manager:
Параметры:
Multi_managerЗначение//
targetnamelighting_fix_mmИмя multi_manager’а
SecondaryLight_off0.0Скрывает лампы func_wall.
light02_off0.0Переключение target у рычага.

[thead]

[/thead]
[tbody]

[/tbody]

В итоге:
 

Вложения

Последнее редактирование:
  • Like
Reactions: Mr.Jeff and xDShot

Half-Life: Alyx release

000
Дней
00
часа(ов)
00
minutes
00
Секунды
До выхода Half-Life: Alyx
Half-Life: Alyx вышел!

Донат - Хостинг

Итого
125.00 $
Цель
600.00 $

Доноры Красавчики

Пользователи онлайн