Глава VII. Разное.

Полезные приёмы: триггеры, CLIP и ORIGIN браши, размещение моделей и цепочки активации объектов.

7.1

Применение триггеров

В этой статье мы расскажем о применении такой группы энтити-объектов как триггеры (от англ. "trigger" — инициировать, дать начало). Дополнительную информацию о свойствах данных объектов Вы можете получить из раздела "Энтити".
Триггеры объединены в группу энтитей из 11 объектов. Названия триггеров начинаются со слова trigger_. Вот эти объекты:
  1. trigger_auto
  2. trigger_camera
  3. trigger_changetarget
  4. trigger_counter
  5. trigger_gravity
  6. trigger_hurt
  7. trigger_multiple
  8. trigger_once
  9. trigger_push
  10. trigger_relay
  11. trigger_teleport
1. Trigger_auto.
Данный триггер открывает группу триггеров. Этот триггер является точечным объектом. Размещать его можно в любом месте карты. Предназначен он для автоматической активации какого-нибудь объекта при загрузке карты, т.е. как-только карта загрузилась, этот триггер срабатывает и активирует объект, указанный в поле "Target". Вы можете разместить несколько trigger_auto, если это необходимо.
Пример использования: активация посредством trigger_auto объекта game_text, который выводит на экран присоединившегося игрока информацию об авторе карты.
Более подробная информация об этом объекте: "Энтити: trigger_auto".
2. Trigger_camera.
Этот триггер также является точечным объектом. По сути, вставив такой объект на карту, Вы получаете камеру, которая будет "смотреть" в указанном направлении. Для того, чтобы игрок смог увидеть, что показывает камера, необходимо создать кнопку (func_button) и в ее параметр "Target" вписать имя камеры. Подобным образом созданы камеры на картах cs_assault, cs_militia и многих других.
Если кнопку не делать, то изображение с данной камеры будет показано при присоединении игрока к серверу. Если камер несколько, то изображения с них будут показываться по очереди в течении некоторого времени. Например, после присоединения к серверу с de_dust, Вы попеременно видите изображения с камер (т.е. объектов trigger_camera), расположенных в разных местах карты.
Существует возможность создавать двигающиеся камеры или камеры, следящие за подвижной мишенью. Подробнее об этом Вы можете прочитать в статьях из раздела "Камеры".
Более подробная информация об этом объекте: "Энтити: trigger_camera".
3. Trigger_changetarget.
Это еще один точечный триггер, месторасположение которого, не влияет на его работу (т.е. размещать этот триггер можно в любом месте карты). У этого триггера специфическое действие, которое визуально никак не проявляется. Как Вы уже знаете, у многих объектов есть параметр "Target". Так вот, данный триггер позволяет менять этот параметр любому объекту прямо во время игры.
Для того, чтобы поменялся параметр "Target" у какого-нибудь объекта, необходимо активировать данный триггер. Это можно сделать любым доступным способом. Самый простое — при помощи кнопки (func_button).
Более подробная информация об этом объекте: "Энтити: trigger_changetarget".
4. Trigger_counter.
Данный триггер относится к классу брашевых объектов, т.е. действие этого триггера распространяется на пространство, ограниченное его собственными размерами. Закрашивать trigger_counter следует также как и любой другой брашевый триггер специальной текстурой AAATrigger со всех сторон.
Данный триггер запоминает сколько раз он был активирован (сколько раз через него прошли игроки) и при определенном установленном в его свойствах значении активирует указанный в поле "Target" объект.
На рисунке ниже показано, как обычно размещают брашевые триггеры, которые активируют какие-либо объекты. А размещают их так, чтобы какой-нибудь игрок обязательно прошел через них. Тогда триггер активируется и в свою очередь активирует объект, указанный в поле "Target". Например, раздается звук.
Более подробная информация об этом объекте: "Энтити: trigger_counter".
5. Trigger_gravity.
Этот триггер так же, как и предыдущий, относится к классу брашевых. Закрашивать его следует текстурой AAATrigger, которая специально предназначена для триггеров (отсюда и название).
При помощи данного триггера можно изменить гравитацию на карте. Но следует помнить, что гравитация меняется не для всех игроков, а только для игрока, прошедшего через триггер! Все остальные игроки не почуствуют каких-либо изменений. Чтобы вернуть обычную гравитацию необходимо создать еще один trigger_gravity, устанавливающий нормальное значение (800). Также помните, что уровень гравитации не сбрасывается в начале раунда, т.е. если игрок включил пониженную гравитацию, то и в следующем раунде он будет "летать".
Более подробная информация об этом объекте: "Энтити: trigger_gravity".
6. Trigger_hurt.
Еще один брашевый триггер, который следует закрашивать текстурой AAATrigger. При помощи этого триггера можно наносить повреждения игрокам. Разместите данный триггер в каком-нибудь месте карты, выставьте уровень и тип повреждений (имеется с десяток различных типов, но разница заключается лишь в выводимомой на экран иконке повреждений: огонь, яд, электрошок и т.д.) и тогда, пройдя через этот триггер, игрок потеряет часть здоровья.
Применять этот триггер можно вместе с огнем, электропроводами, трансформаторами, да и много еще с чем. Просто нужно создать вокруг "зоны поражения" данный объект. Как вариант, данный триггер можно использовать за пределами карты, если у Вас есть такие места (где игрок может провалиться). Примеры: de_prodigy и de_vertigo (небоскреб). На этих картах игроки могут упасть за ее пределы, и, чтобы они там не бегали, установлены триггеры trigger_hurt с достаточно большим уровнем повреждений, чтобы убить игрока "наверняка" :)
В нашем Учебнике так же есть пример использования trigger_hurt в статье про создание огня.
Более подробная информация об этом объекте: "Энтити: trigger_hurt".
7. Trigger_multiple и trigger_once.
Данные два брашевых триггера являются чемпионами по применению на картах. Они выполняют очень простую, но в то же время очень полезную функцию — они просто активируют объект, указанный в параметре "Target" (чаще всего это звуки или объект multi_manager). Трудно найти карту, на которой не было бы trigger_multiple.
Различие между объектами заключается в количестве активаций: trigger_multiple может активировать объект бесконечно, а trigger_once только 1 раз. Как и все остальные брашевые триггеры trigger_multiple и trigger_once следует со всех сторон закрашивать специальной текстурой AAATrigger.
Более подробная информация об этих объектах: "Энтити: trigger_multiple", "Энтити: trigger_once".
8. Trigger_push.
При помощи этого брашевого триггера можно создать невидимую область, при вхождении в которую, игрок будет выталкиваться в определенную сторону. Например, можно разместить данный триггер в воде, чтобы создать иллюзию подводного течения или около мощного вентилятора для создания иллюзии движения потока воздуха. Данный триггер был применен при создании катапульты на небезызвестной карте de_rats3. Закрашивать trigger_push следует текстурой AAATrigger со всех сторон.
Более подробная информация об этом объекте: "Энтити: trigger_push".
9. Trigger_relay.
Данный триггер относится к классу точечных, т.е. место его положения на карте роли не играет. Данный триггер может работать в трех различных режимах: только включает объекты, только выключает объекты, активирует объект в любом случае. Например, можно создать такую цепочку из трех объектов: кнопка + триггер + лампочка. При нажатии на кнопку, активируется триггер, который работает, например, только на включение. Если свет не горит, то он загорится. Если же свет уже горит, то выключен он не будет. В общем вот такая хитрая система :) Однако иногда она бывает полезна.
Более подробная информация об этом объекте: "Энтити: trigger_relay".
10. Trigger_teleport.
Как видно из названия триггера — это телепорт. Игрок пробегает через данный триггер и оказывается в каком-то другом месте карты. Это место задается другим объектом — info_teleport_destination.
Более подробная информация об этом объекте: "Энтити: trigger_teleport".
7.2

