ZeroDev Sound 文档

ZeroDev Sound:安装指南

适用于 ZeroDev Sound 3.0.1阅读约 27 分钟更新于

本资源不包含也不提供任何第三方音频或音乐集成。音乐仅从服务器所有者添加到资源中的音频文件以及 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 文件。
框架 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 key,不需要 Google 账户。

Linux 服务器

Linux 服务器:请使用 Recommended 服务器 artifact,而不是 Latest。在 FiveM 服务器下载页面(docs.fivem.net/docs/server-download/)选择 Linux 和 Recommended 更新分支。有一台使用最新 Linux artifact 的服务器在加载时崩溃(FXServer 打印了 /proc/self/maps 转储),换成推荐版 artifact 后就解决了。这是我们收到的唯一一份 Linux 报告;我们自己还没有在 Linux 服务器上运行过 ZeroDev Sound。

Linux 服务器:请使用 Recommended 服务器 artifact,而不是 Latest。在 FiveM 服务器下载页面(docs.fivem.net/docs/server-download/)选择 Linux 和 Recommended 更新分支。有一台使用最新 Linux artifact 的服务器在加载时崩溃(FXServer 打印了 /proc/self/maps 转储),换成推荐版 artifact 后就解决了。这是我们收到的唯一一份 Linux 报告;我们自己还没有在 Linux 服务器上运行过 ZeroDev Sound。

在 standalone 服务器(无框架)上一切免费:商店和车辆部件都不收费。

2. 安装

第 1 步:放入文件夹。把 zerodev-sound 文件夹放进你的 resources 文件夹(放在任意子文件夹中都可以,例如 resources/[zerodev]/zerodev-sound)。保持文件夹名为 zerodev-sound:ox_inventory 的物品条目通过这个名称调用它。

第 2 步:把它加入 server.cfg,放在数据库、框架和背包之后:

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 背包(不带 ox 的 ESX Legacy) 无需操作。物品会在启动时添加到 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) 无需操作。物品会在启动时添加到 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 无需操作。物品会自动添加到 QBCore 的共享物品或 ESX 的 items 表中。 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 可再次打印):数据库和结构、框架、金钱、背包和物品、车库表、交互目标、Pulse Phone、模型、改装间,以及在游戏内修改过的设置。每一行不是 OK 的都会说明该怎么做;docs/SETUP.md 中有示例,docs/TROUBLESHOOTING.md 解释了每一行。

  • 框架一行会显示找到了什么。如果不对,请设置 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. 地图上 Legion Square 有一个 ZeroDev Sound 图标,Benny's 有一个 Car audio bay 图标。
  2. 在商店里,一名店员站在展示音箱的柜台旁。对准店员(没有 target 资源时按 E),购买一个 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 中。

你想做的 设置
强制指定框架或背包 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(ped 模型)。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,或使用 Pulse Phone 中的 Sound 应用
车载音响 坐在车里时按 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)。拿着麦克风时,该系统任意一个音箱附近的人都会通过音箱听到你的声音,带有扩音(PA)效果,音量与该音箱播放音乐的音量相同,传播距离也相同;离开调音台或麦克风架 4 m、断开连接或放回麦克风后,你的声音就恢复正常。只有系统的所有者(车辆的话还有管理员)可以通过它唱歌;给其他玩家 zds.mic ace 即可让他们使用任何系统。你的声音并不是从每个音箱的位置发出的:语音聊天无法把声音放到那里,所以音箱附近的人会以该音箱的音量听到你。设置: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 以小步移动它。五个镜头视角:后备箱、车厢、侧面、前方、顶部。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'(默认):仅限你框架已拥有车辆表中的车(ESX 上为 owned_vehicles,QBCore 和 Qbox 上为 player_vehicles)。
  • 'any':也包括无人拥有的车(NPC 车、刷出的车、租赁车)。
  • 无论哪种设置,属于其他玩家的车仍归其所有:只有车主、Config.Install.jobs 中的在岗技师或管理员可以改动它。在 standalone 服务器上,所有车都算作已拥有。

