Exports & Evenements
HZ-AudioMixer fournit une API client complete pour integrer le mixeur (ou votre propre interface personnalisee) dans n'importe quelle autre ressource. Tous les exports sont sous le nom de ressource HZ-AudioMixer.
Le moteur audio interne (mapping, activation de scene, persistance KVP) reste dans le client.lua chiffre. Les exports sont la surface publique — tout le reste est scelle par Asset Escrow.
Controle de l'interface
open()
Ouvre l'interface Ghost Protocol du mixeur.
exports['HZ-AudioMixer']:open()
close()
Ferme l'interface du mixeur.
exports['HZ-AudioMixer']:close()
toggle()
Bascule l'interface du mixeur (ouvre/ferme).
exports['HZ-AudioMixer']:toggle()
isOpen()
Retourne true si l'interface du mixeur est actuellement ouverte.
local open = exports['HZ-AudioMixer']:isOpen()
API de lecture
getCategories()
Retourne un tableau des IDs de categories actives.
local ids = exports['HZ-AudioMixer']:getCategories()
-- { 'weapons', 'vehicles', 'ambience', 'weather', 'speech', 'peds', 'scripted', 'music', 'radio' }
getCategoriesData()
Retourne les metadonnees completes des categories — utilisez ceci pour construire votre propre interface. Les libelles et descriptions sont pre-traduits selon Config.Locale.
local data = exports['HZ-AudioMixer']:getCategoriesData()
Structure retournee :
{
{
id = 'weather',
label = 'Meteo', -- localise
desc = 'Pluie, tonnerre, vent', -- localise
icon = 'weather',
value = 70, -- 0-100 (precision 1%)
min = 0,
max = 100,
step = 1,
},
-- ... 8 autres
}
getVolume(categoryId)
Retourne le volume actuel d'une categorie (0–100), ou nil si l'ID est invalide.
local vol = exports['HZ-AudioMixer']:getVolume('weather') -- ex: 70
getAllVolumes()
Retourne une map { categoryId = volume } pour toutes les categories actives.
local volumes = exports['HZ-AudioMixer']:getAllVolumes()
-- { weapons = 100, vehicles = 80, weather = 30, ... }
API d'ecriture
setVolume(categoryId, value)
Definit le volume d'une categorie. Sauvegarde dans le KVP, applique le changement audio immediatement et declenche l'evenement volumeChanged.
-- Les volumes vont de 0 a 100 (precision 1%)
local ok = exports['HZ-AudioMixer']:setVolume('weather', 30)
| Param | Type | Description |
|---|---|---|
categoryId | string | Un des 9 IDs de categorie (voir getCategories()) |
value | number | 0–100 (borne). 0 = muet, 100 = volume max |
true en cas de succes, false si la categorie est invalide ou desactivee dans Config.Categories.
setVolumes(map)
Definit plusieurs volumes a la fois. Ignore les cles invalides silencieusement. Retourne le nombre de changements appliques avec succes.
local count = exports['HZ-AudioMixer']:setVolumes({
weather = 30,
weapons = 100,
vehicles = 70,
})
resetAll()
Reinitialise chaque categorie active a Config.DefaultVolume et sauvegarde dans le KVP.
exports['HZ-AudioMixer']:resetAll()
Evenements
hz-audiomixer:volumeChanged
Declenche a chaque changement de volume (depuis n'importe quelle source : interface integree, exports, resetAll). Utilisez-le pour synchroniser votre interface personnalisee.
AddEventHandler('hz-audiomixer:volumeChanged', function(categoryId, value)
print(('%s regle a %d%%'):format(categoryId, value))
end)
| Argument | Type | Description |
|---|---|---|
categoryId | string | La categorie dont le volume a change |
value | number | La nouvelle valeur (0–100) |
Exemples d'integration
Ouvrir le mixeur depuis un menu pause personnalise
-- Dans votre script de menu pause
RegisterCommand('monmenu_ouvrir_mixer', function()
exports['HZ-AudioMixer']:open()
end)
Construire vos propres curseurs dans votre NUI
Cote Lua :RegisterNUICallback('monmenu:getMixerData', function(_, cb)
cb({
categories = exports['HZ-AudioMixer']:getCategoriesData()
})
end)
RegisterNUICallback('monmenu:setMixerVolume', function(data, cb)
exports['HZ-AudioMixer']:setVolume(data.id, data.value)
cb('ok')
end)
-- Pousser les mises a jour vers votre NUI quand le volume change
AddEventHandler('hz-audiomixer:volumeChanged', function(id, value)
SendNUIMessage({
action = 'audioVolumeUpdate',
id = id,
value = value,
})
end)
Cote HTML/JS :
// A l'ouverture du menu — recuperer les categories
fetch('https://mon-pausemenu/monmenu:getMixerData', {
method: 'POST',
body: '{}'
})
.then(r => r.json())
.then(data => {
data.categories.forEach(cat => {
// cat = { id, label, desc, icon, value (0-100), min:0, max:100, step:1 }
renderSlider(cat)
})
})
// Au changement de curseur
slider.oninput = (e) => {
fetch('https://mon-pausemenu/monmenu:setMixerVolume', {
method: 'POST',
body: JSON.stringify({
id: 'weather',
value: parseInt(e.target.value, 10),
}),
})
}
// Ecouter les mises a jour externes
window.addEventListener('message', (e) => {
if (e.data.action === 'audioVolumeUpdate') {
const slider = document.querySelector([data-id="${e.data.id}"])
if (slider) slider.value = e.data.value
}
})
Couper les armes pendant une cinematique
local backup = exports['HZ-AudioMixer']:getVolume('weapons')
exports['HZ-AudioMixer']:setVolume('weapons', 0)
PlayCutscene(...)
Wait(cutsceneDuration)
exports['HZ-AudioMixer']:setVolume('weapons', backup)
Mode streamer avec coupure rapide
RegisterCommand('streamerMode', function()
exports['HZ-AudioMixer']:setVolumes({
music = 0,
radio = 0,
})
print('Mode streamer : musique + radio coupes')
end)
IDs de categories disponibles
| ID | Description |
|---|---|
weapons | Armes a feu, explosions, mecanismes d'armes |
vehicles | Moteurs, klaxons, sirenes, helicopteres |
ambience | Oiseaux, insectes, bruit de fond urbain |
weather | Pluie, tonnerre, vent |
speech | Voix de PNJ, dialogues scriptes |
peds | Pas, vetements, sons de pietons |
scripted | Alarmes, TV, sons de mission |
music | Musique de jeu, musique ambiante |
radio | Radio dans les vehicules |
