Installation
Étape 1 — Téléchargement
Après votre achat sur hzscripts.com/shop, votre compte FiveM Keymaster reçoit deux assets séparés :
- Connectez-vous sur keymaster.fivem.net (ou portal.cfx.re/assets)
- Allez dans Granted Assets
- Téléchargez les deux :
hz_television — le script principal
* hz_televisionprops — les 12 variantes de props DashScreen en véhicule (livrées comme un asset dédié pour que les mises à jour des props ne forcent pas un re-telechargement de la ressource logique complète)
hz_television, les 12 modèles de props DashScreen ne seront pas streames et le placement DashScreen restera bloque silencieusement à lib.requestModel.Étape 2 — Dépendances
Requises
- hz_lib — asset gratuit depuis hzscripts.com/shop. Gère la détection framework / inventaire / target / menu / notification. Utilisez toujours la dernière version — chaque release de HZ-Television est testée avec la dernière version du Bridge. Doit démarrer avant HZ-Television. Voir Installation hz_lib.
- HZ-TelevisionProps — téléchargé séparément depuis Keymaster aux cotes de HZ-Television (voir Étape 1). Streame les 12 variantes de props DashScreen (
hz_dashscreen+hz_dashscreen_1..11) + leur JSON de calibration. Doit démarrer avant HZ-Television. - Un système de menu — au moins l'un des suivants :
- Un driver SQL (requis pour la persistance, les comptes, les playlists, le nettoyage abandon). HZ-Television détecté automatiquement les deux au démarrage :
Optionnelles
- ox\_target ou qb-target — pour l'interaction par viseur (sinon fallback TextUI / DrawText3D)
- lb-phone — requis pour l'application compagnon téléphone
lb-hztelevision
oxmysql ou mysql-async et installe le shim MySQL.Async correspondant. Vous verrez l'une de ces lignes dans la console serveur au démarrage :
[hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed
[hz_television] SQL compat: detected existing MySQL.Async (mysql-async or compatible)
Si vous voyez un ERROR: no SQL resource detected en rouge, assurez-vous que ensure oxmysql (ou ensure mysql-async) se trouve avant ensure hz_television dans votre server.cfg.
hz_lib/config.lua et chaque Hz-Script en hérite. Voir Configuration hz_lib.Étape 3 — Fichiers
- Extrayez les deux archives (
hz_television.zipethz_televisionprops.zip) téléchargées depuis Keymaster à l'Étape 1 - Placez les deux dossiers résultants dans votre répertoire
resources/— les regrouper dans un dossier de catégorie commun comme[hz-scripts]/permet de garder les choses ordonnées
server/
├── resources/
│ ├── ox_lib/
│ ├── oxmysql/ ← ou mysql-async (les deux sont supportes)
│ ├── [hz-scripts]/
│ │ ├── hz_lib/
│ │ ├── hz_televisionprops/ ← 2eme telechargement Keymaster (12 props DashScreen + calibration.json)
│ │ ├── hz_television/ ← 1er telechargement Keymaster (le script principal)
│ │ │ ├── client/
│ │ │ ├── server/
│ │ │ ├── html/
│ │ │ ├── config.lua
│ │ │ ├── fxmanifest.lua
│ │ │ └── ...
Étape 4 — Items d'inventaire
HZ-Television est livré avec 10 items placables prêts à l'emploi. Des définitions d'items pre-configurees pour chaque inventaire supporte se trouvent dans hz_television/items/.
Items fournis
| Item | Prop | Description |
|---|---|---|
hz_tv_s / hz_tv_m / hz_tv_l | hz_tv_* | Smart TV murales — petite / moyenne / grande |
hz_tv_s_stand / hz_tv_m_stand / hz_tv_l_stand | hz_tv_*_stand | Smart TV sur pied — petite / moyenne / grande |
curved_screen_s / curved_screen_m / curved_screen_l | prop_curved_screen_* | Écrans cinéma courbes |
hz_dashscreen | hz_dashscreen + 11 variantes | DashScreen en véhicule (place via le gizmo clavier) |
Pour ox\_inventory
Ouvrez ox_inventory/data/items.lua et ajoutez le contenu de hz_television/items/ox_inventory.txt (10 entrées incluant hz_dashscreen).
Exemple d'entrée :
['hz_tv_m'] = {
label = 'Smart TV (Medium)',
weight = 12000,
stack = true,
close = true,
description = 'A medium wall-mounted smart TV',
client = {
event = 'hz_television:useItem'
}
},
['hz_dashscreen'] = {
label = 'DashScreen Screen',
weight = 3000,
stack = true,
close = true,
description = 'Dashboard Smart TV — use while sitting in a vehicle',
client = {
event = 'hz_television:useItem'
}
},
Pour qb-inventory / qs-inventory / ps-inventory
Copiez le contenu du fichier hz_television/items/<inventory>.txt correspondant dans le fichier d'items de votre inventaire.
HZ-Television:useItem, que le script intercepte et redirige vers le bon flux de placement (gizmo statique pour les TV, gizmo clavier en véhicule pour DashScreen).Étape 5 — Base de données (recommandé)
Activez dans config.lua :
Config.Placer = {
Persistence = true, -- les TV + DashScreens places survivent au redemarrage
MaxPerPlayer = 0, -- 0 = illimite, N = limite par identifiant proprietaire
AutoCleanupDays = 0, -- 0 = desactive, N = suppression auto apres N jours d'inactivite
AutoCleanupInterval = 6, -- heures entre les cycles de nettoyage (0 = au demarrage uniquement)
BlockOnRoad = false, -- true = bloque le placement de props sur les routes (DashScreen exempt)
CleanupAdminPermission = 'admin', -- permission ACE pour /tvclean
}
Les tables suivantes sont créées automatiquement au premier démarrage (toutes utilisent CREATE TABLE IF NOT EXISTS + migrations additives ALTER TABLE ADD COLUMN IF NOT EXISTS) :
hz_television_placed— TV statiques placées (murales, sur pied, courbées, panneaux)hz_dashscreen_placed— placements DashScreen indexes par plaque de véhiculehz_tv_users,hz_tv_sessions,hz_tv_favorites,hz_tv_history,hz_tv_playlists,hz_tv_playlist_items— compte / connexion / favoris / historique / playlists (alimentes lors de la première connexion Smart TV)
Installation manuelle (fallback — v3.4.3+)
Si une table ne peut pas être créée automatiquement (utilisateur MySQL sans permission CREATE, chaîne de connexion pointant vers la mauvaise base, etc.), vous verrez une erreur rouge dans la console serveur juste après [hz_television] SQL compat: ... avec le nom exact de la table + l'erreur. Dans ce cas, exécutez le fichier install.sql fourni manuellement :
mysql -u <user> -p <database> < resources/[standalone]/hz_television/install.sql
...ou ouvrez hz_television/install.sql dans phpMyAdmin / HeidiSQL / DBeaver et executez-le sur la base de données de votre serveur. Puis redémarrez hz_television. Le script ne contient que des instructions CREATE TABLE IF NOT EXISTS, donc l'exécuter deux fois est sans risque.
Table 'yourdb.hz_tv_sessions' doesn't exist à la connexion échoue maintenant proprement avec une réponse db_not_ready au lieu de crasher, et le log serveur vous dirige vers install.sql. Les versions précédentes faisaient crasher le flux de session.Étape 6 — server.cfg
Ajoutez les ressources à votre server.cfg dans cet ordre :
# Dependances (doivent demarrer AVANT hz_lib)
ensure oxmysql # ou `ensure mysql-async` — HZ-Television supporte les deux
ensure ox_lib # ou qb-menu + qb-input
ensure ox_target # ou qb-target (optionnel)
# Framework (si applicable)
ensure qbx_core # ou ensure qb-core, ou ensure es_extended
# ensure qb-core
# ensure es_extended
# HZ-Scripts — l'ordre compte
ensure hz_lib # gere la detection automatique
ensure hz_televisionprops # streame les 12 variantes de props DashScreen (telechargement Keymaster separe)
ensure hz_television # la ressource logique TV
hz_lib, hz_televisionprops et votre driver SQL (oxmysql ou mysql-async) doivent tous démarrer avant hz_television. Si hz_televisionprops n'est pas assure, les 12 modèles de variantes DashScreen ne seront pas streames et le placement DashScreen échouera silencieusement à lib.requestModel. Si aucun driver SQL n'est assure, la persistance cesse de fonctionner silencieusement.Étape 7 — Configuration
Ouvrez hz_television/config.lua et adaptez les paramètres. Voir Configuration pour chaque option en détail.
Config.Locale—'en'/'fr'/'es'/'de'Config.Permissions— qui peut utiliser/tvcfg, placer des TV, utiliser les TVConfig.Placer.Persistence—truepour activer la sauvegarde en baseConfig.Placer.BlockOnRoad—truesi vous voulez bloquer le placement sur les routesConfig.Placer.MaxPerPlayer+Config.Placer.AutoCleanupDays— protection abandonConfig.BillboardUseSmartTV— quels modèles de panneaux/cinema doivent utiliser l'interface Smart TV complète (par défaut : les 3 props cinéma courbes + 2 grands panneaux vanilla)
Étape 8 — Vérification
- Démarrez le serveur
- La console devrait afficher (dans l'ordre) :
[hz_lib] <framework> detected, <inventory> detected, ...
* [hz_televisionprops] shared/models.lua loaded
[hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed (ou detected existing MySQL.Async (mysql-async or compatible))*
* [hz_television] v3.4.1 loaded successfully
* [hz_television] Database tables initialized
- Connectez-vous en jeu
- Approchez-vous d'un prop TV (TV murale, écran cinéma courbe, ou utilisez l'item
hz_dashscreendans un véhicule) - Sélectionnez Power On → Smart TV → collez une URL vidéo
Dépannage rapide
Le script ne démarre pas
Vérifiez :
- Les dossiers sont correctement nommes
hz_television,hz_televisionprops,hz_lib(sensible à la casse) - Les trois sont
ensures dansserver.cfgdans le bon ordre (Bridge → TelevisionProps → Television) - Votre licence FiveM est valide sur Keymaster
- Un système de menu (
ox_libouqb-menu) estensureavant hz_lib
Erreur "Framework not detected"
La detection est gérée par hz_lib. Assurez-vous que :
es_extended,qb-coreouqbx_coreestensureavant hz_lib- hz_lib est
ensureavant HZ-Television - Vérifiez la ligne console de hz_lib pour confirmer la détection automatique
- Forcez un framework si nécessaire dans le
config.luade hz_lib — ex.HZBridge.Framework = 'esx'
Le placement DashScreen échoue silencieusement
Cause la plus courante : hz_televisionprops n'est pas démarre. lib.requestModel(hz_dashscreen) reste bloqué indéfiniment car le modèle n'est pas streame.
hz_televisionprops est un téléchargement séparé sur Keymaster — il n'est pas inclus avec hz_television. Confirmez :
- Les deux assets sont listes dans vos Granted Assets Keymaster et ont été téléchargés
- Le dossier
hz_televisionpropsse trouve à côté dehz_televisiondansresources/ ensure hz_televisionpropsest dans votreserver.cfgavantensure hz_television- La ressource est listée comme
starteddans la console serveur
Les TV placées ne sont pas sauvegardées après redémarrage / Erreur "no SQL resource detected"
HZ-Television a besoin soit de oxmysql soit de mysql-async en fonctionnement. Au démarrage, la console serveur affiche l'un des messages suivants :
[hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed
[hz_television] SQL compat: detected existing MySQL.Async (mysql-async or compatible)
[hz_television] ERROR: no SQL resource detected (oxmysql or mysql-async)
Si vous obtenez l'erreur rouge :
- Assurez-vous que
ensure oxmysql(ouensure mysql-async) est dansserver.cfg - Il doit être placé avant
ensure hz_television— si la ressource SQL se charge après, la détection runtime la manque - Les deux drivers sont supportés — choisissez-en un ; ne les exécutez pas simultanément
Erreur "Table 'yourdb.hz_tv_sessions' doesn't exist" quand un joueur se connecte sur une Smart TV
L'étape de création automatique n'a pas pu construire une ou plusieurs tables. Vous verrez des lignes rouges juste après SQL compat: detected ... pendant le démarrage :
[hz_television] CREATE TABLE hz_tv_sessions FAILED: <error>
[hz_television] Import hz_television/install.sql manually to create the missing tables.
Correctif (v3.4.3+) :
mysql -u <user> -p <database> < resources/[standalone]/hz_television/install.sql
Ou ouvrez hz_television/install.sql dans phpMyAdmin / HeidiSQL / DBeaver et executez-le sur la base de données de votre serveur. Puis redémarrez hz_television. Le fichier ne contient que des instructions CREATE TABLE IF NOT EXISTS — l'exécuter deux fois est sans risque.
Causes courantes de l'échec de la création automatique :
- L'utilisateur MySQL configure dans
set mysql_connection_stringn'a pas la permissionCREATEsur la base cible → accordezCREATE, ALTER, INDEXet redémarrez - La chaîne de connexion pointe vers une base que l'utilisateur peut lire mais pas écrire → vérifiez le nom de la base
- MySQL tourne en mode STRICT avec des paramètres de session incompatibles →
install.sqldéfinit explicitementSQL_MODE = ''en haut pour contourner ce problème
Si vous voyez SQL Error 1067 (
Invalid default value for 'last_login') ou SQL Error 1075 (Incorrect table definition; there can be only one auto column and it must be defined as a key) lors de l'import de install.sql, vous êtes sur une ancienne version de HZ-Television. Les deux erreurs ont été corrigées dans v3.4.6 — mettez à jour et re-executez le nouveau install.sql.
Sur v3.4.3+, le flux de connexion échoue maintenant proprement avec db_not_ready quand les tables sont manquantes, au lieu de crasher en pleine requête.
L'écran reste noir / pas d'affichage
- Utilisez
/tvcfgprès de la TV pour calibrer Scale/Offset/Rotation (l'aperçu cyan en direct montre exactement ou se trouve la zone de clic du curseur) - Testez avec un simple fichier vidéo direct d'abord (pas un livestream)
- Vérifiez la console F8 pour des erreurs JavaScript
- Pour les grands panneaux vanilla, assurez-vous que le modèle est dans
Config.BillboardUseSmartTV(la détection automatique du render target en v3.3 les gère)
Pas de son ou son global
- Augmentez
Config.Display.MaxSoundDistancedansconfig.lua - Assurez-vous que la TV est allumée
- Rapprochez-vous (le volume diminue entre
MinSoundDistanceetMaxSoundDistance) - Pour le DashScreen spécifiquement : l'audio à une portée cabine de 5 m avec occlusion Web Audio. Le conducteur + les passagers ont un son propre et complet ; les auditeurs extérieurs reçoivent un son filtre et atténue
Les items TV n'apparaissent pas dans l'inventaire
- Ajoutez les items depuis
hz_television/items/<inventory>.txtdans le fichier d'items de votre inventaire - Redémarrez le serveur complètement après avoir ajoute les items (pas seulement la ressource)
- Pour ox\_inventory le chemin est
ox_inventory/data/items.lua - Pour QBCore/QBox c'est
qb-core/shared/items.luaouqbx_core/shared/items.lua
