Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Добавление своих звуков в аддоны


Рекомендуемые сообщения

1. Подготовка аудио-файлов

Чтобы добавить свои звуки в аддоны нам потребуется установить FMOD Designer. Скачивайте из вложения инсталлятор fmoddesigner44464win-installer.exe. Единственное НО, Аллоды используют версию 4.44.54, я не нашел её в интернете и использовал чуть новее 4.44.64. Но, кажется, всё работает.

Запускаем FMOD Designer, нажимаем File -> New Project... Создаем где-нибудь папку. ВАЖНО ЧТОБЫ НА ПУТИ НЕ БЫЛО РУССКИХ СИМВОЛОВ. Внизу в поле "Имя файла" пишем название проекта. ОНО ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ и не совпадать с именами проектов внутри клиента и других аддонов. Никаких Interface, Sounds, Spells и т п. Проще всего назвать также как и ваш аддон. На скриншоте я ввел SoundExample.fdp. Жмём Сохранить

1.PNG.5ceea03a2a3456c5af1695952b084866.PNG

 

В эту же директорию, куда мы сохранили проект, копируем все нужные вам звуковые файлы (работают wav, ogg, другие не проверял, но думаю и mp3). Это не обязательно, но я делал так, чтобы избежать всяких проблем с русскими буквами в путях и с слишком длинными путями

1_1.PNG.d6112471c53ba3acbb895077a4b6d692.PNG

 

Нажимаем правой кнопкой в Untitled и выбираем Delete и Yes

2.png.07ed6016adfbe5277a1b0a5c14525608.png

 

Кликаем правой кнопкой в пустое место и выбираем Add Event Group...

3.png.6f4162074fa847e65ceb0745cb520311.png

 

Вводим название группы, это будет начальная папка, я написал так же SoundExample. И вам советую писать ваше название. Нажимаем ОК

4.PNG.0910718bca614d4365d09a95685aa377.PNG

Примечание: Таким же образом можно добавлять папки в папки. Для удобной вам организации. Но сейчас обойдемся без этого

 

Кликаем по нашей папке правой кнопкой и выбираем Add Simple Event

5.png.6d4815a0b86d6902d9b257b765b16a71.png

 

Вводим имя вашего "ивента", например, Sound1 и нажимаем ОК

6.PNG.d69c98318b779c83c1b06eadb99197c7.PNG

 

Выбираем наш ивент в списке слева, затем переносим нужный нам звуковой файл из папки в эту желтую область на скрине:

7.PNG.ce773ca29459eca9a7bc32050dd15ff4.PNG

 

Можно добавить в эту же область и другие файлы, тогда при вызове этого ивента из аддона проиграется рандомный файл из списка (либо не рандомный, правила можно настраивать, но это уже смотрите гайды по FMOD Designer).

Если нужно, добавляем еще ивенты. Я добавил еще Sound2. И также переносим файлы в этот ивент:

8.PNG.fb1d6116dbf449332f3f5016688b6469.PNG

 

Переходим во вкладку Banks (сверху). Выбираем наш банк слева, он будет один в списке

9.PNG.084ee1905a2a825959fa4fa5daddb8d4.PNG

 

В середине видим список всех используемых файлов, они будут сохранены в этот банк. Если список красный, то программа не справилась с русскими или длинными путями и ничего не получится, начинайте заново.

СПРАВА В СВОЙСТВАХ В ПОЛЕ "Name" ПЕРЕИМЕНОВЫВАЕМ В ТАКОЕ ЖЕ НАЗВАНИЕ КАК И НАШ ПРОЕКТ. То есть удаляем "_bank00"

Должно получиться так:

10.PNG.f3af0d8f8fe02087388d436d7366b0f8.PNG

Немного теории: На самом деле в одном проекте может быть несколько банков и все ваши аудио файлы будут распределены между ними, как вы захотите. Каждый банк будет экспортирован в отдельный FSB-файл. В игре есть такие проекты с кучей банков. Но для аддонов думаю хватит и одного банка. Поэтому конвертор, который я написал, и которым мы будем пользоваться в дальнейшем, принимает только файл проекта и банка с одинаковым названием. Так сильно проще.

 

Также в свойствах справа выбираем Compression VORBIS. Compression Quality можно оставить 50. Хотя можете попробовать что-то другое. Я сделал так:

11.PNG.4b02709be9293cc85a820c523644341a.PNG

 

Сохраняем на всякий случай проект File -> Save Project.

Выбираем в верхнем меню Project -> Build. В окошке ОБЯЗАТЕЛЬНО ставим галку напротив нашего банка и нажимаем Build

12.PNG.af728527dacc109125d5abd78fc5374c.PNG

 

Можно закрывать FMOD Designer

В папке с нашим проектом должны появиться два файла с одинаковыми именами и расширениями FSB и FEV. Если имена разные, то вы сделали что-то не по инструкции. Переименовывайте проект, банк и билдите заново. У меня получилось так

13.PNG.cfba146f11c930d5fef98bd7eebf7757.PNG

 

Скачиваем из вложений мою программу конвертер AOSoundConverter.exe в любую папку. Может будет ругаться смарт-скрин, не знаю, разберетесь.

Берем любой файл из двух, либо FEV, либо FSB и перетаскиваем его на AOSoundConverter.exe (ну либо запустите exe с параметром путём к файлу, если вы хакер)

Программа напишет об успехе ( или нет ._. ). В папке проекта появятся два новых файла, готовых для аллодов BSB и BEV:

14.PNG.581fa29384b8e991972f1d10600f9d10.PNG

Именно они нам и нужны. Копируем в папку нашего аддона. Поздравляю. Пол дела сделано!

Примечание: Если вы захотите добавить что-то в проект, то всегда можете открыть FDP в FMOD Designer заново, внести любые изменения, сбилдить и сконвертить файлы заново.

2. Добавление файлов в аддон

В аддондеск нужно добавить ссылку на файл UIRelatedSounds. Путь к файлу и название группы на ваше усмотрение.

<?xml version="1.0" encoding="utf-8"?>
<UIAddon>
  ...
  <soundsGroups>
    <Item>
      <groupName>SoundExample</groupName>
      <sounds href="SoundExample.(UIRelatedSounds).xdb" />
    </Item>
  </soundsGroups>
</UIAddon>

Сам файл UIRelatedSounds будет выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<UIRelatedSounds>
  <Items>
    <Item>
      <name>Sound1</name>
      <resource>
        <project href="SoundExample.(FMODProject).xdb" />
        <name>SoundExample/Sound1</name>
      </resource>
    </Item>
    <Item>
      <name>Sound2</name>
      <resource>
        <project href="SoundExample.(FMODProject).xdb" />
        <name>SoundExample/Sound2</name>
      </resource>
    </Item>
  </Items>
</UIRelatedSounds>

Имя айтема - это то, что вы будете писать в луа-коде для получения звука, а name внутри resource - это путь к ивенту, который был у вас в FMOD Designer-е. Ну а куда сохранить FMODProject и как его назвать решайте сами

Файл FMODProject будет выглядеть так (не забывайте поменять имя bsb и bev на ваши в каждом месте):

<?xml version="1.0" encoding="UTF-8" ?>
<FMODProject>
  <fmodProject href="SoundExample.bev" />
  <fmodBanks>
    <Item href="SoundExample.bsb" />
  </fmodBanks>
  <eventsInfo>
    <Item>
      <eventName>/SoundExample/Sound1</eventName>
      <bankNames>
        <Item>SoundExample.bsb</Item>
      </bankNames>
    </Item>
    <Item>
      <eventName>/SoundExample/Sound2</eventName>
      <bankNames>
        <Item>SoundExample.bsb</Item>
      </bankNames>
    </Item>
  </eventsInfo>
</FMODProject>

Рядом положите BSB и BEV, которые мы создали ранее

Собственно, луа-код:

-- Получаем группу по имени из AddonDesc
local group = common.GetAddonRelatedSoundGroup("SoundExample")
-- Получаем звуки по имени из UIRelatedSounds
local sound1 = common.CreateSound(group:GetSound("Sound1"))
local sound2 = common.CreateSound(group:GetSound("Sound2"))
-- Проиграть звук так:
sound1:Play(true) -- true или false без разницы, это ни на что не влияет, просто кривое апи по словам UIAddon-а

-- Все методы звука:
-- Play, Stop, IsPlaying, SetPaused, IsPaused, SetVolume, GetVolume, SetMute, IsMute, SetParam, GetParam, GetProperty
-- К каким-то тоже требуется бесполезный bool в параметрах

