Modèles, écrans et presets
Ajouter des modèles utilisables comme lecteurs, afficher la vidéo sur un renderTarget ou un scaleform, définir des presets et placer des lecteurs par défaut qui démarrent avec PMMS.
But : choisir quelles entités servent de lecteurs, où s’affiche la vidéo, et quels médias sont proposés.
Fichier : pmms/config.lua, ou en jeu avec la permission pmms.manage.
Ajouter un modèle
Chaque entrée de Config.models est indexée par le hash du modèle (syntaxe `nom` de CfxLua) :
Config.models = {
[`prop_boombox_01`] = {
label = "Boombox"
},
[`prop_tv_flat_01`] = {
label = "TV",
renderTarget = "tvscreen"
},
[`pbus2`] = {
attenuation = { sameRoom = 1.5, diffRoom = 6 },
range = 100,
isVehicle = false
},
}
| Champ | Effet |
|---|---|
label |
Nom affiché dans le panneau. |
renderTarget |
Nom de la cible de rendu de l’écran du modèle : la vidéo s’y affiche via DUI. Sans ce champ, la vidéo s’affiche dans un cadre NUI au-dessus de l’entité. |
filter, volume, attenuation, diffRoomVolume, range |
Réglages proposés par défaut pour ce modèle. |
isVehicle |
Traiter l’entité comme un véhicule (l’extérieur compte comme une autre pièce) ou non. Absent : déterminé automatiquement. pbus2 et blimp3 sont livrés à false, pour être entendus de l’extérieur comme des objets. |
scaleform |
Écran scaleform associé (position, rotation, échelle). |
Résultat : après restart pmms, l’entité apparaît dans le panneau quand vous êtes à moins de Config.maxDiscoveryDistance.
Le nom du renderTarget dépend du modèle : il doit correspondre à une cible de rendu réellement présente dans le modèle. Un nom faux laisse l’écran noir sans erreur explicite. Les 102 écrans livrés utilisent par exemple tvscreen, ex_tvscreen, cinscreen, big_disp, tablet ou npcphone.
Enregistrer un modèle en jeu
Avec pmms.manage, le panneau permet d’enregistrer les réglages de l’entité ciblée pour le modèle ou pour cette entité. En console serveur :
pmms_add prop_boombox_01 Enceinte
Ces réglages sont écrits dans models.json (modèles) et defaultMediaPlayers.json (entités), et rechargés au démarrage par-dessus config.lua. Les exports addModelPermanently et addEntityPermanently font la même chose depuis un script (voir API).
Presets
Un preset est un média prédéfini, choisi par son nom :
Config.presets = {
['accueil'] = { url = 'https://exemple.fr/musique/accueil.ogg', title = 'Musique d’accueil', filter = false, video = false },
['jt'] = { url = 'https://www.youtube.com/watch?v=XXXXXXXXXXX', title = 'Journal', video = true },
}
exemple.fr et l’identifiant YouTube sont des exemples. url est obligatoire ; title, filter et video sont facultatifs. Le joueur tape /pmms_play accueil, ou /pmms_play random pour un preset au hasard ; /pmms_presets les liste dans le chat.
Sans la permission pmms.customUrl, un joueur ne peut jouer que des presets.
Lecteurs par défaut
Les lecteurs de Config.defaultMediaPlayers sont connus du serveur dès le démarrage :
Config.defaultMediaPlayers = {
{
position = vector3(-1388.5, -618.2, 30.8),
label = "Bar — enceinte",
spawn = true,
model = `prop_boombox_01`,
rotation = vector3(0.0, 0.0, 120.0),
url = 'accueil',
volume = 60,
loop = false,
filter = false,
locked = true,
range = 25
},
}
Les coordonnées sont un exemple.
| Champ | Effet |
|---|---|
position |
Obligatoire. Position de l’entité ; sert aussi d’identifiant du lecteur. |
spawn |
true : l’entité est créée autour des joueurs à moins de Config.defaultMediaPlayerSpawnDistance. Absent : une entité doit déjà exister à cette position exacte. |
model, rotation, invisible |
Entité créée quand spawn = true ; model absent : Config.defaultModel. |
url |
URL, nom de preset ou random. Présent : le média démarre avec la ressource. |
title, volume, offset, loop, filter, video, videoSize, muted, attenuation, diffRoomVolume, range |
Réglages du média (voir options de lecture). |
locked |
true : seuls les joueurs avec pmms.manage peuvent contrôler ce lecteur. |
scaleform |
Écran scaleform : { position, rotation, scale, standalone, attached }. |
Résultat : au démarrage de pmms, l’enceinte apparaît au bar et joue le preset accueil, verrouillée pour les joueurs sans pmms.manage.
Écran scaleform libre
Pour afficher une vidéo sur un mur ou un panneau sans écran dans le modèle, utilisez un scaleform. Le scaleform livré est pmms_texture_renderer (stream/pmms_texture_renderer.gfx). Le panneau propose « Ma position » pour remplir position et rotation depuis votre personnage ; l’export serveur startScaleform fait de même par script.
Erreurs fréquentes
- Entité absente du panneau : modèle non listé, entité à plus de
maxDiscoveryDistance, ou joueur sanspmms.anyEntity. - Lecteur par défaut sans effet avec
spawnabsent : aucune entité n’existe exactement àposition. - Écran noir :
renderTargeterroné pour ce modèle, ou page DUI injoignable. - Réglages perdus après mise à jour :
models.jsonetdefaultMediaPlayers.jsonécrasés par les fichiers vides de la nouvelle archive.