Меню сайта




[DS]: Half-Life Server
[DS]: Half-Life Server


[DS]: CS:S GunGame v34 Server
[DS]: CS:S GunGame v34 Server


[DS]: CS:S v34 Server
[DS]: CS:S v34 Server


Поиск

add_newДобавить новость
Последние добавленные
Название игры: S.I.P: Out Life
Жанр: FPS, с элементами RPG
Язык: с++, скрипты lua
G API: DirectX 9
Сайт: sip-game.su
Группа Vk: vk....
Читать далее

<JAM>
m1-palinka


HL-HEV
hl-hev

DS-Servers
Статьи
Туториалы
Маппинг
Goldsrc
Создание карт
Продвинутый маппинг

Табло с выбором фоновой мелодии



Табло с выбором фоновой мелодии
Добавил: root
2013-01-09 13:30:06
27 просмотров

В данной статье мы расскажем о создании табло с кнопками, нажатие которых будет приводить к смене музыки, звучащей во время игры. Также у игрока будет возможность отключить музыку вовсе. Подобное табло Вы могли видеть на карте Ka_100x100. Особенностью данного табло будет возможность запоминания проигрываемой мелодии и воспроизведение ее в начале следущего раунда.

Мы будем активно использовать следующие энтити-объекты:

Статья состоит из двух частей. В первой части мы рассказываем об устройстве табло. Во второй — о принципе действия «запоминающего устройства».


Часть 1. Устройство табло

На картинке ниже показано, как будет выглядеть табло в игре. На рисунке мы видим 3 кнопки с цифрами — это кнопки выбора 3-х различных мелодий. Кнопка «Стоп» предназначена для выключения музыки.

Так будет выглядеть табло в игре



Давайте посмотрим, что должно происходить при нажатии на ту или иную кнопку.

Предположим, игрок захотел послушать первую мелодию. Он подходит к табло и нажимает «кнопку 1». Как известно, звуки вставляются на карту при помощи объекта ambient_generic. Мы можем прописать имя этого объекта в свойства кнопки (func_button), тогда при нажатии на кнопку звук начнет проигрываться. При следующем нажатии звук выключится.

А теперь представим, что первая мелодия уже играет, и игрок решил сменить ее на вторую. Он подходит и нажимает «кнопку 2». Начинает играть вторая мелодия, но (!) первая мелодия тоже играет. Получается наложение двух мелодий. А если нажать еще и «кнопку 3», то получится совсем нехорошо :) В связи с этим возникает задача: необходимо автоматически выключать любую из играющих мелодий и включать мелодию, выбранную игроком.

Из всего этого можно сделать вывод, что при нажатии на кнопку (func_button) нам потребуется одновременно активировать несколько объектов: 2 объекта должны «глушить» две возможно играющие мелодии. То есть, например, при выборе второй мелодии, мы должны проверить: «а не играет ли первая мелодия» + «а не играет ли третья мелодия» и затем заглушить любую их них. Естественно мы заранее не знаем, какая мелодия будет играть, когда включается вторая мелодия, поэтому мы будем на всякий случай глушить обе «лишних» мелодии одновременно: как первую, так и третью.


Использование объектов

Ну, чтож, мы вплотную подошли к использованию объектов.

Теперь мы знаем, что при нажатии на любую кнопку (func_button) должны активироваться 3 объекта, а это можно сделать только через multi_manager. Проверять состояние мелодий можно при помощи trigger_relay, который, напомним, может или только включать объекты, или только выключать объекты, ну, а также он может работать, как обычный триггер в обоих направлениях, но эта функция нам сейчас неинтересна. Нам необходимо выключать «лишние» звуки, поэтому параметр «Trigger State» этого объекта мы выставим в «Off».

Давайте посмотрим, что должно происходить при нажатии на «кнопку 1». На схеме ниже видно, что при нажатии на первую кнопку, активируется multi_manager, который включает первую мелодию, глушит вторую мелодию объектом trigger_relay и глушит третью мелодию еще одним объектом trigger_relay.

Схема работы объектов при нажатии на первую кнопку