Использование CLIP-брашей

В этой статье мы расскажем о применении CLIP-брашей, которые в основном используются для ограничения передвижений игрока.

1. Блокирование пути игрокам

В стандартной библиотеке текстур halflife.wad есть текстура под названием CLIP. Это служебная (специальная) текстура. Браш окрашенный со всех сторон данной текстурой обладает интересными свойствами: он абсолютно прозрачен в игре, через него пролетают пули и гранаты, но игрок пройти сквозь него не может. Браш необходимо окрашивать данной текстурой СО ВСЕХ сторон. Это обязательное условие. Не допускается применять текстуру CLIP для обычных объектов. Только для создания CLIP-брашей.
Итак, первое предназначение CLIP-брашей: блокирование пути игрокам. На рисунке ниже показано как необходимо размещать CLIP-браш, чтобы игрок не мог пройти сквозь проход в стене. Слева показан проход, справа — этот же проход, но "заделанный" CLIP-брашем.
Блокирование CLIP-брашем пути игроку
Толщина CLIP-браша значения не имеет (хоть 1 юнит, хоть 100 юнитов — игрок не пройдет). CLIP-браши можно размещать, например, в тех, местах, где игроки могут упасть за пределы карты. Создаете в таком месте сплошную стену из CLIP-браш(а)ей и будьте уверены — игроки не упадут.

