Installation
Etape 1 — Telechargement
Apres votre achat sur hzscripts.com/shop, votre compte FiveM Keymaster recoit deux assets separes :
- Connectez-vous sur keymaster.fivem.net (ou portal.cfx.re/assets)
- Allez dans Granted Assets
- Telechargez les deux :
HZ-Television — le script principal
* HZ-PropsCarplay — les 12 variantes de props CarPlay en vehicule (livrees comme un asset dedie pour que les mises a jour des props ne forcent pas un re-telechargement de la ressource logique complete)
HZ-Television, les 12 modeles de props CarPlay ne seront pas streames et le placement CarPlay restera bloque silencieusement a lib.requestModel.Etape 2 — Dependances
Requises
- HZ-Bridge — asset gratuit depuis hzscripts.com/shop. Gere la detection framework / inventaire / target / menu / notification. Utilisez toujours la derniere version — chaque release de HZ-Television est testee avec la derniere version du Bridge. Doit demarrer avant HZ-Television. Voir Installation HZ-Bridge.
- HZ-PropsCarplay — telecharge separement depuis Keymaster aux cotes de HZ-Television (voir Etape 1). Streame les 12 variantes de props CarPlay (
hz_carplay+hz_carplay_1..11) + leur JSON de calibration. Doit demarrer avant HZ-Television. - Un systeme de menu — au moins l'un des suivants :
- Un driver SQL (requis pour la persistance, les comptes, les playlists, le nettoyage abandon). HZ-Television detecte automatiquement les deux au demarrage :
Optionnelles
- ox\_target ou qb-target — pour l'interaction par viseur (sinon fallback TextUI / DrawText3D)
- lb-phone — requis pour l'application compagnon telephone
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 demarrage :
[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-Bridge/config.lua et chaque Hz-Script en herite. Voir Configuration HZ-Bridge.Etape 3 — Fichiers
- Extrayez les deux archives (
HZ-Television.zipetHZ-PropsCarplay.zip) telechargees depuis Keymaster a l'Etape 1 - Placez les deux dossiers resultants dans votre repertoire
resources/— les regrouper dans un dossier de categorie commun comme[hz-scripts]/permet de garder les choses ordonnees
server/
├── resources/
│ ├── ox_lib/
│ ├── oxmysql/ ← ou mysql-async (les deux sont supportes)
│ ├── [hz-scripts]/
│ │ ├── HZ-Bridge/
│ │ ├── HZ-PropsCarplay/ ← 2eme telechargement Keymaster (12 props CarPlay + calibration.json)
│ │ ├── HZ-Television/ ← 1er telechargement Keymaster (le script principal)
│ │ │ ├── client/
│ │ │ ├── server/
│ │ │ ├── html/
│ │ │ ├── config.lua
│ │ │ ├── fxmanifest.lua
│ │ │ └── ...
Etape 4 — Items d'inventaire
HZ-Television est livre avec 10 items placables prets a l'emploi. Des definitions 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_* | Ecrans cinema courbes |
hz_carplay | hz_carplay + 11 variantes | CarPlay en vehicule (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 entrees incluant hz_carplay).
Exemple d'entree :
['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_carplay'] = {
label = 'CarPlay 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/ 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 vehicule pour CarPlay).Etape 5 — Base de donnees (recommande)
Activez dans config.lua :
Config.Placer = {
Persistence = true, -- les TV + CarPlays 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 (CarPlay exempt)
CleanupAdminPermission = 'admin', -- permission ACE pour /tvclean
}
Les tables suivantes sont creees automatiquement au premier demarrage (toutes utilisent CREATE TABLE IF NOT EXISTS + migrations additives ALTER TABLE ADD COLUMN IF NOT EXISTS) :
hz_television_placed— TV statiques placees (murales, sur pied, courbees, panneaux)hz_carplay_placed— placements CarPlay indexes par plaque de vehiculehz_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 premiere connexion Smart TV)
Installation manuelle (fallback — v3.4.3+)
Si une table ne peut pas etre creee automatiquement (utilisateur MySQL sans permission CREATE, chaine de connexion pointant vers la mauvaise base, etc.), vous verrez une erreur rouge dans la console serveur juste apres [HZ-Television] SQL compat: ... avec le nom exact de la table + l'erreur. Dans ce cas, executez 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 donnees de votre serveur. Puis redemarrez HZ-Television. Le script ne contient que des instructions CREATE TABLE IF NOT EXISTS, donc l'executer deux fois est sans risque.
Table 'yourdb.hz_tv_sessions' doesn't exist a la connexion echoue maintenant proprement avec une reponse db_not_ready au lieu de crasher, et le log serveur vous dirige vers install.sql. Les versions precedentes faisaient crasher le flux de session.Etape 6 — server.cfg
Ajoutez les ressources a votre server.cfg dans cet ordre :
# Dependances (doivent demarrer AVANT HZ-Bridge)
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-Bridge # gere la detection automatique
ensure HZ-PropsCarplay # streame les 12 variantes de props CarPlay (telechargement Keymaster separe)
ensure HZ-Television # la ressource logique TV
HZ-Bridge, HZ-PropsCarplay et votre driver SQL (oxmysql ou mysql-async) doivent tous demarrer avant HZ-Television. Si HZ-PropsCarplay n'est pas assure, les 12 modeles de variantes CarPlay ne seront pas streames et le placement CarPlay echouera silencieusement a lib.requestModel. Si aucun driver SQL n'est assure, la persistance cesse de fonctionner silencieusement.Etape 7 — Configuration
Ouvrez HZ-Television/config.lua et adaptez les parametres. Voir Configuration pour chaque option en detail.
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 modeles de panneaux/cinema doivent utiliser l'interface Smart TV complete (par defaut : les 3 props cinema courbes + 2 grands panneaux vanilla)
Etape 8 — Verification
- Demarrez le serveur
- La console devrait afficher (dans l'ordre) :
[HZ-Bridge] detected, detected, ...
* [HZ-PropsCarplay] 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, ecran cinema courbe, ou utilisez l'item
hz_carplaydans un vehicule) - Selectionnez Power On → Smart TV → collez une URL YouTube
Depannage rapide
Le script ne demarre pas
Verifiez :
- Les dossiers sont correctement nommes
HZ-Television,HZ-PropsCarplay,HZ-Bridge(sensible a la casse) - Les trois sont
ensures dansserver.cfgdans le bon ordre (Bridge → PropsCarplay → Television) - Votre licence FiveM est valide sur Keymaster
- Un systeme de menu (
ox_libouqb-menu) estensureavant HZ-Bridge
Erreur "Framework not detected"
La detection est geree par HZ-Bridge. Assurez-vous que :
es_extended,qb-coreouqbx_coreestensureavant HZ-Bridge- HZ-Bridge est
ensureavant HZ-Television - Verifiez la ligne console de HZ-Bridge pour confirmer la detection automatique
- Forcez un framework si necessaire dans le
config.luade HZ-Bridge — ex.HZBridge.Framework = 'esx'
Le placement CarPlay echoue silencieusement
Cause la plus courante : HZ-PropsCarplay n'est pas demarre. lib.requestModel(hz_carplay) reste bloque indefiniment car le modele n'est pas streame.
HZ-PropsCarplay est un telechargement separe sur Keymaster — il n'est pas inclus avec HZ-Television. Confirmez :
- Les deux assets sont listes dans vos Granted Assets Keymaster et ont ete telecharges
- Le dossier
HZ-PropsCarplayse trouve a cote deHZ-Televisiondansresources/ ensure HZ-PropsCarplayest dans votreserver.cfgavantensure HZ-Television- La ressource est listee comme
starteddans la console serveur
Les TV placees ne sont pas sauvegardees apres redemarrage / Erreur "no SQL resource detected"
HZ-Television a besoin soit de oxmysql soit de mysql-async en fonctionnement. Au demarrage, 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 etre place avant
ensure HZ-Television— si la ressource SQL se charge apres, la detection runtime la manque - Les deux drivers sont supportes — choisissez-en un ; ne les executez pas simultanement
Erreur "Table 'yourdb.hz_tv_sessions' doesn't exist" quand un joueur se connecte sur une Smart TV
L'etape de creation automatique n'a pas pu construire une ou plusieurs tables. Vous verrez des lignes rouges juste apres SQL compat: detected ... pendant le demarrage :
[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 donnees de votre serveur. Puis redemarrez HZ-Television. Le fichier ne contient que des instructions CREATE TABLE IF NOT EXISTS — l'executer deux fois est sans risque.
Causes courantes de l'echec de la creation automatique :
- L'utilisateur MySQL configure dans
set mysql_connection_stringn'a pas la permissionCREATEsur la base cible → accordezCREATE, ALTER, INDEXet redemarrez - La chaine de connexion pointe vers une base que l'utilisateur peut lire mais pas ecrire → verifiez le nom de la base
- MySQL tourne en mode STRICT avec des parametres de session incompatibles →
install.sqldefinit explicitementSQL_MODE = ''en haut pour contourner ce probleme
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 etes sur une ancienne version de HZ-Television. Les deux erreurs ont ete corrigees dans v3.4.6 — mettez a jour et re-executez le nouveau install.sql.
Sur v3.4.3+, le flux de connexion echoue maintenant proprement avec db_not_ready quand les tables sont manquantes, au lieu de crasher en pleine requete.
L'ecran reste noir / pas d'affichage
- Utilisez
/tvcfgpres de la TV pour calibrer Scale/Offset/Rotation (l'apercu cyan en direct montre exactement ou se trouve la zone de clic du curseur) - Testez avec une simple video YouTube d'abord (pas un livestream)
- Verifiez la console F8 pour des erreurs JavaScript
- Pour les grands panneaux vanilla, assurez-vous que le modele est dans
Config.BillboardUseSmartTV(la detection automatique du render target en v3.3 les gere)
Pas de son ou son global
- Augmentez
Config.Display.MaxSoundDistancedansconfig.lua - Assurez-vous que la TV est allumee
- Rapprochez-vous (le volume diminue entre
MinSoundDistanceetMaxSoundDistance) - Pour le CarPlay specifiquement : l'audio a une portee cabine de 5 m avec occlusion Web Audio. Le conducteur + les passagers ont un son propre et complet ; les auditeurs exterieurs recoivent un son filtre et attenue
Les items TV n'apparaissent pas dans l'inventaire
- Ajoutez les items depuis
HZ-Television/items/dans le fichier d'items de votre inventaire.txt - Redemarrez le serveur completement apres 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
