Intégrations
Brancher vos notifications, configurer les logs Discord et le webhook, traduire les textes, héberger la page DUI, servir des médias locaux avec httpmanager et régler les émetteurs sonores.
But : adapter PMMS à votre serveur sans toucher aux fichiers protégés.
Fichiers : integrations/client.lua, integrations/server.lua, config.server.lua, locales.lua, staticEmitters.lua et server.cfg.
Notifications
Toutes les notifications de PMMS passent par PMMSBridge.notify(args) dans integrations/client.lua. Par défaut, elle les affiche dans l’interface NUI de PMMS. Les champs utilisés sont args.text, args.title (nom de la ressource par défaut) et args.duration (Config.notificationDuration par défaut).
Exemple avec ox_lib :
function PMMSBridge.notify(args)
if type(args) ~= "table" then
args = {}
end
lib.notify({
title = args.title or "Radio",
description = args.text,
duration = args.duration or Config.notificationDuration
})
end
Ajoutez alors '@ox_lib/init.lua' aux shared_scripts du manifeste, ou remplacez lib.notify par l’export de votre script de notifications.
Résultat : « No media player nearby » et les messages d’erreur s’affichent dans votre système de notifications. Config.showNotifications = false masque la plupart d’entre elles (voir Configuration).
Logs Discord
Le serveur envoie un embed « Lien PMMS lancé » à chaque lecture acceptée (« Demande de lecture »), à chaque ajout en file d’attente et à chaque lancement par le serveur ou un export (« Lancement serveur/export »), y compris les lecteurs par défaut au démarrage et les copies de lecteurs.
- Dans
server.cfg, aprèsexec @pmms/permissions.cfg:
set pmms_webhook "https://discord.com/api/webhooks/…"
- Dans
config.server.lua, réglezlogsEnabled,logName,logColoretincludeIdentifiers(voir Configuration).
L’embed contient l’action, le nom et l’ID du joueur, le handle, le titre, l’URL, la position, le volume, la vidéo et, si includeIdentifiers = true, tous les identifiants du joueur. Les libellés de l’embed sont écrits en français dans integrations/server.lua ; modifiez ce fichier pour changer la mise en forme.
Textes
locales.lua associe chaque texte d’origine à sa traduction. Modifiez la valeur à droite, gardez la clé à gauche et les marqueurs %s, %d :
["No media player nearby"] = "Aucun lecteur à proximité",
["You must specify a URL to play."] = "Indiquez une URL à lire.",
Les valeurs livrées reprennent les textes d’origine, majoritairement en anglais. Les textes du panneau (boutons, libellés) sont dans ui/index.html et ui/script.js.
Page DUI
Pour afficher une vidéo sur un écran (modèle avec renderTarget ou scaleform), chaque client ouvre un navigateur DUI sur une page web :
- média en
https://:Config.dui.urls.https, livré surhttps://pmms-dui.mrpoulpiii.fr; - média en
http://:Config.dui.urls.https’il est défini, sinonhttp://<adresse du serveur>/pmms/dui/, que l’archive ne fournit pas.
Si la page ne répond pas dans Config.dui.timeout (30 s), F8 affiche « Failed to initialize DUI browser » et l’écran reste noir. Le code de cette page n’est pas dans l’archive.
Héberger votre propre page : la page DUI de la ressource d’origine est publiée par kibook (dépôt kibook/pmms-dui). Déployez-la sur votre hébergement HTTPS, puis :
Config.dui.urls.https = "https://dui.mon-serveur.fr"
dui.mon-serveur.fr est un exemple. Vérifiez que cette page est compatible avec votre version de PMMS avant de basculer.
httpmanager et médias locaux
pmms déclare httpmanager comme gestionnaire HTTP de la ressource : les fichiers placés dans pmms/http/ sont servis à l’adresse http://<adresse du serveur>/pmms/…. Un média dont l’URL ne commence ni par http:// ni par https:// est cherché dans pmms/http/media/. Ce dossier n’existe pas dans l’archive : créez-le pour servir vos propres fichiers.
/pmms_play annonce.ogg
lit pmms/http/media/annonce.ogg. Le nom de fichier n’étant pas une URL autorisée, il faut pmms.anyUrl, un motif adapté dans Config.allowedUrls, ou un preset dont l’url est ce nom. Ces médias passent en http:// : sur un écran, ils demandent une page DUI http (voir plus haut).
httpmanager publie aussi, sur sa propre adresse, une page password/ et une route de génération de hash utilisées par ses fonctions d’authentification.
Émetteurs sonores
staticEmitters.lua liste 301 émetteurs sonores de la carte GTA (musique de bars, d’ambiance…). Avec Config.autoDisableStaticEmitters = true, ils sont coupés quand un média est audible, puis rétablis selon leur valeur enabled. Passez enabled = false à un émetteur pour qu’il reste coupé en permanence.
Services externes contactés
| Service | Quand | Par qui |
|---|---|---|
Page DUI (Config.dui.urls.https) |
Vidéo https:// sur un écran |
Chaque client |
| Adresse du média | Chaque lecture | Chaque client à portée |
redm.khzae.net (bruit de phonographe) |
Filtre activé sur RedM | Chaque client à portée |
| Webhook Discord | Logs activés | Le serveur |
Erreurs fréquentes
- Notifications en double : votre
PMMSBridge.notifyappelle votre système et leSendNUIMessaged’origine. libest nil dansintegrations/client.lua: ox_lib n’est pas chargé par le manifeste de pmms.- Aucun log : webhook vide, déclaré avant le
exec, oulogsEnabled = false. - Écran noir avec un média
http://: aucune page DUIhttpn’est disponible.