2. Создание прозрачных простреливаемых решеток

При помощи энтити-объекта func_illusionary и наложенной на него текстуры с маской создается решетка или забор. Затем вплотную или рядом размещается CLIP-браш (см. рис. ниже). Таким образом, мы получаем прозрачную простреливаемую решетку.
Создание прозрачных простреливаемых решеток
Преимуществом такой "комбинированной" решетки перед решеткой из объекта func_wall является ее простреливаемость из любого вида оружия, а вот func_wall не простреливается из пистолетов, троек и шотганов, не смотря на прозрачность. Также в пользу решения func_illusionary + CLIP-браш говорят не остающиеся на решетке следы от пуль. Постреляйте на какой-нибудь карте по решеткам из func_wall, а потом присмотритесь — будут заметны следы от выстрелов, тем самым автор карты показывает свою неосведомленность в данном вопросе :-)

3. Предотвращение застревания игроков

Посмотрите на рисунок ниже. На нем изображена наклонная горка и стоящий около нее ящик.
Предотвращение застревания игрока
При попадании игрока между поверхностями с небольшим углом наклона друг к другу, он (игрок) может застрять. Тогда ему поможет только kill :-). В некоторых случаях игрок погибает мгновенно :) За примером ходить далеко не надо: De_Aztec, база контров (левый бомб-плейс). Если прыгнуть между большим ящиком в левом углу бомб-плейса и стенкой и "поёрзать" там, то можно отправиться к праотцам :)
Использование CLIP-браша, как показано на рисунке, предотвращает застревание игрока, т.к. в таком случае он будет сидеть на CLIP-браше.

4. Экономия Clipnode-плоскостей

Clipnodes — это такие плоскости, которые создаются вокруг всех объектов на карте. Эти плоскости не позволяют игроку проваливаться сквозь пол, ходить сквозь стены, однако не путайте clipnodes и CLIP-браши — это не одно и то же. Clipnodes создаются игровым движком, а CLIP-браши это просто возможность для маппера сделать непроходимую прозрачную стенку.
Вспомните читерскую команду noclip, после ее ввода можно "летать" сквозь стены, т.е. попросту отменяются ограничивающие плоскости clipnodes.
Посмотрите на рисунок ниже. На нем изображена бочка, сделанная из цилиндра с 24 боковыми гранями. При компиляции вокруг бочки будут создано множество clipnode-плоскостей (до нескольких сотен). Все бы ничего, если бы не ограничение на эти самые clipnode-плоскости, которые накладывает движок Half-Life. При достижении максимально допустимого количества этих плоскостей, возникнет ошибка при компиляции.
Экономия Clipnode-плоскостей
Использование CLIP-браша, как показано на рисунке, помогает, во-первых, облегчить работу компиляторам, а, во-вторых, помогает снизить количество clipnode-плоскостей.
Следует заметить, что данный метод следует применять при возникновении ошибки MAX_MAP_CLIPNODES и на очень больших картах. В остальных же случаях тратить время на подобную "оптимизацию" карты не стОит.

5. Сглаживание выступов на стенах

Этот способ применения CLIP-брашей используется для улучшения играбельности (комфортности игры). На рисунке ниже (часть 1), Вы можете видеть стенку с выступающей частью. В пылу боя, отходя задом, игрок может зацепиться за этот выступ, и его убьют. Рядом с таким уступом можно разместить CLIP-браш (часть 3, вид сбоку-сверху). Это позволит избежать данной ситуации. Игрок "проскользит" по CLIP-брашу и благополучно скроется от врагов :-)
Сглаживание выступов на стенах
Естественно, что для больших выступов этого делать не стоит, т.к. за ними (уступами) можно спрятаться, а вот с маленькими выступами такой трюк вполне можно проделать. Рекомендуем создавать CLIP-браши для уступов шириной до 8 юнитов.