Если что-то не понятно, можно посмотреть аддон YouAreLegendary как пример

3. Ограничения, важно

Крайне не рекомендуется бесконтрольно вставлять звуки в каждый аддон. Делайте это только если действительно необходимо.

Даже, если в (FMODProject).xdb вы ссылаетесь на бинарные файлы BSB и BEV внутри клиента, то для каждого такого (FMODProject).xdb будет загружена КОПИЯ этих файлов. Но несколько разных аддонов могут использовать один общий FMODProject и тогда будет всего одна копия.

Думаю все знают, насколько плохо клиент работает с включенным звуком. Если расплодится куча аддонов со звуками и пойдет еще больше жалоб, то для аддонов сделают какие-то ограничения из этих (или хуже):

  1. Нельзя будет ссылаться на bsb и bev внутри клиента, так как они там тяжелые, содержат много звуков и занимают много памяти.
  2. Для всех аддонов сделают возможным подключить только один проект (с фиксированным именем, например, InterfaceUserMods). В котором будут какие-то базовые звуки и ничего более.

Будьте внимательны:

  • Имя проекта должно быть глобально уникальным
  • В проекте не более 1000 банков
  • Размер банка не более 4MiB
  • Общее число банков в памяти не более чем N (N не очень большое число), при превышении самый давно используемый банк выгружается
  • Если запускается звук из незагруженного банка то он начнет играть с некоторой задержкой с таймкода равного задержке

И спасибо разработчику игры UIAddon-у за помощь и пояснения 🙂 

fmoddesigner44464win-installer.exe AOSoundConverter.exe

Ссылка на комментарий
Поделиться на другие сайты

function Sound.Play(self, arg1) end

Запускает проигрывание звука.
Если звук уже играется, то функция ничего не делает.
Если звук еще не загружен, то, после подгрузки, он, плавно увеличивая громкость, проиграется с учетом времени запуска. Ресурс для звука начинает грузиться, когда вызывается common.CreateSound(soundId), поэтому рекомендуется звук создавать заранее.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : boolean - неизвестно (not nil)

Возвращает:

  • void

function Sound.Stop(self, immediate) end

Останавливает проигрывание звука.
Если звук не играется, то функция ничего не делает.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • immediate : boolean - означает, нужно ли немедленно остановить звук. Если false, то останавливается с учетом настроек самого звука (например, времени плавного уменьшения громкости)

Возвращает:

  • void

function Sound.IsPlaying(self, arg1) end

Проверяет играет ли сейчас звук.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : boolean - неизвестно (not nil)

Возвращает:

  • boolean - true, если звук играет

function Sound.SetPaused(self, pause) end

Приостанавливает воспроизведение звука.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • pause : boolean - true, если нужно приостановить воспроизведение звука; false, если нужно продолжить воспроизведение звука

Возвращает:

  • void

function Sound.IsPaused(self, arg1) end

Проверяет приостановлено ли воспроизведение звука.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : boolean - неизвестно (not nil)

Возвращает:

  • boolean - true, если воспроизведение приостановлено

function Sound.SetVolume(self, volume) end

Задаёт громкость воспроизведения звука.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • volume : number - громкость от 0 до 1 (float)

Возвращает:

  • void

function Sound.GetVolume(self, arg1) end

Получить текущую громкость воспроизведения звука.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : boolean - неизвестно (not nil)

Возвращает:

  • number - громкость от 0 до 1 (float)

function Sound.SetMute(self, mute) end

Приглушить воспроизведение звука.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • mute : boolean - true, если нужно приглушить воспроизведение звука; false, если нужно снять приглушение звука

Возвращает:

  • void

function Sound.IsMute(self, arg1) end

Проверяет приглушено ли воспроизведение звука.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : boolean - неизвестно (not nil)

Возвращает:

  • boolean - true, если воспроизведение приглушено

function Sound.SetParam(self, arg1, arg2) end

Наверное, устанавливает какие-то параметры.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : string - возможно, некое имя параметра
  • arg2 : number - возможно, некое значение для установки (float)

Возвращает:

  • boolean - возможно, результат операции по изменению значения параметра arg1 (всегда false)

