Configuration
Tous les paramètres se trouvent dans hz_television/config.lua. Cette page couvre chaque section — général, affichage, placement, DashScreen, panneaux d'affichage, chaînes, localisation.
config.lua de HZ-Television ne contient plus de section Bridge.Général
Config.Locale = 'en' -- 'en' | 'fr' | 'es' | 'de'
Config.Debug = false -- logs console detailles
Permissions
Config.Permissions = {
ConfiguratorCommand = 'admin', -- /tvcfg
BillboardCommand = 'admin', -- /billboard
UseTV = 'everyone', -- interagir avec n'importe quelle TV
PlaceTV = 'everyone', -- placer depuis l'inventaire
}
| Format | Signification |
|---|---|
'everyone' | tout le monde peut utiliser |
'admin' | admins framework / ACE uniquement |
'job:police' | restriction à un seul job |
'job:ambulance,police' | restriction multi-jobs (séparés par virgule) |
Affichage & Audio
Config.Display = {
MaxSoundDistance = 15.0, -- metres ; portee max pour entendre la TV
MinSoundDistance = 2.0, -- metres ; zone de volume maximum
DefaultVolume = 0.5, -- 0.0 – 1.0
RenderDistance = 50.0, -- metres ; coupe le rendu au-dela
DefaultRange = 25.0, -- portee de detection (v3.1+)
InteractionMode = 'raycast', -- 'raycast' (curseur libre) | 'camera' (verrouille)
RaycastMaxDistance = 5.0, -- augmente auto a distance-cam x 2 sur les grands props
SpritePolyScaleMultiplier = 32.0, -- facteur d'echelle de rendu interne
ClockMode = 'game',-- 'game' | 'real'
}
Le volume diminue linéairement entre MinSoundDistance (volume max) et MaxSoundDistance (silence).
Placement TV & Protection abandon
Config.Placer = {
Enabled = true,
Persistence = true, -- necessite oxmysql
-- Protection abandon (v3.4)
MaxPerPlayer = 0, -- 0 = illimite ; N = limite stricte par identifiant
AutoCleanupDays = 0, -- 0 = desactive ; N = suppression auto apres N jours d'inactivite
AutoCleanupInterval = 6, -- heures entre les cycles de nettoyage (0 = au demarrage uniquement)
CleanupAdminPermission = 'admin',-- permission ACE pour /tvclean
-- Protection route (v3.4)
BlockOnRoad = false, -- true = apercu rouge + blocage Entree quand sur une route
-- Le placement DashScreen en vehicule est toujours exempt
-- Legacy
AllowPickup = true,
OnlyOwnerPickup = true, -- un admin peut toujours ramasser
-- Correspondance item → modele (pre-remplie avec les 10 items fournis)
Items = {
['hz_tv_s'] = 'hz_tv_s',
['hz_tv_m'] = 'hz_tv_m',
['hz_tv_l'] = 'hz_tv_l',
['hz_tv_s_stand'] = 'hz_tv_s_stand',
['hz_tv_m_stand'] = 'hz_tv_m_stand',
['hz_tv_l_stand'] = 'hz_tv_l_stand',
['curved_screen_s'] = 'prop_curved_screen_s',
['curved_screen_m'] = 'prop_curved_screen_m',
['curved_screen_l'] = 'prop_curved_screen_l',
['hz_dashscreen'] = 'hz_dashscreen', -- DashScreen — 11 variantes supplementaires auto-enregistrees
},
}
Protection route
Vérifie GetClosestVehicleNode autour des coordonnées de l'aperçu. Si le prop se trouve sur une route :
- Le contour devient rouge (au lieu du cyan normal)
- Entrée / Confirmer est bloqué — le joueur doit déplacer le prop hors de la route d'abord
- Le placement DashScreen en véhicule est exempt (le principe même du DashScreen est de monter sur un véhicule en mouvement)
Protection abandon
Empeche les serveurs longue durée de se remplir de TV et de DashScreens laisses par des joueurs qui ne reviennent jamais.
MaxPerPlayer— limite stricte par identifiant propriétaire. Pour le DashScreen, les upserts par plaque comptent comme un remplacement (le re-placement sur la même voiture n'incremente pas)AutoCleanupDays— les propriétaires qui ne se sont pas connectés depuis N jours voient leurs placements supprimes. Recommande 30–60AutoCleanupInterval— fréquence de re-scan par le serveur (en heures ;0= au démarrage uniquement)- Colonne
last_seensurhz_television_placedethz_dashscreen_placed— rafraîchie àplayerJoininget à chaque interaction. La migration additive s'exécute au démarrage (ALTER TABLE ADD COLUMN IF NOT EXISTS)
Commande admin /tvclean
| Sous-commande | Action |
|---|---|
/tvclean list | Top 20 des propriétaires par inactivité — identifiant, nombre de placements, jours d'inactivité |
/tvclean run | Déclencher un cycle de nettoyage automatique immédiatement (respecte AutoCleanupDays) |
/tvclean purge <identifier> | Supprimer TOUS les placements (TV + DashScreens) pour un identifiant spécifique |
Config.Placer.CleanupAdminPermission (ACE). Aussi exports["hz_television"]:RunHZTVCleanup().
Modèles TV
Chaque écran interactif est une entrée dans Config.Models indexée par nom de modèle :
Config.Models = {
['hz_tv_m'] = {
Offset = vector3(0.0, -0.02, 0.55),
Scale = { x = 0.42, y = 0.236 }, -- demi-largeur / demi-hauteur
Rotation = { x = 0.0, y = 0.0, z = 0.0 },
RenderTexture = { dict = 'hz_tv_m', name = 'hz_tv_m_screen' },
},
-- Ecran cinema courbe (v3.3)
['prop_curved_screen_m'] = {
Offset = vector3(0.0, -0.2, 2.7),
Scale = { x = 2.80, y = 1.575 },
Rotation = { x = 0.0, y = 0.0, z = 0.0 },
Curve = {
Radius = 23.00, -- rayon de l'arc physique (metres)
Arc = 25.11, -- angle de balayage de l'arc (degres)
Invert = false, -- true = concave vers le spectateur
},
RenderTexture = { dict = 'prop_curved_screen_m', name = 'curved_screen_m' },
},
-- Grand panneau d'affichage vanilla GTA V (render target detecte automatiquement)
['prop_huge_display_01'] = {
Offset = vector3(0.0, 0.15, 0.0),
Scale = { x = 8.0, y = 4.5 },
Rotation = { x = 0.0, y = 0.0, z = 0.0 },
RenderTexture = { dict = 'big_disp', name = 'big_disp' }, -- meme dict/name = render target
},
}
Ajouter un modèle personnalisé
- Ajoutez une entrée indexée par nom de modèle dans
Config.Models - Lancez-vous en jeu, approchez-vous du prop
- Exécutez
/tvcfg→ sélectionnez le modèle → le gizmo 3D vous permet de calibrer Scale / Offset / Rotation en direct - Pour les props courbes, activez le raycast cylindrique : cochez Curve, définissez Radius + Arc + (optionnellement) Invert. Un aperçu cyan en arc montre la zone de clic exacte
- Sauvegarder écrit la calibration dans
tv_config.json(persiste entre les redémarrages)
RaycastTVCylinder — donc "l'arc cyan aligne avec la surface du prop" ↔ "le clic est précis". Si l'aperçu est décalé, le curseur l'est aussi.SmartTV sur panneaux d'affichage & cinéma (v3.3)
Opt-in par modèle : quels écrans panneau / cinéma utilisent l'interface Smart TV complète au lieu du panneau Ghost Protocol cyberpunk.
Config.BillboardUseSmartTV = {
-- Ecrans cinema courbes — toujours opt-in
['prop_curved_screen_s'] = true,
['prop_curved_screen_m'] = true,
['prop_curved_screen_l'] = true,
-- Grands panneaux vanilla GTA V — detection automatique render target en v3.3
['prop_huge_display_01'] = true,
['prop_huge_display_02'] = true,
-- Ajoutez tout autre modele RenderTexture ici pour activer la Smart TV dessus
}
Tout ce qui n'est pas dans cette liste garde le panneau NUI classique Ghost Protocol (toujours entièrement fonctionnel pour les panneaux configures une fois pour toutes).
DashScreen (v3.2 + v3.3 audio + v3.4 QoL gizmo)
Le DashScreen ne vit pas uniquement dans Config.Placer.Items — le bloc de configuration dédié règle l'UX de placement, l'occlusion audio et le gizmo.
Activer / Désactiver DashScreen (v3.4.5)
Interrupteur principal — définissez Enabled = false pour ignorer entièrement la fonctionnalité DashScreen (enregistrement des items, options target, invite de placement, tick de réconciliation). Les TV murales / cinéma / panneaux ne sont pas affectées.
Config.DashScreen = {
Enabled = true, -- v3.4.5+ ; mettre false pour desactiver la variante DashScreen en vehicule
}
Occlusion audio cabine (v3.3)
Le pipeline Web Audio à l'intérieur du DUI DashScreen simule le filtre sonore natif RAGE du véhicule (lowpass + bass shelf) car l'audio DUI contourne l'occlusion propre du moteur. Aucune configuration généralement nécessaire — les valeurs par défaut correspondent au comportement RAGE — mais les plages peuvent être ajustées :
Config.DashScreen = {
Enabled = true, -- v3.4.5+ ; interrupteur principal
AudioCabinRange = 5.0, -- metres ; au-dela, les auditeurs hors du vehicule entendent le silence
SealedLowpass = 600, -- frequence de coupure Hz quand toutes les portieres sont fermees
OpenLowpass = 2200, -- frequence de coupure Hz quand toutes les portieres sont ouvertes
SealedBassBoost = 6, -- dB peaking shelf a 80 Hz quand scelle (diminue avec l'ouverture des portieres)
SealedGain = 0.25, -- multiplicateur de volume master quand scelle
OpenGain = 0.70, -- multiplicateur de volume master toutes portieres ouvertes
TransitionMs = 80, -- lissage linearRampToValueAtTime pour les changements d'etat des portieres
}
UX de placement (v3.4)
Pendant que le gizmo clavier est ouvert dans un véhicule :
- Véhicule fige —
FreezeEntityPosition(vehicle, true)+ vitesse mise à zéro, défige à la confirmation / annulation. Pas de dérive - Contrôles véhicule désactives — accélérateur, frein, direction, frein à main coupes (
keepVehicleControls = false) - Reset de la caméra première personne —
SetGameplayCamRelativeHeading(0.0)+SetGameplayCamRelativePitch(0.0, 1.0)pour que la caméra regarde vers l'avant quelle que soit la direction visée par le joueur avant
Chaînes pre-enregistrees
Config.Channels = {
{
name = 'Weazel News',
url = 'https://example.com/video.mp4',
category = 'news', -- regroupement optionnel dans l'interface Smart TV
thumbnail = 'https://...', -- image de carte optionnelle
},
{
name = 'Los Santos Rock Radio',
url = 'https://example.com/stream.m3u8',
category = 'music',
},
}
Apparaît dans une section "Channels" sur l'écran d'accueil Smart TV. Les chaînes respectent les routing buckets et la synchronisation multi-joueur comme tout contenu URL.
Médias locaux
Hebergez des fichiers MP4 / MP3 directement dans hz_television/media/ et exposez-les comme section "Local Média" dans la Smart TV et l'application compagnon LB Phone :
Config.LocalMedia = {
{ title = "Server Intro", file = "intro.mp4", type = "video" },
{ title = "Ambient Radio", file = "radio.mp3", type = "audio" },
{ title = "Event Clip", file = "event.mp4", type = "video" },
}
Un seul appui lit le fichier sur la TV active. Idéal pour les intros serveur, clips d'événements, boucles radio d'ambiance, publicités personnalisées.
Mode silencieux
Mute en un clic toutes les TV à proximité — pour les créateurs de contenu qui doivent couper l'audio du jeu de leur stream sans toucher l'expérience des autres joueurs.
Config.Streamer = {
Enabled = true,
DefaultMute = false,
ToggleCommand = 'streamermode', -- /streamermode
AffectsNewScreens = true, -- mute automatiquement les ecrans nouvellement detectes (v3.3)
}
Controlable depuis d'autres scripts via exports["hz_television"]:SetStreamerMode(true/false) — voir Exports.
Commandes
Config.Commands = {
Configurator = 'tvcfg', -- ouvrir le calibrateur gizmo en direct
Billboard = 'billboard', -- modifier le contenu du panneau a proximite
DashScreen = 'dashscreen', -- raccourci F5 — interagir avec le DashScreen du vehicule actuel
DashScreenOn = 'dashscreen_on', -- allumer + ouvrir la SmartTV
DashScreenRemove = 'dashscreenremove', -- retirer le DashScreen du vehicule actuel
Cleanup = 'tvclean', -- CLI de nettoyage admin (v3.4)
Streamer = 'streamermode', -- basculer le mode silencieux
}
Webhooks Discord (optionnel)
Config.Webhooks = {
Enabled = false,
PlaceTV = 'https://discord.com/api/webhooks/...',
ConfigTV = 'https://discord.com/api/webhooks/...',
Cleanup = 'https://discord.com/api/webhooks/...', -- v3.4 log d'audit /tvclean
}
Exemples avances
Serveur RP strict
Config.Permissions = {
ConfiguratorCommand = 'admin',
BillboardCommand = 'job:police,admin',
UseTV = 'everyone',
PlaceTV = 'job:estate,admin',
}
Config.Placer = {
Persistence = true,
MaxPerPlayer = 3, -- limite stricte
AutoCleanupDays = 30, -- nettoyage apres 30 jours d'inactivite
AutoCleanupInterval = 6,
BlockOnRoad = true, -- empeche l'encombrement des routes
OnlyOwnerPickup = true,
}
Serveur créatif / sandbox
Config.Permissions = {
ConfiguratorCommand = 'everyone',
BillboardCommand = 'everyone',
UseTV = 'everyone',
PlaceTV = 'everyone',
}
Config.Placer = {
Persistence = true,
MaxPerPlayer = 0, -- illimite
AutoCleanupDays = 0, -- desactive
BlockOnRoad = false,
OnlyOwnerPickup = false, -- n'importe qui peut ramasser
}
config.lua, exécutez restart hz_television depuis la console serveur — la plupart des paramètres prennent effet immédiatement sans redémarrage complet.