Рубильники (Switch) и кнопки (Button) – специальные объекты, которые используются во многих случаях создания эффектов. Они порождают сигналы ControlDevice.
Кнопки порождают однотипный сигнал ControlDevice, полезный для активирования ‘односторонних’ эффектов, таких как сигнализация, или DestroyTraps (Ловушка-Уничтожение).
Рубильники используют двусторонние сигналы ControlDevice (вкл/выкл), которые полезны для вещей, которые могут быть включены И отключены. Например, двери или свет.
ControlDevice – это сложная тема, но я попытаюсь рассказать вам все, что смогу об этом.
Я знаю следующие скрипты, порождающие сигналы ControlDevice
StdLever | Вкл/Выкл – Двустороннее действие (по умолчанию для рубильников) |
StdButton | Вкл - Одностороннее Действие (по умолчанию для кнопок) |
TrigSlain | Вызывает одностороннее действие, когда кого-то убили. |
TrigUnlock | Вызывает вкл/выкл, основанное на состоянии замка (открыт/закрыт) |
TrigDoorOpen | Вызывает вкл/выкл, когда дверь открыта/закрыта |
TrigRoomPlayer | Срабатывает, когда игрок входит в комнату |
TrigRoomCreature | Срабатывает, когда кто-то входит в комнату |
Также вы можете использовать реакции тревоги (alert responses) и разговоров (сonversations), чтобы заставить сработать ControlDevice, но это будет обсуждаться позже! И помните, вкл/выкл ControlDevice также может, в теории, обрабатывать односторонние объекты. Например, рычаг может вызвать DestroyTrap (Уничтожение объекта) при первом использовании, а дальше будет бесполезен.
Совет: если вам нужно фроббировать (использовать) объект дважды, прежде чем он сработает, попробуйте связать рычаг с инвертером (inverter), а инвертер – с целевым (конечным) объектом(ами). Инвертер меняет смысл связи в обратную сторону.
(Jerk: Предлагаю более легкий и интересный вариант. Выберите рычаг, зайдите в его свойства, выберите Tweq->JointsState, нажмите “Edit”, и измените AnimS с “[None]” на “Reverse”. Теперь для того, чтобы дверь, связанная с рубильником, открылась, вам нужно дважды дернуть за рубильник.)
Помните, если вы используете рычаг для того, чтобы открыть/закрыть дверь, и при этом хотите, чтобы игрок не мог открыть ее обычным способом, сделайте следующее: в свойствах двери добавьте FrobInfo, в котором в пункте WorldAction выберите “Script, Ignore”. Теперь в игре дверь можно будет открыть только при помощи рычага.
Также помните, что состояние рычага может быть изменено при помощи связанного с ним ControlDevice. Например, если вы хотите, чтобы один рычаг был в том же положении, что и другой, свяжите их между собой (один управляет вторым, а второй – первым), любой из них свяжите с управляемым объектом. Можете использовать несколько рычагов, если хотите!
Вы можете обратить рычаг так, чтобы он во включенном состоянии посылал ‘выключено’ по умолчанию. Для этого откройте свойства рычага, выберите Tweq->JointsState, нажмите “Edit”, и измените AnimS с “[None]” на “On”.
Jerk: Поскольку автор полностью опустил практическую часть, то придется писать самому…
Начнем с самого простого – свяжем рубильник с дверью. Рубильники находятся в Gizmo->Switches->Levers. Допустим, Up/Down Switch. Связываем его с дверью. Добавляем связь: Flavor: ControlDevice; From: НомерРубильника; To: НомерДвери. Запускаем DromEd и убеждаемся, что дверь открывается и закрывается.
О том, как сделать, чтобы дверь нельзя было непосредственно открыть, а использовать для этого рычаг, инвертировать рычаг (чтобы дверь была по умолчанию открыта) – читай выше.
Займемся наиболее сложной темой – скриптами. StdLever и StdButton я пропускаю по тем причинам, что это наиболее известные скрипты, и применять их надо по принципу и подобию – рассмотрите любую кнопку/рычаг.