Документация ZeroDev Sound
ZeroDev Sound: руководство по установке
Этот ресурс не содержит и не предоставляет никаких сторонних интеграций аудио или музыки. Музыка воспроизводится только из аудиофайлов, которые владелец сервера добавляет в ресурс, и через встроенное радио 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 и инвентаря:
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, дистанционная остановка и удаление):
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:
['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:
['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.
В игре (пять проверок)
- На карте есть метка ZeroDev Sound на Legion Square и метка Car audio bay у Benny's.
- В магазине продавец стоит у стенда с выставленными колонками. Наведитесь на продавца (или нажмите E, если нет target-ресурса) и купите Roam Portable Speaker.
- Используйте её из инвентаря. Она появляется у вас в руках. Нажмите E, откройте Library и включите Night Drive (демо-трек, который идёт со скриптом). Люди вокруг вас её слышат.
- Сядьте в машину. Первые несколько раз в углу экрана написано, какая клавиша открывает автомагнитолу (по умолчанию K).
- Заезжайте в бокс установки автозвука за рулём и нажмите 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. Автозвук
Как игроки собирают
- Заезжайте в бокс установки автозвука (по умолчанию у Benny's) и нажмите E, сидя за рулём.
- Начните с готового комплекта (Daily thump, Competition, Trunk wall, Sound quality, Clean and hidden) или выберите детали: сабвуферы (от 8" до 18"), короба, усилители, дверные динамики, твитеры, подиумы, фальшполы, панели, оргстекло, конденсатор, второй аккумулятор, LED-лента и головное устройство.
- Перетащите каждую деталь на место в машине. Сабы встают в вырезы своего короба. Каждой детали можно выбрать отделку (восемь цветов), а сабам и динамикам — решётку и световое кольцо. Mirror копирует деталь на другую сторону; Fine position двигает её маленькими шагами. Пять видов камеры: Boot, Cabin, Side, Front, Top. Size: сабы бывают 8", 10", 12", 15" и 18" (все сабы в коробе одного размера, а короб строится вокруг них, до 30% больше или меньше, чем он был рассчитан); дверные динамики — 5.25", 6.5" и 6x9"; все остальные детали — от 80% до 130% с шагом 5% (головное устройство стандартного размера). Большие короба и панели стоят дороже; уменьшенная деталь ничего не стоит. У больших динамиков диффузоры ходят дальше, а больший дверной динамик играет ниже.
- Нажмите Test system, чтобы послушать, как сборка звучит в машине, до оплаты. Играет первая песня из
Config.Library(демо-трек из комплекта, если вы его не меняли). - Нажмите 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 с её именем:
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:
- Сделайте резервную копию папки
config/, папкиlocales/, если вы её переводили, и всех песен, которые вы добавили вweb/library/. - Остановите сервер. Замените папку
zerodev-soundновой (имя не меняйте). - Верните свои файлы
config/. Если в примечаниях к обновлению упомянуты новые настройки, скопируйте эти строки из новых файлов в свои. - Запустите сервер и прочитайте консоль. Новые предметы, если они есть, выводятся для вашего инвентаря.
Поставленные колонки, установки в машинах и плейлисты хранятся в базе данных (zds_speakers, zds_car_builds, zds_playlists, zds_stash), и обновление их не затрагивает.
Откат: держите предыдущую папку zerodev-sound вне resources, пока новая версия не заработает нормально, и сделайте бэкап базы данных перед обновлением. Чтобы откатиться, остановите сервер, верните предыдущую папку и свой config/ и запустите его. Откат с 3.0 на 2.x на той же базе данных не тестировался, поэтому, если что-то выглядит не так, восстановите бэкап базы.