6. Применение CLIP-браша при создании машины

CLIP-браш можно включать в состав машины (объектов: func_vehicle, func_train, func_tracktrain). Это может пригодиться, если нужно заблокировать передвижения игрока в какой-то части машины. Например, чтобы игрок не застрял между наклонными поверхностями. Прежде чем окончательно превратить браши, составляющие автомобиль, в func_vehicle (или другой объект из перечисленных выше), не забудьте выделить и CLIP-браш. А уж затем можете создавать энтити-объект.
Применение CLIP-браша при создании машины
Ну, и последнее, не забывайте создавать CLIP-браши в тех местах, куда игрок не должен попадать во время игры, чтобы не возникло ситуации, когда игроки воспользуются отсутствием CLIP-браша и начнут бегать за пределами карты или где-то еще, где им неположено. А вообще совет: не злоупотребляйте CLIP-брашами, игроки не очень любят, когда они видят какой-то проход, но не могут туда попасть из-за невидимой "стенки".
7.3

Использование ORIGIN-брашей

В этой статье мы расскажем Вам о применении ORIGIN-брашей, которые являются неотъемлемой частью любого вращающегося объекта. Прочитав данную статью, Вы сможете правильно создавать такие объекты как: вентиляторы, автомобили, вращающиеся рычаги, двери и пр.
Содержание:
  • Что такое ORIGIN-браш?
  • Как правильно размещать ORIGIN-браш?
  • Выбор оси вращения
  • Что нужно знать об ORIGIN-брашах (обобщение)

Итак, что же такое ORIGIN-браш?

ORIGIN-браш — это браш, окрашенный со всех сторон специальной текстурой по имени ORIGIN (стандартная текстура ORIGIN бело-зеленого цвета). Эта текстура находится в стандартной библиотеке текстур halflife.wad. Браш необходимо окрашивать данной текстурой со всех сторон. Это обязательное требование, иначе возникнет ошибка при компиляции.
ORIGIN-браш своим центром определяет положение оси вращения таких объектов как: вращающиеся двери, рычаги, различные платформы, поезда, машины, управляемые пулеметы, маятники, вентиляторы и других разновидностей вращающихся объектов. В общем ORIGIN-браши используются повсеместно, ничего сложного в них нет и просто нужно 1 раз понять принцип их действия.
Запомните следующее правило: если объект хоть как-то вращается, то он должен иметь ORIGIN-браш, т.е. ORIGIN-браш должен входить в состав этого энтити-объекта. Кстати, ORIGIN-браши применяются только для объектов группы FUNC_. Просто в других группах нет вращающихся объектов.
Если Вы хотите создать, например, вентилятор — постройте лопасти, создайте ORIGIN-браш, выделите все это вместе и превратите в данном случае в объект func_rotating. Также необходимо поступать со всеми другими вращающимися объектами (дверями, платформами, машинами и т.д.), т.е. не забывайте выделять ORIGIN-браш вместе с другими частями будущего объекта.
В игре ORIGIN-браш абсолютно невидим и не создает препятствий для передвижений игрока, его как бы и не существует.

Один вращающийся объект — один ORIGIN-браш

Для любого вращающегося объекта создается только 1 ORIGIN-браш. Также не оставляйте ORIGIN-браш без объекта, например, отдельно дверь и отдельно ORIGIN-браш — это обязательно вызовет компиляционную ошибку.

Как правильно размещать ORIGIN-браш?