车库、车牌和扣押场

  • 车牌会去掉首尾空格并转为大写后再匹配,所以会补空格或改变大小写的车库仍能匹配上。
  • 使用假车牌或改过车牌的车,在恢复其保存的车牌之前找不到自己的改装。
  • 只存在于某个玩家屏幕上的车(车库预览、部分展厅车辆)永远无法改装:对其他人来说它们不是真正的车。

其他音响或车载音响脚本

ZeroDev Sound 是独立的资源,有自己的命令(/sound、/caraudio、...)、事件和车辆 state bag,所以它不会替换或改动其他脚本(在车内播放时,它只会关闭 GTA 自带的车载电台)。在同一辆车上同时运行两个车载音响脚本的情况尚未一起测试过:每辆车请只用一套音响。

8. 音乐来源

音乐只会从你添加到资源中的音频文件播放。玩家从你的列表中选择;无法 输入链接,也绝不会播放任何网址。请只添加你自己拥有、或有权使用和 分发的音频。

  • 把 mp3 或 ogg 文件放进 zerodev-sound/web/library/,并在 Config.Library 中按 { title = '...', artist = '...', file = 'name.mp3' } 的格式逐个列出。它们可以获得完整体验:3D 音效、房间 和墙壁、车内空间、音效模式、EQ,以及随真实低音律动的音锥。
  • Config.Sources.library = false 会关闭音乐库。
  • 只要这个资源的歌曲没有在车里播放,GTA 自带的车载电台在任何车里仍然可用。
  • 启动框会显示玩家可以选择多少首歌,并对每个被跳过的条目发出警告(web/library/ 中 不是 mp3 或 ogg 的文件名)。
  • 从 3.0.0 更新:原来是链接的已保存歌曲、最近播放的歌曲和播放列表条目将不再 显示或播放。音乐库中的歌曲仍然正常。

9. Pulse Phone

无需设置。当 Pulse Phone 在服务器上运行时(资源名称 phone,任一版本):

  • 每部手机的主屏幕上都会有一个 Sound 应用。它与 /sound 是同一个遥控器:连接音箱或车辆、选歌、控制整个联动组。玩家可以删除它,也可以从 App Hub 重新获取。
  • 已连接的音箱或车辆正在播放的内容及剩余时间,会显示在 Island 和锁屏上。点一下即可打开 Sound 应用。
  • Pulse Drive(Pulse 的车载屏幕,默认 F10)会显示你所坐车辆的音响:歌曲、艺人和封面,带播放、暂停、上一首、下一首和音量,以及一个打开 Sound 应用的 Open 按钮。这需要 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(在商店的配件分类中出售)可以修好它:在它旁边使用维修包。 Config.Damage
管理员列表 /soundadmin:服务器上的每个音箱、正在播放什么以及归谁所有,带有设置路径点、停止音乐或移除音箱的按钮。 Config.AdminAce (zerodev.sound.admin)
发放物品 服务器控制台:givespeaker <player id> <item name>

11. 语言

本脚本提供与 Pulse Phone 相同的 25 种语言。在 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:服务器使用 Pulse 的 Config.Locale,每位玩家看到的 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 必须在 server.cfg 中排在你的框架之后启动。
  • QBCore 上的 codem-inventory:完成 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 的内置浏览器无需点击即可播放声音,所以玩家永远不需要按任何东西来“允许”音频。如果某位玩家听不到而其他人能听到,请检查其 Windows 音量合成器中的 FiveM。
  • 在遥控器的 Speakers 标签页中检查该音箱:它可能已关闭,或显示 Broken。
  • 可能被警察关闭了(持续 Config.Police.silenceMinutes),或安静时段正在限制音量(Config.QuietHours)。
  • 一名玩家同时最多听到 Config.Streaming.maxAudibleSessions 首不同的歌(6 首),按距离由近到远。
  • 安装界面中的 Test system 在 Config.Library 为空或设置了 Config.Sources.library = false 时没有声音:它播放的是曲库中的第一首歌。

商店不见了

  • Config.Shop.enabled 必须为 true。
  • 店员和柜台只在玩家距离 Config.Shop.locations 约 70 m 以内时出现,并且只显示在该玩家的屏幕上。请检查你设置的坐标。
  • 有 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