Документация ZeroDev Sound

ZeroDev Sound: руководство по установке

Для ZeroDev Sound 3.0.127 мин чтенияОбновлено

Этот ресурс не содержит и не предоставляет никаких сторонних интеграций аудио или музыки. Музыка воспроизводится только из аудиофайлов, которые владелец сервера добавляет в ресурс, и через встроенное радио GTA. Игроки не могут вводить ссылки. Добавляйте только то аудио, которое принадлежит вам или на использование и распространение которого у вас есть права; потоковая передача контента без разрешения может нарушать Cfx.re Creator Platform License Agreement и закон.

Колонки, которые игроки покупают, носят, ставят и связывают, и автозвук, который они собирают в своих машинах. Это полный справочник. Краткая версия — в docs/SETUP.md (5 шагов); проблемы — в docs/TROUBLESHOOTING.md; переход с 1.x — в UPGRADING.md.

Содержание 1. Требования 2. Установка 3. Предметы для вашего инвентаря 4. Первый запуск: что вы должны увидеть 5. Самые часто меняемые настройки 6. Управление 7. Автозвук 8. Источники музыки 9. Pulse Phone 10. Полиция, соседи и администраторы 11. Языки 12. Устранение неполадок 13. Обновление

1. Требования

Обязательно oxmysql. ZeroDev Sound создаёт собственные таблицы при первом запуске; SQL-файл импортировать не нужно.
Framework ESX Legacy, QBCore, Qbox или без него (standalone). Определяется сам.
Инвентарь ox_inventory, qb-inventory (а также ps- и lj-inventory), qs-inventory, codem-inventory, core_inventory, origen_inventory, tgiann-inventory, инвентарь ESX или без инвентаря. Определяется сам.
По желанию ox_target или qb-target (без них игроки видят подсказку с клавишей на экране). Pulse Phone 1.2.9 или новее (добавляет приложение Sound и автомагнитолу в Pulse Drive). pma-voice для микрофона: без него микрофон можно взять и петь в него, но через колонки никто ничего не услышит.

Больше ничего: ни ox_lib, ни API-ключа, ни аккаунта Google.

Серверы на Linux

Серверы на Linux: используйте артефакт Recommended, а не Latest. На странице загрузки сервера FiveM (docs.fivem.net/docs/server-download/) выберите Linux и ветку обновлений Recommended. Сервер на последнем артефакте для Linux падал при загрузке (FXServer выводил дамп /proc/self/maps), и переход на рекомендуемый артефакт это исправил. Это единственный отчёт по Linux, который у нас есть; сами мы ZeroDev Sound на сервере Linux пока не запускали.

Серверы на Linux: используйте артефакт Recommended, а не Latest. На странице загрузки сервера FiveM (docs.fivem.net/docs/server-download/) выберите Linux и ветку обновлений Recommended. Сервер на последнем артефакте для Linux падал при загрузке (FXServer выводил дамп /proc/self/maps), и переход на рекомендуемый артефакт это исправил. Это единственный отчёт по Linux, который у нас есть; сами мы ZeroDev Sound на сервере Linux пока не запускали.

На сервере standalone (без framework) всё бесплатно: магазин и детали для машин ничего не стоят.

2. Установка

Шаг 1. Положите папку. Поместите папку zerodev-sound в папку resources (подойдёт любая подпапка, например resources/[zerodev]/zerodev-sound). Не меняйте имя папки zerodev-sound: записи предметов ox_inventory обращаются к ней по этому имени.

Шаг 2. Добавьте её в server.cfg после базы данных, framework и инвентаря:

server.cfg
ensure oxmysql
ensure es_extended        # or qb-core / qbx_core, or nothing on a standalone server
ensure ox_inventory       # or your inventory
ensure ox_target          # optional, or qb-target
ensure phone              # optional: Pulse Phone
ensure zerodev-sound

Шаг 3. Выдайте администраторам права админа (без лимита колонок, список /soundadmin, дистанционная остановка и удаление):

server.cfg
add_ace group.admin zerodev.sound.admin allow

Шаг 4. Настройте предметы для своего инвентаря: раздел 3. На инвентаре ESX и на QBCore это делается за вас.

Шаг 5. Перезапустите сервер (полный рестарт, а не только ресурса, чтобы каждый игрок загрузил модели) и проверьте консоль: раздел 4.

3. Предметы для вашего инвентаря

Всего 12 предметов: десять колонок, микрофонная стойка и ремкомплект.