Сразу оговоримся, что размер и форма ORIGIN-браша значения не имеют! Самое важное — положение его ЦЕНТРА в пространстве. Вы можете создать ORIGIN-браш в виде небольшого кубика 8х8х8 юнитов, а можете, как браш с размерами 64х4х4 — все равно, следите за положением его центра.
Помните, что ORIGIN-браш не является осью вращения! Он лишь определяет точку в пространстве, через которую проходит эта ось. По умолчанию вращающийся объект будет крутиться вокруг центра ORIGIN-браша по вертикальной оси Z. Однако в случае необходимости мы можем заставить такой объект вращаться вокруг одной из горизонтальных осей X или Y. Пример: вентилятор на стене — вращение происходит вокруг горизонтальной оси.
Когда Вы создаете ORIGIN-браш мысленно представляйте себе, где находится его центр, в какой точке. Затем этот центр помещайте в место, где проходит ось вращения (см. рис. ниже).
Размещение ORIGIN-браша при создании вращающейся двери
На рисунке выше показана обычная вращающаяся дверь func_door_rotating. ORIGIN-браш входит в состав этого объекта. На следующих картинках хорошо видно как размещен по отношению к двери центр ORIGIN-браша.
Вид сверху. Фиолетовый квадратик справа — это и есть ORIGIN-браш. Фиолетовый прямоугольник — дверь. Мысленно воткните иголку в центр ORIGIN-браша и начните вращать дверь по или против часовой стрелки. Когда дверь откроется полностью (повернется на угол 90°), она не будет задевать стенки (входить в них).
t10origin2 Если центр ORIGIN-браша разместить правее (на краю двери), то при открытии, она частично "заедет" в стенку. Это в общем-то не страшно, просто смотрится некрасиво. В реальной жизни двери в стенки не въезжают :). Поэтому размещайте ORIGIN-браш как показано на рисунке.
Ниже показан вид сбоку:
t10origin3 На рисунке ниже Вы можете видеть, что форма ORIGIN-браша, его размеры и размещение вдоль вертикальной оси вращения двери, роли не играют. Сравните форму и размещение ORIGIN-браша на картинке выше и нижней картинке — они разные, но на работоспособности двери это никак не сказывается. Дверь будет точно также открываться.
Форма и размеры ORIGIN-браша роли не играют. Важно размещение его центра

Выбор оси вращения

С размещением ORIGIN-браша мы разобрались. Теперь подробней остановимся на определении оси вращения. В каких случаях нужно выставлять оси Z, X, Y?
По умолчанию все объекты вращаются вокруг вертикальной оси Z. Эта ось всегда проходит снизу-вверх или сверху-вниз, как хотите. Таким образом, если объект (дверь, вентилятор и пр.) должен вращаться вокруг вертикальной оси Z, то ничего, кроме размещения ORIGIN-браша, делать не нужно. А вот если ось горизонтальная (X или Y), то тут придется залесть в свойства объекта и указать какую ось необходимо использовать для вращения.
Для примера возьмем уже знакомую нам дверь :) Посмотрите как соотносятся оси X и Y на виде сверху и в 3d-виде. Так уж получилось на тестовой карте, что вид сверху как бы перевернут по отношению к 3d-изображению (придется немного поломать голову, чтобы сопоставить эти два вида :).
Так расположены оси X и Y в пространстве и на виде сверху
Итак, если нам необходимо, чтобы дверь вращалась вокруг оси X (представьте, как будет выглядеть это вращение в игре — довольно смешно :) — мысленно воткните иголку в дверь по оси X ЧЕРЕЗ ЦЕНТР ORIGIN-БРАША и начните ее вращать), то для такого вращения в свойствах объекта нужно отметить флажок "X axis" (см. рис. ниже).
t10propaxis Если же "вставить иголку" вдоль оси Y в центр ORIGIN-браша, то дверь будет вращаться вообще интересным образом :), как бы по или против часовой стрелки. В этом случае (если нам необходимо такое вращение) отмечаем флажок "Y Axis". Не надо отмечать 2 флажка одновременно!
Вот так на примере обыкновенной двери мы разобрали соотношение координатных осей в пространстве. Для других вращающихся объектов принцип определения осей точно такой же. Мы советуем, ставить вид сверху и уже на нем определять ось вращения, принимая во внимание, что ось Y смотрит вверх, а ось X — вправо.
Если все же Вы захотите определять направление осей на других видах (сбоку или спереди), то картинка ниже поможет Вам лучше соориентироваться.
t4howork1

Итак, что Вам нужно знать об ORIGIN-брашах:

1. ORIGIN-браш окрашивается специальной текстурой ORIGIN со ВСЕХ сторон!
2. Каждый вращающийся объект должен иметь ORIGIN-браш
3. ORIGIN-браш является неотъемлемой частью вращающихся объектов
4. Центр ORIGIN-браша определяет точку, через которую проходит ось вращения
5. Вращение объекта не зависит от размеров ORIGIN-браша
6. Один объект - один ORIGIN-браш
7. Недопустимо наличие ORIGIN-браша без объекта
8. ORIGIN-браш в игре невидим и не создает помех игрокам
Вот, пожалуй, и вся необходимая информация об ORIGIN-брашах. Вращающиеся объекты — это просто!
7.4