Такие же операции происходят при нажатии на вторую и третью кнопки. Разница лишь в запускаемых и глушимых мелодиях. Таким образом, нам необходимо создать:

  • 4 кнопки: func_button
  • 4 объекта: multi_manager
  • 3 глушащих триггера: trigger_relay (каждый из них глушит 1 мелодию)
  • 3 мелодии: ambient_generic

Вот как мы разместили эти объекты на тестовой карте:

Схема работы объектов (все кнопки)



Чтобы не запутаться в многочисленных свойствах объектов, приведенных ниже, пользуйтесь схемой.

Func_button 1 (первая кнопка)
Name: button_1 (имя кнопки)
Targetted object: multi_1 (сюда записываем имя первого multi_manager'а)
Delay before reset: 2 (время после нажатия, в течении которого кнопка не действует)
Sounds: Keycard Sound (звук при нажатии на кнопку)



Multi_manager 1 (этот объект по очереди запускает другие объекты)
Name: multi_1 (имя данного объекта)
sound_1 — 0.1 (запуск первой мелодии через 0.1 секунды)
sound_2_off — 0.1 (запуск объекта trigger_relay, глушащего вторую мелодию)
sound_3_off — 0.1 (запуск объекта trigger_relay, глушащего третью мелодию)
change_1 — 0.1 (объяснено во второй части статьи)



Ambient_generic 1 (первая мелодия)
Name: sound_1 (имя первой мелодии)
Path: ambience/guit1.wav (путь к первой мелодии)
Volume: 10 (громкость мелодии, максимальная)

Флаги:

Play Everywhere: мелодия слышна по всей карте
Start Silent: в начале раунда мелодия не играет



Trigger_relay 2 (глушит вторую мелодию)
Name: sound_2_off (имя данного объекта)
Target: sound_2 (здесь указывается имя второй мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Trigger_relay 3 (глушит третью мелодию)
Name: sound_3_off (имя данного объекта)
Target: sound_3 (здесь указывается имя третьей мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Свойства объектов при выборе второй мелодии. Если внимательно просмотреть свойства приведенных ниже объектов, то можно заметь их сходство со свойствами предыдущих объектов.

Func_button 2 (вторая кнопка)
Name: button_2 (имя кнопки)
Targetted object: multi_2 (сюда записываем имя второго multi_manager'а)
Delay before reset: 2 (время после нажатия, в течении которого кнопка не действует)
Sounds: Keycard Sound (звук при нажатии на кнопку)



Multi_manager 2 (этот объект по очереди запускает другие объекты)
Name: multi_2 (имя данного объекта)
sound_2 — 0.1 (запуск второй мелодии через 0.1 секунды)
sound_1_off — 0.1 (запуск объекта trigger_relay, глушащего первую мелодию)
sound_3_off — 0.1 (запуск объекта trigger_relay, глушащего третью мелодию)
change_2 — 0.1 (объяснено во второй части статьи)



Ambient_generic 2 (вторая мелодия)
Name: sound_2 (имя второй мелодии)
Path: ambience/opera.wav (путь ко второй мелодии)
Volume: 10 (громкость мелодии, максимальная)

Флаги:

Play Everywhere: мелодия слышна по всей карте
Start Silent: в начале раунда мелодия не играет



Trigger_relay 1 (глушит первую мелодию)
Name: sound_1_off (имя данного объекта)
Target: sound_1 (здесь указывается имя первой мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Trigger_relay 3 (глушит третью мелодию)
Name: sound_3_off (имя данного объекта)
Target: sound_3 (здесь указывается имя третьей мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Свойства объектов при выборе третьей мелодии. Свойства схожи с предыдущими двумя группами объектов.

Func_button 3 (третья кнопка)
Name: button_3 (имя кнопки)
Targetted object: multi_3 (сюда записываем имя третьего multi_manager'а)
Delay before reset: 2 (время после нажатия, в течении которого кнопка не действует)
Sounds: Keycard Sound (звук при нажатии на кнопку)



Multi_manager 3 (этот объект по очереди запускает другие объекты)
Name: multi_3 (имя данного объекта)
sound_3 — 0.1 (запуск третьей мелодии через 0.1 секунды)
sound_1_off — 0.1 (запуск объекта trigger_relay, глушащего первую мелодию)
sound_2_off — 0.1 (запуск объекта trigger_relay, глушащего вторую мелодию)
change_3 — 0.1 (объяснено во второй части статьи)



Ambient_generic 3 (третья мелодия)
Name: sound_3 (имя третьей мелодии)
Path: ambience/lv_jubilee.wav (путь ко третьей мелодии)
Volume: 10 (громкость мелодии, максимальная)

Флаги:

Play Everywhere: мелодия слышна по всей карте
Start Silent: в начале раунда мелодия не играет



Trigger_relay 1 (глушит первую мелодию)
Name: sound_1_off (имя данного объекта)
Target: sound_1 (здесь указывается имя первой мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Trigger_relay 2 (глушит вторую мелодию)
Name: sound_2_off (имя данного объекта)
Target: sound_2 (здесь указывается имя второй мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Теперь давайте подумаем, что должно происходить при нажатии на четвертую кнопку? Мы знаем, что должна «замолкнуть» любая играющая мелодия. То есть при нажатии на четвертую кнопку нам надо запустить четвертый multi_manager, который запустит все 3 глушащих объекта (trigger_relay), созданные ранее для первых трех случаев.

Func_button 4 (четвертая кнопка)
Name: button_4 (имя кнопки)
Targetted object: multi_4 (сюда записываем имя четвертого multi_manager'а)
Delay before reset: 2 (время после нажатия, в течении которого кнопка не действует)
Sounds: Keycard Sound (звук при нажатии на кнопку)



Multi_manager 4 (этот объект по очереди запускает другие объекты)
Name: multi_4 (имя данного объекта)
sound_1_off — 0.1 (запуск объекта trigger_relay, глушащего первую мелодию)
sound_2_off — 0.1 (запуск объекта trigger_relay, глушащего вторую мелодию)
sound_3_off — 0.1 (запуск объекта trigger_relay, глушащего третью мелодию)
change_off — 0.1 (объяснено во второй части статьи)



Trigger_relay 1 (глушит первую мелодию)
Name: sound_1_off (имя данного объекта)
Target: sound_1 (здесь указывается имя первой мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Trigger_relay 2 (глушит вторую мелодию)
Name: sound_2_off (имя данного объекта)
Target: sound_2 (здесь указывается имя второй мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Trigger_relay 3 (глушит третью мелодию)
Name: sound_3_off (имя данного объекта)
Target: sound_3 (здесь указывается имя третьей мелодии, которую надо заглушить)
Trigger State: Off (означает, что триггер будет только выключать мелодию, но не включать)



Вот и все! :)

Теперь перейдем к заключительной части статьи и объясним принцип работы «запоминающего устройства», которое запоминает играющую мелодию (или что мелодии не играют) и в следующем раунде запускает туже самую мелодию (или глушит все мелодии).


Часть 2. Запоминающее устройство

Сейчас мы немного модернизируем созданную систему, добавим некоторые параметры и дополнительно сделаем еще 6 объектов.

В качестве запускающего мелодию в начале нового раунда устройства мы будем использовать func_door. А что значит, что мы будем запускать мелодию? Это значит, что дверь (func_door) будет автоматически активировать один из 4-х объектов multi_manager (ведь именно эти объекты управляют всей системой: три из них запускают мелодии, а четвертый глушит).

В параметр «Target» двери мы запишем: multi_4 — имя четвертого multi_manager'а, который глушит все мелодии. Однако этот параметр будет меняться при каждом нажатии любой из кнопок: при нажатии на первую кнопку этот параметр поменяется на multi_1 (запуск первого multi_manager'а), при нажатии на вторую кнопку параметр сменится на multi_2, при нажатии на третью кнопку параметр сменится на multi_3 и при нажатии на четвертую кнопку (кнопку «Стоп») параметр вновь вернется к значению multi_4.

Менять параметр «Target» любого объекта (а у нас это будет дверь) позволяет объект trigger_changetarget. Создадим 4 таких объекта. Их имена следующие: change_1, change_2, change_3, change_off. Эти имена необходимо записать в объекты multi_manager, согласно приведенным в первой части статьи свойствам.

Теперь схема размещения объектов будет выглядеть так (добавилось 4 объекта trigger_changetarget):

Схема работы объектов (все кнопки) + объекты Trigger_changetarget



Итак, теперь у нас при нажатии, например, на первую кнопку, активируется первый multi_manager, который активирует уже 4 объекта: включает первую мелодию, глушит вторую мелодию, глушит третью мелодию, меняет «Target» двери на значение multi_1. При нажатии на другие кнопки происходят схожие операции.

Вернемся к двери (func_door). Ее необходимо сделать прозрачной и нематериальной, чтобы игроки даже не знали о ее существовании. Достигается это выставлением определенных параметров отображения и флага «Passable» (свойства приведены ниже). На рисунке ниже видно, что на нашей карте дверь покрашена в обычную текстуру (такую же, как на стенке) и размещена она прямо у табло, но благодаря выставленным свойствам и флагам, дверь мешать игрокам не будет — она будет невидимой и нематериальной.

Дверь, запускающая мелодию в начале каждого нового раунда



Также необходимо подумать об активации двери в начале раунда, ведь сама она активироваться не может, а соответственно не может и запустить мелодию. Для этого необходимо создать на базах команд по одному объекту trigger_multiple. Эти триггеры необходимо разместить, так, чтобы были перекрыты все точки рождения игроков (см. рис. ниже).

Триггер, активирующий дверь



Получается, что игроки рождаются, тут же попадают в поле действия объектов trigger_multiple, которые активируют дверь, а т.к. мы установили параметр двери «Delay before close: -1», который не позволяет активировать дверь несколько раз за раунд, то мелодия будет запущена только один раз в начале раунда.

Свойства новых объектов:

Trigger_changetarget 1 (меняет параметр «Target» двери на multi_1)
Name: change_1 (имя данного объекта)
Target: memory (здесь указывается имя двери)
New Target: multi_1 (означает, что теперь параметр «Target» двери будет иметь значение multi_1)



Trigger_changetarget 2 (меняет параметр «Target» двери на multi_2)
Name: change_2 (имя данного объекта)
Target: memory (здесь указывается имя двери)
New Target: multi_2 (означает, что теперь параметр «Target» двери будет иметь значение multi_2)



Trigger_changetarget 3 (меняет параметр «Target» двери на multi_3)
Name: change_3 (имя данного объекта)
Target: memory (здесь указывается имя двери)
New Target: multi_3 (означает, что теперь параметр «Target» двери будет иметь значение multi_3)



Trigger_changetarget Off (меняет параметр «Target» двери на multi_4)
Name: change_off (имя данного объекта)
Target: memory (здесь указывается имя двери)
New Target: multi_4 (означает, что теперь параметр «Target» двери будет иметь значение multi_4)



Func_door (дверь, запускает мелодию в начале раунда)
Name: memory (имя двери)
Target: multi_4 (это значение по умолчанию, однако оно меняется объектами trigger_changetarget)
Render Mode: texture (этот режим вместе со следующим «FX Amount» делает дверь прозрачной в игре)
FX Amount: 0
Delay before close: -1 (это значение не позволяет активировать дверь несколько раз за раунд)

Флаги:

Passable: делает дверь нематериальной, чтобы она не мешала передвижениям игроков



Trigger_multiple (триггер, активирует дверь)
Target: memory (сюда записывается имя двери)



Вот и все нехитрое устройство табло :) Возможно, данное табло никогда Вам не понадобится, но задача, стоявшая перед нами при написании этой статьи, заключалась в ознакомлении Вас с возможностями таких энтити-объектов, как: trigger_relay и trigger_changetarget. Данная статья должна помочь Вам понять, что сделать в CS можно много интересных вещей, главное, знать свойства объектов и уметь соединить 10, 20, 30 объектов в одну работающую систему.


melody.zip [37Кб] — в архиве карта-пример в форматах BSP и RMF.


Поделиться:
Тэги:

DS-Servers.com
Copyright © 2012-2016. All Rights Reserved.
При копировании материала ссылка на источник обязательна
За материалы, размещенные пользователями, администрация сайта ответственности НЕ несет