Имя предмета Метка Вес
zds_roam Портативная колонка Roam 2 kg
zds_room_shelf Полочная колонка 4 kg
zds_room_tower Напольная колонка 10 kg
zds_room_ceiling Потолочная колонка 2 kg
zds_room_sub Домашний сабвуфер 8 kg
zds_stage_pa PA-колонка 10 kg
zds_stage_sub Концертный сабвуфер 15 kg
zds_stage_array Колонка линейного массива 12 kg
zds_stage_monitor Сценический монитор 6 kg
zds_stage_mixer DJ-микшер 5 kg
zds_stage_mic Микрофонная стойка 3 kg
zds_repair_kit Ремкомплект для колонок 0.6 kg

Картинки лежат в zerodev-sound/web/img/items/. Угадывать ничего не придётся: если чего-то не хватает, консоль сервера выводит точные записи для вашего инвентаря и называет каждую картинку, которая ещё не на месте.

Какой у вас инвентарь?

Инвентарь Что вы делаете Куда класть картинки
Инвентарь ESX (ESX Legacy без ox) Ничего. Предметы добавляются в таблицу items при запуске. Копировать ничего не нужно
ox_inventory (ESX, Qbox или standalone) Вставьте блок для ox_inventory в ox_inventory/data/items.lua, внутрь таблицы. Перезапустите ox_inventory, затем zerodev-sound. Копировать ничего не нужно: записи загружают картинки из zerodev-sound
qb-inventory, ps-inventory, lj-inventory (QBCore) Ничего. Предметы добавляются в shared items QBCore при запуске. Скопируйте web/img/items/*.png в <your inventory>/html/images/
qs-inventory На QBCore вставьте блок для QBCore в qb-core/shared/items.lua. На ESX вставьте те же записи в qs-inventory/shared/items.lua. qs-inventory/html/images/
codem-inventory Добавьте 12 предметов в codem-inventory/config/itemlist.lua с названиями, подписями и весом из блока QBCore. На QBCore выполните также собственный шаг установки codem-inventory, который направляет QBCore.Functions.UseItem на codem-inventory, иначе предметы нельзя будет использовать. Папка картинок предметов codem-inventory
core_inventory Ничего. Предметы добавляются за вас в shared items QBCore или в таблицу items ESX. Папка картинок предметов core_inventory
origen_inventory Добавьте 12 предметов в origen_inventory/config/items.lua с названиями, подписями и весом из блока QBCore. Папка картинок предметов origen_inventory
tgiann-inventory Добавьте 12 предметов в tgiann-inventory/items/items.lua с названиями, подписями и весом из блока QBCore. inventory_images/images/
Без инвентаря Ничего. Купленные и упакованные колонки ждут в /sound в разделе Your speakers, с кнопкой Set up. Копировать ничего не нужно

Чтобы добавить предметы в qb-core вручную, а не через скрипт, вставьте блок для QBCore в qb-core/shared/items.lua.

Другой инвентарь, копирующий один из этих API: задайте Config.Inventory как тот, который он копирует (см. раздел 5). Собственный инвентарь можно подключить в server/bridge.lua, который открыт для чтения: каждый инвентарь там — три маленькие функции (подсчёт, добавление, удаление).

Блок для ox_inventory

Вставьте внутрь таблицы return { ... } в ox_inventory/data/items.lua:

Lua
    ['zds_repair_kit'] = { label = 'Speaker Repair Kit', weight = 600, stack = false, close = true, description = 'Fixes a broken speaker. Use it next to one.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_repair_kit.png' } },
    ['zds_roam'] = { label = 'Roam Portable Speaker', weight = 2000, stack = false, close = true, description = 'Portable speaker with twin bass radiators. Carry it or set it down.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_roam.png' } },
    ['zds_room_ceiling'] = { label = 'Ceiling Speaker', weight = 2000, stack = false, close = true, description = 'Indoor. Round ceiling or wall speaker for background music in a business.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_room_ceiling.png' } },
    ['zds_room_shelf'] = { label = 'Shelf Speaker', weight = 4000, stack = false, close = true, description = 'Indoor. Bookshelf speaker: link several around a home or shop.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_room_shelf.png' } },
    ['zds_room_sub'] = { label = 'Home Subwoofer', weight = 8000, stack = false, close = true, description = 'Indoor. Cube subwoofer: link it to your indoor speakers for deep bass.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_room_sub.png' } },
    ['zds_room_tower'] = { label = 'Tower Speaker', weight = 10000, stack = false, close = true, description = 'Indoor. Floor-standing tower with two woofers: deep, clean sound for a whole room.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_room_tower.png' } },
    ['zds_stage_array'] = { label = 'Line Array Speaker', weight = 12000, stack = false, close = true, description = 'Concert. Line-array speaker for long throw over a big crowd. Stack them.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_stage_array.png' } },
    ['zds_stage_mic'] = { label = 'Mic Stand', weight = 3000, stack = false, close = true, description = 'Concert. A mic on a boom stand: link it to your concert speakers, stand at it and sing through them (/soundmic).',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_stage_mic.png' } },
    ['zds_stage_mixer'] = { label = 'DJ Mixer', weight = 5000, stack = false, close = true, description = 'Concert. Not a speaker: whoever stands at it runs every linked concert speaker (volume, bass, sound, timing).',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_stage_mixer.png' } },
    ['zds_stage_monitor'] = { label = 'Stage Monitor', weight = 6000, stack = false, close = true, description = 'Concert. Wedge monitor so the DJ or band hears the mix on stage.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_stage_monitor.png' } },
    ['zds_stage_pa'] = { label = 'PA Speaker', weight = 10000, stack = false, close = true, description = 'Concert. Powered 15" PA top on a tripod: link many for an event.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_stage_pa.png' } },
    ['zds_stage_sub'] = { label = 'Concert Subwoofer', weight = 15000, stack = false, close = true, description = 'Concert. Double 18" sub cabinet: the bass you feel at a show.',
        client = { export = 'zerodev-sound.useItem', image = 'nui://zerodev-sound/web/img/items/zds_stage_sub.png' } },

Блок для QBCore

Формат предметов QBCore, который читают qb-, ps-, lj- и qs-inventory:

Lua
    ['zds_repair_kit'] = { name = 'zds_repair_kit', label = 'Speaker Repair Kit', weight = 600, type = 'item', image = 'zds_repair_kit.png', unique = true, useable = true, shouldClose = true, description = 'Fixes a broken speaker. Use it next to one.' },
    ['zds_roam'] = { name = 'zds_roam', label = 'Roam Portable Speaker', weight = 2000, type = 'item', image = 'zds_roam.png', unique = true, useable = true, shouldClose = true, description = 'Portable speaker with twin bass radiators. Carry it or set it down.' },
    ['zds_room_ceiling'] = { name = 'zds_room_ceiling', label = 'Ceiling Speaker', weight = 2000, type = 'item', image = 'zds_room_ceiling.png', unique = true, useable = true, shouldClose = true, description = 'Indoor. Round ceiling or wall speaker for background music in a business.' },
    ['zds_room_shelf'] = { name = 'zds_room_shelf', label = 'Shelf Speaker', weight = 4000, type = 'item', image = 'zds_room_shelf.png', unique = true, useable = true, shouldClose = true, description = 'Indoor. Bookshelf speaker: link several around a home or shop.' },
    ['zds_room_sub'] = { name = 'zds_room_sub', label = 'Home Subwoofer', weight = 8000, type = 'item', image = 'zds_room_sub.png', unique = true, useable = true, shouldClose = true, description = 'Indoor. Cube subwoofer: link it to your indoor speakers for deep bass.' },
    ['zds_room_tower'] = { name = 'zds_room_tower', label = 'Tower Speaker', weight = 10000, type = 'item', image = 'zds_room_tower.png', unique = true, useable = true, shouldClose = true, description = 'Indoor. Floor-standing tower with two woofers: deep, clean sound for a whole room.' },
    ['zds_stage_array'] = { name = 'zds_stage_array', label = 'Line Array Speaker', weight = 12000, type = 'item', image = 'zds_stage_array.png', unique = true, useable = true, shouldClose = true, description = 'Concert. Line-array speaker for long throw over a big crowd. Stack them.' },
    ['zds_stage_mic'] = { name = 'zds_stage_mic', label = 'Mic Stand', weight = 3000, type = 'item', image = 'zds_stage_mic.png', unique = true, useable = true, shouldClose = true, description = 'Concert. A mic on a boom stand: link it to your concert speakers, stand at it and sing through them (/soundmic).' },
    ['zds_stage_mixer'] = { name = 'zds_stage_mixer', label = 'DJ Mixer', weight = 5000, type = 'item', image = 'zds_stage_mixer.png', unique = true, useable = true, shouldClose = true, description = 'Concert. Not a speaker: whoever stands at it runs every linked concert speaker (volume, bass, sound, timing).' },
    ['zds_stage_monitor'] = { name = 'zds_stage_monitor', label = 'Stage Monitor', weight = 6000, type = 'item', image = 'zds_stage_monitor.png', unique = true, useable = true, shouldClose = true, description = 'Concert. Wedge monitor so the DJ or band hears the mix on stage.' },
    ['zds_stage_pa'] = { name = 'zds_stage_pa', label = 'PA Speaker', weight = 10000, type = 'item', image = 'zds_stage_pa.png', unique = true, useable = true, shouldClose = true, description = 'Concert. Powered 15" PA top on a tripod: link many for an event.' },
    ['zds_stage_sub'] = { name = 'zds_stage_sub', label = 'Concert Subwoofer', weight = 15000, type = 'item', image = 'zds_stage_sub.png', unique = true, useable = true, shouldClose = true, description = 'Concert. Double 18" sub cabinet: the bass you feel at a show.' },

Если вы меняли название, цену или вес в config/catalogue.lua, копируйте записи из своей консоли: она выводит их по вашим настройкам.

4. Первый запуск: что вы должны увидеть

В консоли сервера

ZeroDev Sound выводит один блок проверки (введите soundcheck в консоли сервера, чтобы вывести его снова): база данных и схема, framework, деньги, инвентарь и предметы, таблица гаража, target, Pulse Phone, модели, боксы установки и настройки, изменённые в игре. Каждая строка, которая не OK, говорит, что делать; docs/SETUP.md показывает пример, а docs/TROUBLESHOOTING.md объясняет каждую строку.

  • Строка framework называет найденное. Если оно неверно, задайте Config.Framework или Config.Inventory в config/config.lua.
  • Жёлтая строка Add these to ox_inventory/data/items.lua ... (или ... if these items are not in ... yet, add them), за которой идут записи предметов: выполните раздел 3 для своего инвентаря, затем перезапустите. Сообщение ox_inventory исчезает, как только предметы добавлены. На qs-, codem-, origen- и tgiann-inventory записи выводятся при каждом запуске как напоминание, добавили вы их или нет.
  • Жёлтая строка Copy zds_....png from zerodev-sound/web/img/items into ...: этих картинок ещё нет в папке картинок вашего инвентаря. В ней указана папка.
  • Pulse Phone app not registered: ...: Pulse Phone запущен, но отклонил приложение. См. раздел 9.

В игре (пять проверок)

  1. На карте есть метка ZeroDev Sound на Legion Square и метка Car audio bay у Benny's.
  2. В магазине продавец стоит у стенда с выставленными колонками. Наведитесь на продавца (или нажмите E, если нет target-ресурса) и купите Roam Portable Speaker.
  3. Используйте её из инвентаря. Она появляется у вас в руках. Нажмите E, откройте Library и включите Night Drive (демо-трек, который идёт со скриптом). Люди вокруг вас её слышат.
  4. Сядьте в машину. Первые несколько раз в углу экрана написано, какая клавиша открывает автомагнитолу (по умолчанию K).
  5. Заезжайте в бокс установки автозвука за рулём и нажмите E. Установщик откроется на вашей машине.

5. Самые часто меняемые настройки

В игре: /soundadmin > Settings меняет основные настройки на лету для всех (боксы установки, кто может устанавливать, какие машины, цены, максимальная громкость, тихие часы, лимиты, магазин, полиция и повреждения). Они сохраняются в базе данных и имеют приоритет над config.lua, пока вы не нажмёте Reset to config на панели.

Всё находится в config/config.lua, если не указано иное. Товары, цены и детали для машин — в config/catalogue.lua; штатный звук каждой машины — в config/vehicles.lua.

Что вам нужно Настройка
Принудительно задать framework или инвентарь Config.Framework (auto, esx, qb, qbox, standalone), Config.Inventory (auto, ox, qb, qs, codem, core, origen, tgiann, esx, none)
Изменить команду пульта Config.Command (по умолчанию sound, то есть /sound)
Изменить клавишу автомагнитолы Config.HeadUnitKey (по умолчанию K). Игроки могут сами переназначить её в настройках GTA > Key Bindings > FiveM.
Колонок на игрока Config.MaxPlacedPerPlayer (по умолчанию 8). У администраторов лимита нет.
Колонок в одной связанной группе Config.MaxLinkedPerGroup (по умолчанию 16)
С какого расстояния подключаться и как далеко управлять Config.PairRange (15 m), Config.ControlRange (80 m)
Перенести магазин или добавить ещё магазины Config.Shop.locations. Каждый принимает label, coords, blip и по желанию heading (куда смотрит стенд) и clerk (модель педа). Config.Shop.account — bank или cash. Config.Shop.enabled = false убирает магазин.
Цены колонок price у каждого товара в config/catalogue.lua > Catalogue.Speakers. Цена ремкомплекта — Config.Damage.repairPrice.
Где устанавливается автозвук Config.Install.bays (у каждого label, coords, radius, blip). По умолчанию: один бокс у Benny's.
Разрешить владельцам собирать у своей машины где угодно Config.Install.anywhere = true. Добавляет кнопку Install на автомагнитоле и команду /caraudio (Config.Install.command).
Какие машины можно собирать Config.Install.vehicles: 'owned' (по умолчанию) или 'any'. См. раздел 7.
Устанавливать могут только механики Config.Install.anyone = false и перечислите работы в Config.Install.jobs (они должны быть на смене).
Бесплатные детали для машин Config.Install.chargeParts = false. Config.Install.account — bank или cash.
Цены деталей и готовые комплекты Catalogue.CarParts и Catalogue.CarKits в config/catalogue.lua
Штатный звук машины Vehicles.ByClass и Vehicles.ByModel в config/vehicles.lua (basic, premium, reference, bike, none)
Библиотека: включить или выключить Config.Sources.library. См. раздел 8.
Ваши собственные песни Config.Library (файлы в web/library/)
Тихие часы Config.QuietHours = { enabled = true, from = 23, to = 7, maxVolume = 0.35 } (местное время сервера)
Полицейские работы и полномочия Config.Police (см. раздел 10)
Колонки ломаются от выстрелов Config.Damage.enabled
Лимиты производительности Config.Streaming.propRange (модели отрисовываются в пределах 90 m), maxAudibleSessions (6 разных песен слышно одновременно), maxMovingParts (24 анимированных диффузора за кадр)
Дополнительные строки в консоли для поддержки Config.Debug (задайте true, пока ищете проблему)

Имена предметов. Если другой скрипт уже использует одно из имён предметов zds_, переименуйте ключ этого товара в Catalogue.Speakers (например, zds_roam = { ... }), затем используйте новое имя в своём инвентаре и переименуйте картинку соответственно.

6. Управление

Что Как
Открыть пульт /sound, или E у колонки, или приложение Sound в Pulse Phone
Автомагнитола K, сидя в машине (переназначается в настройках GTA)
Поставить колонку Используйте её предмет. Наведитесь туда, где она должна стоять: там, где она помещается, она подсвечивается зелёным. Колесо мыши или Q / E поворачивает её. Enter или левый клик ставит; Backspace или правый клик отменяет.
Собрать линейный массив в стопку Во время установки Arrow Up / Arrow Down поднимает или опускает её
Носить Roam Она появляется у вас в руках и продолжает играть, пока вы идёте. E — музыка, G — поставить, H — упаковать. Если сесть в машину или зайти в воду, она упаковывается.
Переместить или упаковать свою колонку Наведитесь на неё и выберите Move или Pack up, а без target-ресурса встаньте рядом: G — переместить (у Roam: снова взять в руки), H — упаковать. Вкладка Speakers на пульте тоже умеет упаковывать.
Связать колонки Подключитесь к одной из своих, откройте вкладку Speakers на пульте и нажмите Link рядом с другими своими колонками поблизости. Портативные связываются с портативными, домашние с домашними, концертные с концертными (в пределах 40 m, 60 m и 250 m соответственно).
Установщик автозвука Заезжайте в бокс за рулём и нажмите E (или кнопку Install на автомагнитоле / /caraudio, если сборка где угодно включена). Тяните деталь, чтобы скользить ею по поверхностям машины, Alt + перетаскивание двигает её плоско на её высоте (без привязки), Shift + перетаскивание поднимает её, Q / E или Shift + колесо мыши поворачивает её.
Пойте через колонки У DJ-микшера или у микрофонной стойки (продаётся в магазине, привязывается как колонка) колонок, к которым вы подключены, либо у микрофонной стойки в сборке машины: /soundmic берёт микрофон, повторный /soundmic кладёт его обратно
Пожаловаться на громкую музыку /noise
Список для админа /soundadmin
Выдать предмет (консоль сервера) givespeaker <player id> <item name>
Сжечь саб, чтобы показать эффект (персонал) /soundblow в машине или soundblow <plate> в консоли

В пульте: Music (библиотека вашего сервера), Queue (что дальше, сохранённые плейлисты), Speakers (питание и громкость каждой колонки, связывание, сворачивание) и Tune (шесть режимов звука, трёхполосный эквалайзер, кто выбирает музыку, часы работы и «Real distance» для концертных установок). Кто выбирает музыку: Only me; Party, где любой рядом может предложить песни, которые владелец одобряет; или Anyone, где люди рядом могут запускать, ставить на паузу, пропускать, добавлять в очередь и перематывать. Opening hours сам запускает один из плейлистов владельца между двумя часами, для магазина или клуба.

Микрофон (нужен pma-voice). Пока вы его держите, все рядом с любой колонкой этой системы слышат через неё ваш голос с эффектом звукоусиления, так же громко, как эта колонка играет музыку, и так же далеко, как её слышно. Отойдите на 4 м от микшера или микрофонной стойки, отключитесь или положите микрофон, и ваш голос снова станет обычным. Петь через систему может только её владелец (а для машины ещё и админы); выдайте другим игрокам ace zds.mic, чтобы они могли пользоваться любой системой. Ваш голос не звучит из точки, где стоит каждая колонка: голосовой чат не может разместить голос там, поэтому люди рядом с колонкой слышат вас с громкостью этой колонки. Настройки: Config.Mic.

7. Автозвук

Как игроки собирают

  1. Заезжайте в бокс установки автозвука (по умолчанию у Benny's) и нажмите E, сидя за рулём.
  2. Начните с готового комплекта (Daily thump, Competition, Trunk wall, Sound quality, Clean and hidden) или выберите детали: сабвуферы (от 8" до 18"), короба, усилители, дверные динамики, твитеры, подиумы, фальшполы, панели, оргстекло, конденсатор, второй аккумулятор, LED-лента и головное устройство.
  3. Перетащите каждую деталь на место в машине. Сабы встают в вырезы своего короба. Каждой детали можно выбрать отделку (восемь цветов), а сабам и динамикам — решётку и световое кольцо. Mirror копирует деталь на другую сторону; Fine position двигает её маленькими шагами. Пять видов камеры: Boot, Cabin, Side, Front, Top. Size: сабы бывают 8", 10", 12", 15" и 18" (все сабы в коробе одного размера, а короб строится вокруг них, до 30% больше или меньше, чем он был рассчитан); дверные динамики — 5.25", 6.5" и 6x9"; все остальные детали — от 80% до 130% с шагом 5% (головное устройство стандартного размера). Большие короба и панели стоят дороже; уменьшенная деталь ничего не стоит. У больших динамиков диффузоры ходят дальше, а больший дверной динамик играет ниже.
  4. Нажмите Test system, чтобы послушать, как сборка звучит в машине, до оплаты. Играет первая песня из Config.Library (демо-трек из комплекта, если вы его не меняли).
  5. Нажмите Install. Оплачиваются только детали, новые для этой машины; детали, оставшиеся с прошлой установки, повторно не оплачиваются.

Установка сохраняется по номерному знаку и возвращается вместе с машиной: из любого гаража, штрафстоянки или после респавна. В скрипте гаража ничего править не нужно.

Что слышат игроки

  • У каждой машины уже есть штатный звук по классу и модели: система на 4 динамика, премиальная на 10 или референсная на 13 динамиков, динамики в обтекателе на мотоциклах; у велосипедов, самолётов и поездов его нет. Установленные динамики заменяют ближайшие к ним штатные; сабы добавляются к нему.
  • Снаружи машины через кузов проходит в основном бас. Открытые двери, окна и багажник выпускают больше звука в ту сторону, куда они обращены.
  • Машина с сабами мягко покачивается на пружинах в такт басу, пока стоит или едет шагом (никогда во время езды), и все внутри чувствуют удар.
  • У магнитолы (K) есть громкость, уровень саба, фейдер и баланс.
  • Сабы, долго работающие далеко за пределами того, что позволяют их усилитель и номинал, почти на полной громкости, могут сгореть. Все рядом с машиной видят тонкую струйку дыма из этого саба и слышат глухой хлопок. Сгоревший саб перестаёт двигаться, бас проседает, а его диффузор остаётся обугленным, пока его не заменят в боксе (новый саб оплачивается; удаление следа — не бесплатный ремонт). Персонал может это показать: /soundblow в машине или soundblow <plate> в консоли сервера.

Какие машины можно собирать (Config.Install.vehicles)

  • 'owned' (по умолчанию): только машины из таблицы личного транспорта вашего framework (owned_vehicles на ESX, player_vehicles на QBCore и Qbox).
  • 'any': также машины, которыми никто не владеет (машины NPC, заспавненные, арендованные).
  • В любом случае машина другого игрока остаётся его: изменить её может только владелец, механик на смене из Config.Install.jobs или администратор. На сервере standalone любая машина считается личной.

Гаражи, номера и штрафстоянки

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

Другие скрипты звука или магнитол

ZeroDev Sound — отдельный ресурс со своими командами (/sound, /caraudio, ...), событиями и state bags транспорта, поэтому он не заменяет и не меняет другие скрипты (пока он играет в машине, он лишь выключает штатное радио GTA). Одновременная работа двух скриптов автозвука на одной машине вместе не тестировалась: используйте одну магнитолу на машину.

8. Источники музыки

Музыка воспроизводится только из аудиофайлов, которые вы добавляете в ресурс. Игроки выбирают из вашего списка; они не могут вводить ссылки, и веб-адреса никогда не воспроизводятся. Добавляйте только то аудио, которое принадлежит вам или на использование и распространение которого у вас есть права.

  • Положите файлы mp3 или ogg в zerodev-sound/web/library/ и укажите каждый в Config.Library в виде { title = '...', artist = '...', file = 'name.mp3' }. Они получают весь набор возможностей: 3D-звук, помещения и стены, салоны машин, режимы звука, EQ и конусы, которые двигаются в такт настоящему басу.
  • Config.Sources.library = false выключает библиотеку.
  • Родное автомобильное радио GTA по-прежнему работает в любой машине, пока в ней не играет ни одна песня из этого ресурса.
  • Стартовое окно показывает, сколько песен могут выбрать игроки, и предупреждает о каждой пропущенной записи (имя файла, который не mp3 и не ogg, в web/library/).
  • Обновление с 3.0.0: сохранённые песни, недавние песни и записи плейлистов, которые были ссылками, больше не показываются и не воспроизводятся. Песни из библиотеки продолжают работать.

9. Pulse Phone

Настраивать ничего не нужно. Когда на сервере работает Pulse Phone (имя ресурса phone, любая редакция):

  • На Home Screen каждого телефона появляется приложение Sound. Это тот же пульт, что и /sound: подключитесь к колонке или машине, выберите музыку, управляйте всей группой. Игроки могут удалить его и вернуть из App Hub.
  • То, что играет на подключённой колонке или в машине, с оставшимся временем, показывается в Island и на Lock Screen. Касание открывает приложение Sound.
  • Pulse Drive (экран в машине от Pulse, по умолчанию F10) показывает магнитолу машины, в которой вы сидите: песню, исполнителя и обложку, с кнопками воспроизведения, паузы, предыдущего, следующего и громкости, а также кнопкой Open для приложения Sound. Для этого нужен Pulse Phone 1.2.9 или новее; старые версии просто его не показывают.

Игроки без телефона используют /sound и K, которые делают всё то же, что и приложение.

Если вы переименовали папку телефона, добавьте эту строку в config/config.lua с её именем:

Lua
Config.PulseResource = 'phone'

10. Полиция, соседи и администраторы

Что Как Настройка
Пожаловаться на громкую музыку /noise отправляет ближайшую играющую колонку (в пределах 60 m) полиции на смене в виде мигающей метки на 3 минуты. Одна жалоба от игрока раз в 2 минуты. Config.Police.complaints, complaintRange
Выключить колонку Полиция на смене: наведитесь на колонку > Turn off (police) или вкладка Tune на пульте > Police. В пределах 12 m. Config.Police.canSilence, silenceMinutes (15)
Изъять колонку Полиция на смене, в пределах 4 m: наведитесь > Seize (police) или Tune > Police > Seize. Колонка переходит к офицеру. Config.Police.canSeize
Полицейские работы Игроки с этими работами, на смене Config.Police.jobs
Сломанные колонки Выстрел по поставленной колонке ломает её: она трещит и замолкает. Её чинит Speaker Repair Kit (продаётся в магазине в разделе Accessories): используйте ремкомплект рядом с ней. Config.Damage
Список для админа /soundadmin: все колонки на сервере, что они играют и кому принадлежат, с кнопками для метки на карте, остановки музыки или удаления колонки. Config.AdminAce (zerodev.sound.admin)
Выдать предмет Консоль сервера: givespeaker <player id> <item name>

11. Языки

Скрипт поставляется на тех же 25 языках, что и Pulse Phone. Язык задаётся в config/config.lua:

Код Язык Код Язык Код Язык
en Английский hu Magyar pt-PT Português (Portugal)
ar العربية it Italiano ro Română
bs Bosanski ja 日本語 ru Русский
cs Čeština ko 한국어 sl Slovenščina
da Dansk nb Norsk bokmål sv Svenska
de Deutsch nl Nederlands th ไทย
es Español pl Polski tr Türkçe
fr Français pt-BR Português (Brasil) uk Українська
zh-CN 简体中文

Например, Config.Locale = 'de'. По умолчанию стоит 'auto', и язык следует за Pulse Phone: сервер берёт Config.Locale из Pulse, а каждый игрок получает Sound на языке, который выбрал в телефоне. Без Pulse всё на английском. Игровые сообщения, подсказки клавиш, названия предметов и название клавиши магнитолы находятся в locales/<code>.lua; интерфейс (пульт, автомагнитола, магазин, установщик, приложение для Pulse) — в locales/<code>_ui.lua. Всё, чего не хватает, показывается на английском.

Чтобы изменить строку, отредактируйте её в файле этого языка. Оставляйте все %s, %d, %.1f, %% и ~a~ как есть. Чтобы добавить свой язык, скопируйте locales/en.lua в locales/xx.lua, замените Locales['en'] на Locales['xx'] (в обоих местах), переведите текст в кавычках и задайте Config.Locale = 'xx'. В locales/ui_strings.txt перечислены все ключи интерфейса для xx_ui.lua.

12. Устранение неполадок

Игроки не могут использовать предметы колонок

  • ox_inventory: записи должны быть внутри ox_inventory/data/items.lua вместе со строкой client, и после вставки ox_inventory нужно перезапустить. Папка должна по-прежнему называться zerodev-sound (записи вызывают zerodev-sound.useItem).
  • QBCore / ESX: zerodev-sound должен запускаться после вашего framework в server.cfg.
  • codem-inventory на QBCore: выполните собственный шаг codem-inventory, который направляет на него QBCore.Functions.UseItem.
  • Без инвентаря: колонки — не предметы. Игроки открывают /sound и нажимают Set up в разделе Your speakers.

Нет картинок предметов

  • ox_inventory: копировать ничего не нужно; путь к картинке указывает на zerodev-sound. Если картинки пустые, проверьте строку записи image = 'nui://zerodev-sound/...' и имя папки.
  • Другие инвентари: прочитайте строку консоли Copy ... into ...: в ней перечислены недостающие картинки и папка, куда их положить. Скопируйте их из zerodev-sound/web/img/items/ и перезапустите инвентарь.

Так задумано: игроки выбирают только из вашей библиотеки. Добавьте песню в Config.Library (раздел 8).

Звука нет совсем

  • Встроенный браузер FiveM запускает звук без клика, поэтому игрокам никогда не нужно ничего нажимать, чтобы «разрешить» звук. Если один игрок ничего не слышит, а другие слышат, проверьте FiveM в его микшере громкости Windows.
  • Проверьте колонку на вкладке Speakers пульта: она может быть выключена или помечена Broken.
  • Возможно, её выключила полиция (на Config.Police.silenceMinutes), или тихие часы ограничивают громкость (Config.QuietHours).
  • Игрок слышит не больше Config.Streaming.maxAudibleSessions разных песен одновременно (6), сначала ближайшие.
  • Test system в установщике молчит, если Config.Library пуст или Config.Sources.library = false: он воспроизводит первую песню из библиотеки.

Магазина нет на месте

  • Config.Shop.enabled должен быть true.
  • Продавец и стенд появляются, только когда игрок находится примерно в 70 m от Config.Shop.locations, и только на экране этого игрока. Проверьте заданные координаты.
  • С ox_target или qb-target наведитесь на продавца. Без них встаньте у продавца: E Browse speakers.

Колонка отображается как обычная колонка GTA или не отображается вовсе

Папки stream/ нет или она переименована, или игрок зашёл до запуска ресурса. Перезапустите сервер и переподключитесь.

Сообщения автозвука и что они означают

Сообщение Почему Решение
Drive into a car audio bay to build. Сборка где угодно выключена, а машина не в боксе. Заезжайте в бокс (Config.Install.bays) или задайте Config.Install.anywhere = true.
Stand next to your car to build its sound system. Сборка где угодно включена, а вы дальше 8 m от машины, или /caraudio не нашёл машину в пределах 4 m. Встаньте у машины или сядьте в неё.
Stop the car first. Машина движется. Остановитесь.
Car audio can only be fitted to a car you own. Config.Install.vehicles = 'owned', а этого номера нет в вашей таблице личного транспорта. Также показывается всем, кроме администраторов, если эту таблицу не удаётся прочитать: тогда консоль показывает красную строку could not read the owned-vehicles table. Используйте личную машину, задайте 'any' или исправьте ошибку базы данных, которую называет консоль.
Only the owner can change this car's audio. Машина принадлежит другому игроку. Также показывается, когда Config.Install.anyone = false, а у игрока нет работы на смене из Config.Install.jobs. Собирает владелец, механик на смене или администратор.
Not enough money. Новые детали стоят больше, чем у игрока есть на Config.Install.account. Уберите детали или задайте Config.Install.chargeParts = false.
A subwoofer blew. It needs replacing. Сабы слишком долго перегружали почти на полной громкости. Замените саб в боксе; поможет более мощный усилитель.

Полиция не видит своих действий

Добавьте названия своих полицейских работ в Config.Police.jobs. Игроки должны быть на смене.

13. Обновление

Переход с 1.x на 2.0: прочитайте UPGRADING.md. Между версиями 2.x:

  1. Сделайте резервную копию папки config/, папки locales/, если вы её переводили, и всех песен, которые вы добавили в web/library/.
  2. Остановите сервер. Замените папку zerodev-sound новой (имя не меняйте).
  3. Верните свои файлы config/. Если в примечаниях к обновлению упомянуты новые настройки, скопируйте эти строки из новых файлов в свои.
  4. Запустите сервер и прочитайте консоль. Новые предметы, если они есть, выводятся для вашего инвентаря.

Поставленные колонки, установки в машинах и плейлисты хранятся в базе данных (zds_speakers, zds_car_builds, zds_playlists, zds_stash), и обновление их не затрагивает.

Откат: держите предыдущую папку zerodev-sound вне resources, пока новая версия не заработает нормально, и сделайте бэкап базы данных перед обновлением. Чтобы откатиться, остановите сервер, верните предыдущую папку и свой config/ и запустите его. Откат с 3.0 на 2.x на той же базе данных не тестировался, поэтому, если что-то выглядит не так, восстановите бэкап базы.

Переведено с английского. Если что-то здесь расходится с английской страницей, верна английская страница. English