Как вставить модель на карту?

В этой небольшой и простой статье мы расскажем, как на карту всталяются модели.
Прежде всего поясним, что такое модель. Модель — это объект определенной формы, имеющий свою текстуру (или даже несколько), некоторые модели имеют еще и анимацию и могут ее менять. Модели для Half-Life хранятся в файлах с расширением *.mdl. Один файл — одна модель. Модели бывают самые разные: деревья, оружие, автомобили — в общем объект с формой любой сложности.
Почему мапперы предпочитают использовать модели вместо брашей? Предположим, на своей карте, в месте закладки бомбы Вы захотели поставить какую-нибудь статую, например, такую :))
Кролик
Из обычных брашей кролик получился бы довольно неуклюжим и угловатым, если бы вообще Вы смогли бы "построить" такого кролика из брашей. К тому же с большой долей вероятности он будет неправильно откомпилирован (ошибки в поверхностях) и освещен не самым наилучшим образом (артефакты).
В этом случае самым лучшим решением будет использование модели, у которой и полигонов побольше (более плавные очертания), и не будет проблем с компиляцией.
Вставляются модели при помощи точечного энтити-объекта cycler. В нужном месте карты Вы создаете этот объект и в его свойствах в параметре "Model" указываете путь к нужной модели (файлу *.mdl). Стандартная папка для моделей в CS находится в "Cstrike\models" — туда и следует кидать свои модели.
Также модели можно вставлять при помощи объекта cycler_sprite, который вообще-то предназначен для вставки спрайтов. Но на самом деле его тоже можно использовать. Кстати, даже предпочтительней, потому что с ним модель становится невещественной (когда в нее стреляешь из нее не летят всякие черно-белые ошметки, как это происходит с моделью, вставленной через cycler). Однако, если вы будете использовать cycler_sprite, то будет необходимо "огораживать" модель задерживающими игрока CLIP-брашами, потому что модель будет проходимой насквозь.
Чтобы знать, где именно нужно создавать CLIP-браши вокруг модели, рекомендуем использовать редактор Hammer версии 3.5 beta (последняя на момент написания этой статьи). В версии 3.5 beta модели отображаются прямо в окне редактора, что очень удобно и наглядно.
Теперь небольшая хитрость о том, как вставить модель, используя cycler_sprite: когда Вы будете выбирать в параметрах этого объекта саму модель, которую хотите вставить, то Вам дадут выбрать лишь файлы *.SPR, т.е. спрайты, а нам нужны модели *.MDL. Это ограничение легко обходится. Просто введите в строке имени файла (см. рис. ниже) символы *.*, и Вам станут видны все типы файлов. Дальше Вы идете в папку с моделями "cstrike\models" и выбираете нужную модель.
Пишем символы *.* чтобы показать все типы файлов
При создании zip-архива с окончательным вариантом Вашей карты, не забудьте включить в него и все нестандартные модели. Без них карта не запустится!
7.5

Активация нескольких объектов (multi_manager)

В этой статье мы расскажем о принципе действия очень полезного объекта multi_manager, который применяется для последовательной активации нескольких объектов через заданные промежутки времени. Для создания тестовой карты мы будем использовать следующие энтити-объекты: Multi_manager является точечным энтити-объектом, поэтому место его расположения на карте роли не играет. Данный объект в игре невидим и никак не мешает игрокам передвигаться. В обычных свойствах этого объекта есть лишь один параметр Name, т.е. имя multi_manager'a. Имя обязательно нужно указывать для возможности активации.
Основные же параметры выставляются при отжатой кнопке "SmartEdit" (см. рис. ниже).
Нажмем кнопку "Add", чтобы добавить новую запись. Появится небольшое окошко. В строку "Key" вписывается имя объекта, который необходимо активировать, а в строку "Value" — время в секундах до активации. Время можно задавать не только целыми секундами: 0,1,2,3.., но и секундами с десятыми или сотыми долями (0.1, 0.25, 0.5, 1.3, 2.7, 73.5). Дробная часть отделяется точкой.
t10multi1 Multi_manager позволяет активировать до 16 различных объектов. А если учесть, что в качестве активируемого объекта может сам multi_manager , то общее количество контролируемых объектов может быть довольно большим.
Давайте рассмотрим простой пример. У нас есть небольшая комната, в центре которой расположен источник света light. По углам комнаты расположены еще 4 лампочки light, которые в начале раунда будут выключены (установлен флажок "Initially dark"). Имена у лампочек следующие: light1, light2, light3, light4.
Смысл эксперимента заключается в последовательном включении и выключении каждой лампочки (эдакая дискотека в стиле 80-х годов :). Последовательность включения и выключения лампочек, а также время активации запишем в свойства multi_manager при отжатой кнопке "SmartEdit". Дополнительно создадим на стене кнопку (func_button), которая будет активировать multi_manager, а тот в свою очередь цепочку из 4-х лампочек (см. рис. ниже).
t10multi3 Итак, последовательность действий следующая:
(1) игрок нажал на кнопку (func_button)
(2) кнопка запускает multi_manager
(3) multi_manager включает/выключает лампочки с заданными интервалами:
лампочка-1 через 0.0 с — ВКЛ.
лампочка-1 через 0.5 с — ВЫКЛ.
лампочка-2 через 0.5 с — ВКЛ.
лампочка-2 через 1.0 с — ВЫКЛ.
лампочка-3 через 1.0 с — ВКЛ.
лампочка-3 через 1.5 с — ВЫКЛ.
лампочка-4 через 1.5 с — ВКЛ.
лампочка-4 через 2.0 с — ВЫКЛ.
В свойства multi_manager для удобства будем вписывать включение и выключение лампочек, расстанавливая их по времени активации, но в принципе последовательность записи значения не имеет. Если в свойства multi_manager вписать объект, который уже есть в списке, то к имени такого объекта будут добавлены символы #1, #2, #3 и т.д. (см. рис. ниже).
t10multi2 Объекту multi_manager присвоим имя lgt_multi и впишем это имя в свойства кнопки (func_button) в параметр "Targetted object". Вот собственно и все. Когда игрок нажмет кнопку, по очереди загорятся и погаснут четыре лампочки по углам комнаты.
У объекта multi_manager есть один флаг "multithreaded". Если этот флаг отмечен, то multi_manager запустится повторно независимо от того, выполняет он какую-то последовательность действий или нет. Если флаг не отмечен, то multi_manager нельзя запустить повторно, пока он не закончит активацию последнего объекта из списка.
В современных картах объект multi_manager применяется довольно часто. Например, при помощи multi_manager'a можно запускать несколько звуков или активировать цепочку взрывов.
multi_manager.zip [12Кб] — в архиве карта-пример в форматах BSP и RMF.
7.6

Условие для активации (multisource)

В этой статье мы расскажем о принципе действия объекта multisource, который активирует указанный в его свойствах объект, только после выполнения определенного условия. Для создания тестовой карты мы будем использовать следующие энтити-объекты: Multisource в некотором роде противоположен multi_manager'у, т.к. активирует объект, только когда несколько объектов активировали его самого. А мульти_мэнеджер сам активирует несколько объектов.
Давайте рассмотрим простейший пример использования multisource.
Наша тестовая карта будет состоять из двух комнат, разделенных простой дверью func_door. Присвоим этой двери имя door1. Свойства в данном случае не так важны — выставьте их самостоятельно. Единственное, для удобства отметьте флаг "Toggle", чтобы дверь автоматически не закрывалась.
Рядом на стене расположим две кнопки func_button (именно две — это важно) и в параметр "Targetted object" каждой из них впишем имя door_master (это имя будущего объекта multisource, см. рис. ниже).
Схема, при которой дверь откроется только в случае нажатия обеих кнопок
Смысл опыта заключается в том, что дверь должна открываться только в том случае, если нажаты обе кнопки, т.е. при нажатии на одну кнопку дверь открываться не должна.
Вставим на карту объект multisource и дадим ему имя door_master и впишем в параметр "Target" имя двери, т.е. door1.
Готово! Когда обе кнопки будут нажаты, дверь откроется. На тестовой карте у кнопок мы установили параметр "Delay before reset": 3 секунды, чтобы можно было успеть нажать обе кнопки. Если в течении 3-х секунд будет нажата только одна кнопка, то дверь не откроется. Состояние кнопки (вкл/выкл) контролируйте по смене текстуры на ней. В нажатом положении кнопка становится красной.
multisource.zip [11Кб] — в архиве карта-пример в форматах BSP и RMF.