function Sound.GetParam(self, arg1, arg2) end

Наверное, получает результат сравнения значения параметра с переданным именем с переданным значением.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : string - возможно, некое имя параметра
  • arg2 : number - возможно, некое значение для сравнения (float)

Возвращает:

  • boolean - возможно, результат сравнения arg2 и значения параметра arg1 (всегда false)

function Sound.GetProperty(self, arg1, arg2) end

Наверное, получает результат сравнения значения свойства с переданным именем с переданным значением.

Параметры:

  • self : Sound - объект [Sound] (not nil)
  • arg1 : string - возможно, некое имя свойства
  • arg2 : number - возможно, некое значение для сравнения (int)

Возвращает:

  • boolean - возможно, результат сравнения arg2 и значения свойства arg1 (всегда true)
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

15.0

 

function Sound.Play(self) end

Запускает проигрывание звука.
Если звук уже играется, то функция ничего не делает.
Если звук еще не загружен, то, после подгрузки, он, плавно увеличивая громкость, проиграется с учетом времени запуска. Ресурс для звука начинает грузиться, когда вызывается common.CreateSound(soundId), поэтому рекомендуется звук создавать заранее.

Параметры:

self : Sound - объект Sound (not nil)

Возвращает:

void


function Sound.Stop(self, immediate) end

Останавливает проигрывание звука.
Если звук не играется, то функция ничего не делает.

Параметры:

self : Sound - объект [Sound] (not nil)
immediate : boolean - означает, нужно ли немедленно остановить звук. Если false, то останавливается с учетом настроек самого звука (например, времени плавного уменьшения громкости)

Возвращает:

void


function Sound.IsPlaying(self) end

Проверяет играет ли сейчас звук.

Параметры:

self : Sound - объект Sound](not nil)

Возвращает:

boolean - true, если звук играет

 

function Sound.SetPaused(self, pause) end

Приостанавливает воспроизведение звука.

Параметры:

self : Sound - объект Sound (not nil)
pause : boolean - true, если нужно приостановить воспроизведение звука; false, если нужно продолжить воспроизведение звука

Возвращает:

void


function Sound.IsPaused(self) end

Проверяет приостановлено ли воспроизведение звука.

Параметры:

self : Sound - объект [Sound] (not nil)

Возвращает:

boolean - true, если воспроизведение приостановлено


function Sound.SetVolume(self, volume) end

Задаёт громкость воспроизведения звука.

Параметры:

self : Sound - объект Sound (not nil)
volume : number - громкость от 0 до 1 (float)

Возвращает:

void


function Sound.GetVolume(self) end

Получить текущую громкость воспроизведения звука.

Параметры:

self : Sound - объект Sound (not nil)

Возвращает:

number - громкость от 0 до 1 (float)


function Sound.SetMuted(self, mute) end

Приглушить воспроизведение звука.

Параметры:

self : Sound - объект Sound (not nil)
mute : boolean - true, если нужно приглушить воспроизведение звука; false, если нужно снять приглушение звука

Возвращает:

void


function Sound.IsMuted(self) end

Проверяет приглушено ли воспроизведение звука.

Параметры:

self : Sound - объект Sound (not nil)

Возвращает:

boolean - true, если воспроизведение приглушено

Ссылка на комментарий
Поделиться на другие сайты

Дополнительно об ограничениях

Крайне не рекомендуется бесконтрольно вставлять звуки в каждый аддон. Делайте это только если действительно необходимо.

Даже, если в (FMODProject).xdb вы ссылатесь на бинарные файлы BSB и BEV внутри клиента, то для каждого такого (FMODProject).xdb будет загружена КОПИЯ этих файлов. Но несколько разных аддонов могут использовать один общий FMODProject и тогда будет всего однаа копия.

Думаю все знают насколько плохо клиент работает с включенным звуком. Если расплодится куча аддонов со звуками и пойдет еще больше жалоб, то для аддонов сделают какие-то ограничения из этих (или хуже):

1) Нельзя будет ссылаться на bsb и bev внутри клиента, так как они там тяжелые, содержат много звуков и занимают много памяти

2) Для всех аддонов сделают возможным подключить только один проект (с фиксированным именем, например, InterfaceUserMods). В котором будут какие-то базовые звуки и ничего более

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования