HZ Scripts

Changelog

v3.4.6 — Correctif install.sql mode strict + amelioration recovery CarPlay

2026-04-30
  • install.sql Error 1067 sur last_logintimestamp DEFAULT NULL etait rejete par les instances MariaDB en mode strict SQL_MODE. La colonne est maintenant declaree timestamp NULL DEFAULT NULL dans install.sql et dans l'auto-creation dans server/accounts.lua, donc les installations neuves sans le fichier SQL fonctionnent aussi sur les bases en mode strict
  • install.sql Error 1075 sur hz_carplay_placed — la table avait id INT AUTO_INCREMENT mais seulement une UNIQUE KEY sur plate ; MariaDB exige que la colonne auto-increment soit une cle. Ajout de PRIMARY KEY (id). Le chemin d'auto-creation dans server/placer.lua etait deja correct, donc seul l'import manuel de install.sql etait affecte
  • Le CarPlay n'est plus orphelin apres un crash — quand une collision violente detache le prop du vehicule parent, l'invariant not-attached du tick de reconciliation libere le slot et le re-acquiert au prochain passage (≤ 500 ms), replaquant l'ecran sur le meme vehicule a ses offsets d'origine. L'etat d'alimentation est preserve a travers le cycle via PoweredOn[cpId] donc le DUI se rallume automatiquement

Mise a jour

  • Re-importez install.sql une fois apres la mise a jour — CREATE TABLE IF NOT EXISTS ignore les tables deja creees, seules les deux qui echouaient precedemment sont creees
  • Pas de migration de donnees, pas de changement de config / evenements
  • Activez Config.Debug = true pour voir la raison de liberation not-attached dans le log quand un crash detache un CarPlay

v3.4.5 — Bundle de correctifs tickets clients (4 fixes)

2026-04-28
  • Spam debug F8 elimine — trois lignes console qui se declenchaient a chaque frame independamment de Config.Debug sont maintenant conditionnees par celui-ci : [HZ-Television] Screen → DRAWSPRITEPOLY, [HZ-TV RT] name=..., et DrawToRenderTargetDebug. Les serveurs de production ne sont plus inondes de diagnostics de rendu internes
  • La synchronisation du volume n'est plus perdue quand le curseur est relache rapidement — le throttle de 200 ms sur smarttv_volume perdait la valeur finale si vous relachiez le curseur en cours de fenetre. Maintenant un envoi trailing-edge (mis en file via pendingVolume) garantit que la derniere valeur est diffusee a tous les spectateurs apres l'expiration de la fenetre de throttle
  • Le volume Kick est maintenant effectivement mute — l'iframe cross-origin de Kick n'expose pas d'API volume par postMessage, donc le volume 0 etait silencieusement ignore. Maintenant l'iframe est recree avec ?muted=1 a la transition 0 ↔ >0 (bascule mute binaire — le volume au pourcentage n'est pas possible sur Kick ; c'est une limitation de la plateforme Kick, pas du script)
Le CarPlay peut etre entierement desactive — nouveau bloc Config.Carplay = { Enabled = true } dans config.lua. Mettre Enabled = false ignore l'enregistrement des items hz_carplay, le binding des options target, l'invite de placement et le tick de reconciliation. Utile si vous voulez uniquement les TV murales / cinema sans la variante CarPlay en vehicule

Mise a jour

  • Pas de migration de donnees, pas de changements cassants
  • Si vous voulez desactiver uniquement le CarPlay : Config.Carplay = { Enabled = false } dans config.lua

v3.4.4 — Resilience DB + Revision des locales

2026-04-22
  • Fichier install.sql fourni comme fallback manuel. Si l'etape CREATE TABLE IF NOT EXISTS automatique ne peut pas creer une ou plusieurs tables (permission CREATE manquante, mode SQL STRICT, etc.), la console serveur affiche maintenant CREATE TABLE FAILED: + pointe vers le fichier fourni. Executez-le une fois avec un utilisateur MySQL privilegie (mysql -u ... -p < install.sql) et redemarrez HZ-Television
  • Chemin de connexion fail-cleanly — quand une table manque au runtime, le callback hz_tv:login retourne maintenant { success = false, reason = 'db_not_ready' } au lieu de lancer Table 'yourdb.hz_tv_sessions' doesn't exist en pleine requete. Un log serveur rouge avertit l'admin. Conditionne par un nouveau flag _G.HZ_TV_DB_READY defini apres que tous les CREATEs reussissent
  • Bootstrap DB resilient — chaque appel CREATE TABLE est maintenant enveloppe dans pcall ; un echec n'arrete plus le reste. Chaque echec affiche le nom exact de la table + l'erreur pour que les admins puissent corriger celle qui pose probleme au lieu de deviner
  • Chaines en francais codees en dur supprimees du chemin serveur :
- 'Joueur' fallback nom joueur → 'Player' - 'Ma Playlist' nom de playlist par defaut (defaut SQL + fallback Lua) → 'My Playlist' - 'Comptes — tables DB prêtes' log de demarrage → 'Account tables ready'

Conseils

  • L'installation est idempotenteinstall.sql ne contient que des CREATE TABLE IF NOT EXISTS, donc l'importer sur une base saine est inoffensif
  • install.sql couvre aussi les deux tables de placement (hz_television_placed, hz_carplay_placed) au cas ou celles-ci seraient touchees par le meme probleme de permission

v3.4.3 — Compatibilite garage CarPlay + fiabilite de placement

2026-04-22
  • Rangement en garage — quand un script de garage (qs-advancedgarages, cd_garage, loaf-garage, toute ressource qui supprime le vehicule parent) range le vehicule, le prop CarPlay est maintenant retire au lieu de rester orphelin devant la porte du garage
  • Sortie de garage — quand le vehicule ressort avec la meme plaque mais un nouveau handle d'entite, le CarPlay se re-attache automatiquement aux memes offsets ; le DUI se reactive si le CarPlay etait allume avant le rangement
  • Streamer cull / changement de routing bucket — quand le vehicule parent quitte la portee de streaming ou le routing bucket du client, le pool libere le slot proprement ; le prop reapparait sur le vehicule quand il revient dans le champ de vision
  • Condition de course au placement — placer un CarPlay dans votre propre vehicule s'attache maintenant toujours immediatement. Avant, le placer pouvait echouer silencieusement sur un cache negatif FindVehicle ou une condition de course pool-not-ready ; le serveur diffuse maintenant spawnCarplay a tout le monde y compris le placeur, et un tick de reconciliation retente dans ≤ 500 ms si quelque chose echoue encore
  • Detection defensive du parent — le pool croise le vehicule attache avec GetGamePool('CVehicle') plutot que de faire confiance a DoesEntityExist / IsEntityAttached, que FiveM peut continuer a rapporter comme true pendant plusieurs secondes apres qu'un script de garage ait effectivement supprime le vehicule
  • Visibilite debug — definissez Config.Debug = true pour voir les decisions de reconciliation dans la console F8 (release slot ... / re-acquire cpId=...)

v3.4.2 — Double support SQL (oxmysql + mysql-async complet)

2026-04-21
  • La persistance a accidentellement casse sur les serveurs mysql-async car server/accounts.lua appelle l'API moderne oxmysql-only (MySQL.ready, MySQL.query.await, MySQL.single, MySQL.scalar, MySQL.insert)
  • server/sql_compat.lua charge maintenant oxmysql/lib/MySQL.lua directement via LoadResourceFile + load() quand oxmysql est detecte, donnant a HZ-Television l'API complete moderne + legacy
  • Le fallback mysql-async ajoute un shim MySQL.ready pour que accounts.lua ne crash pas (l'API moderne .await n'est toujours pas disponible sur mysql-async — installez oxmysql pour que le systeme de comptes fonctionne)
  • Bloc d'erreur rouge visible quand aucun driver n'est detecte, avec les instructions d'installation

v3.4.1 — Double support SQL + Suivi audio CarPlay

2026-04-20
  • Double support SQL — HZ-Television detecte maintenant automatiquement oxmysql ou mysql-async au demarrage et synthetise un shim MySQL.Async / MySQL.Sync au-dessus de celui qui tourne. Fonctionne directement sur les stacks modernes (QBCore v2, QBox) et legacy (QBCore v1, ancien ESX) — aucun changement de config necessaire
  • Ligne de diagnostic au demarrage — la console serveur affiche maintenant exactement quel driver SQL a ete detecte (detected oxmysql / detected existing MySQL.Async (mysql-async)), et un bloc d'erreur rouge visible si aucun n'est assure avant HZ-Television
  • L'audio CarPlay suit le vehicule — le volume et l'occlusion audio cabine utilisent maintenant la position mondiale en direct du prop CarPlay au lieu des coordonnees de placement stockees, donc le son s'estompe correctement quand le CarPlay d'un autre joueur s'eloigne de vous (etait bloque a la position de placement)
  • L'inclusion codee en dur @oxmysql/lib/MySQL.lua a ete supprimee de fxmanifest.lua — le nouveau server/sql_compat.lua la remplace

v3.4.0 — Protection route, protection abandon, separation CarPlay

2026-04-19
  • Protection routeConfig.Placer.BlockOnRoad (opt-in) effectue un raycast du noeud vehicule le plus proche pendant que l'apercu est actif. Si le prop est sur une route, le contour devient rouge et Entree est bloque. Le placement CarPlay en vehicule est exempt
  • Protection abandonConfig.Placer.MaxPerPlayer limite stricte par identifiant + Config.Placer.AutoCleanupDays pour les proprietaires inactifs + Config.Placer.AutoCleanupInterval tick periodique
  • Colonne last_seen sur hz_television_placed + hz_carplay_placed, rafraichie a playerJoining — migration additive au demarrage
  • Commande admin /tvcleanlist (top 20 proprietaires par inactivite), run (declencher nettoyage immediatement), purge (supprimer tous les placements d'un joueur). Protege par ACE via Config.Placer.CleanupAdminPermission. Aussi exports["HZ-Television"]:RunHZTVCleanup()
  • Assets CarPlay externalises dans HZ-PropsCarplay — les 12 variantes (hz_carplay, hz_carplay_1..11) vivent maintenant dans une ressource legere separee. ensure HZ-PropsCarplay est maintenant requis. La calibration est deplacee dans HZ-PropsCarplay/calibration.json, chargee et fusionnee au demarrage
  • QoL gizmo CarPlay — vehicule fige + vitesse mise a zero pendant toute la duree du placement, controles vehicule desactives (keepVehicleControls = false), camera premiere personne calee a heading=0 / pitch=0 pour regarder droit devant au passage en vue cockpit

v3.3.0 — SmartTV partout + Raycast cylindrique

2026-04-18
  • SmartTV sur panneaux et cinema — l'interface Smart TV interactive complete fonctionne maintenant sur les ecrans cinema (prop_curved_screen_s/m/l) et les grands panneaux vanilla GTA V (prop_huge_display_01/02) via Config.BillboardUseSmartTV
  • Detection automatique render target — l'heuristique dict == name detecte les textures render target vanilla (echec silencieux de AddReplaceTexture) et bascule vers le pipeline DrawToRenderTarget correct, affichant enfin le contenu DUI de maniere fiable sur les grands panneaux
  • Raycast cylindrique du curseur — calcul mathematique reel d'intersection rayon ↔ cylindre pour les ecrans courbes, avec config par modele Curve = { Radius, Arc, Invert }. Pre-calibre d'apres les dimensions mesurees dans Blender pour les 3 ecrans cinema. Curve.Invert = true pour les props qui courbent vers le spectateur. RaycastMaxDistance dynamique = distance camera-ecran x 2
  • Apercu en direct /tvcfg — superposition cyan semi-transparente dessinee sur le prop pendant la calibration. Plat → quad unique, courbe → 16 segments d'arc construits avec la meme formule que le raycast (apercu = zone de clic)
  • Occlusion audio cabine CarPlay (Web Audio) — BiquadFilter lowpass (600 Hz scelle → 2 200 Hz toutes portieres ouvertes) + peaking bass shelf a 80 Hz (+6 dB scelle, diminue avec l'ouverture des portieres) + GainNode master (25% scelle → 70% ouvert). Transitions lisses de 80 ms, etat par portiere (avant/arriere x G/D), portee cabine 5 m, audio propre et complet pour conducteur + passagers
  • /tvcfg localise — 58 cles de locale en en / fr / es / de pour le configurateur admin. Distance d'interaction target augmentee de 4 m → 25 m pour les grands panneaux
  • Correctifs — grands panneaux restant noirs (render target), target CarPlay revenant a "Turn On" en roulant (verification d'alimentation par coordonnees → par entite), "Power Off" manquant sur les ecrans SmartTV, mode streamer ne mutant pas les ecrans nouvellement actives, /carplay Interact fermant la SmartTV, rotation AZERTY dans le gizmo, inclinaison camera en vehicule (la camera correspond maintenant a la rotation complete de l'entite), cascade de bones dashboard avec offsets initiaux pre-calibres, Scale des ecrans cinema S/M corriges d'apres les dimensions Blender

v3.2.0 — CarPlay : Smart TV en vehicule

2026-04-17
  • Item hz_carplay — nouvel item d'inventaire qui monte une Smart TV sur le tableau de bord de n'importe quel vehicule. Utilisez-le assis dans la voiture et un gizmo clavier 3D prend le controle
  • 12 variantes a texture isolee (hz_carplay, hz_carplay_1..11) avec un pool dynamique cote client — placements illimites, 12 plus proches rendus, chaque variante a son propre TXD pour que chaque voiture ait du contenu independant
  • Synchronisation multi-joueur par plaque — placement, etat d'alimentation, contenu et retrait sont synchronises par plaque de vehicule pour que tout survive aux deplacements, respawns, redemarrages. Persistance par vehicule dans hz_carplay_placed
  • Options target apparaissent dynamiquement selon l'etat d'alimentation — Turn On / SmartTV / Interact / Turn Off / Remove
  • Commandes /carplay_on, /carplay (F5), /carplayremove
  • Supporte aussi le placement statique — les props CarPlay peuvent etre places hors vehicule comme ecrans de table classiques
  • Module gizmo clavier partage expose comme exports['HZ-Bridge']:GizmoAttached(entity, parent, boneIndex, initialOffsets, options) — axes locaux au parent, compatible AZERTY/QWERTY, passthrough optionnel des controles vehicule
  • Nettoyage des locales — toutes les chaines CarPlay + notifications mode streamer deplacees dans les fichiers locale en/fr/es/de

v3.1.0 → v3.1.2 — Perf, Props personnalises, Playlist, Routing Buckets

2026-04-092026-04-10
  • Cache de sommetsComputeSpritePolyData() met en cache la geometrie 3D par ecran ; le thread de rendu descend a 2x DrawSpritePoly par frame. 6 TV a l'ecran = cout d'1 TV avant (\~0.02 ms vs \~0.08 ms)
  • Synchronisation video plus stricte — heartbeat 15 s → 5 s, resync spectateur 30 s → 15 s, tolerance de derive 3 s → 1.5 s, anti-rollback 5 s → 2 s, precision temporelle 1 s → 0.1 s
  • 9 nouveaux props personnaliseshz_tv_s/m/l (mural), hz_tv_s/m/l_stand (sur pied), curved_screen_s/m/l (cinema). Tous des assets originaux, aucun pack externe
  • Playlist personnelle — file d'attente en boucle liee au compte (jusqu'a 50 elements par compte), duree par element, filtre Tous/Videos uniquement, indicateur actif, exports StartPlaylistOnTelevision / StopPlaylistOnTelevision
  • Support complet des routing buckets — etat TV par bucket, evenements isoles par bucket, verrous operateur par bucket, picker LB Phone filtre par bucket, boucle de playlist tourne independamment par instance
  • Correctif Font Awesome CSS deplace dans , chemins de polices corriges, preload woff2 ajoute

v3.0.0 — Redesign Apple TV, 14 plateformes, comptes

2026-04-01
  • Interface Smart TV reconstruite — ecran d'accueil style tvOS (dock flottant avec icones rectangulaires, glassmorphism), Centre de Controle (Power, Login/Logout, Parametres, Favoris, Historique, Playlist, Theme), theme clair/sombre avec 80+ overrides, saisie URL inline, bulle de lecture avec seek sur la timeline
  • Systeme de comptes — connexion liee a l'identifiant joueur, favoris / historique / parametres par utilisateur, persistant via oxmysql
  • 14 plateformes — Rumble, Odysee, Streamable, Facebook Video, Youku ajoutes aux existants YouTube / Twitch / Kick / Bilibili / video directe / images / navigateur. Logique de fallback : URL inconnue → video native → iframe navigateur
  • SDK natif TwitchTwitch.Player pour volume / mute / pause / play
  • Synchronisation video temps reel — systeme heartbeat, anti-rollback, resync spectateur, position exacte a la connexion
  • Synchronisation navigateur — URL, clics, scroll relayes de l'operateur aux spectateurs
  • Panneau de controle NUI billboard — design cyberpunk "Ghost Protocol", 6 apps, curseur distance sonore (10–200 m), ecran eteint par defaut (DUI cree uniquement quand du contenu est envoye)
  • Systeme de locales — fichiers separes config/locales/{en,fr,es,de}.lua, locales embarquees dans les evenements de synchronisation

v2.3.0 — TV illimitees (nouveau moteur de rendu)

2026-03-12
  • Reecriture du rendu de Scaleform vers DrawSpritePoly — la texture DUI est maintenant rendue comme geometrie 3D directement (2 triangles par ecran), pas d'intermediaire Flash/GFX
  • Suppression de la limite de 5 TV du moteur — plus de limite de TV simultanees
  • Dependance externe Flash/GFX texture-renderer supprimee — le rendu est maintenant entierement dans le script
  • Prevention du Z-fighting — quad de l'ecran decale de 0.002 unites le long de la normale

v2.2.0 — Interaction raycast

2026-03-11
  • Nouveau mode d'interaction par curseur libre en raycast — le joueur reste visible et peut regarder autour ; le curseur interagit directement avec la surface 3D de l'ecran via un calcul rayon ↔ plan
  • L'ancien mode camera verrouillee reste disponible via Config.Display.InteractionMode = 'camera'

v2.1.0 — Passe visuelle Apple TV / iOS 26

2026-03-11
  • Reecriture CSS complete de la Smart TV — fond d'ecran vif, dock en verre depoli, animations de survol avec rebond, effet de glissement du label, pilule superieure style tvOS (horloge + avatar)
  • Synchronisation d'images, synchronisation de volume, NUI-focus-on-interact, corrections de gestion de la table de mise a l'echelle
  • backdrop-filter: blur() supprime pour le FPS — remplace par des fonds opaques

v2.0.0 — Multi-Framework + Placement par inventaire

2026-02
  • Bridge multi-framework avec detection automatique (QBCore / ESX / Standalone)
  • Systeme de placement par inventaire avec controles 3D et persistance optionnelle
  • Configurateur en direct (/tvcfg) avec gizmo 3D
  • Support des panneaux d'affichage pour les grands ecrans exterieurs
  • Audio base sur la distance avec portee configurable
  • Chaines pre-enregistrees
  • Support multi-inventaire (ox, qb, qs, ps, codem, origen, core, tgiann)
  • Exports client et serveur pour l'integration complete

v1.x — Versions precedentes

v1.5.0 (2025-12)

  • Ajout du support des streams Kick, correction du bug de synchronisation Twitch, amelioration des performances de rendu

v1.4.0 (2025-10)

  • Support Vimeo et Dailymotion, correction du bug d'affichage sur certains modeles TV, commande /tvoff

v1.3.0 (2025-08)

  • Amelioration du systeme multi-TV, correction du probleme de son persistant, support M3U8 (HLS)

v1.2.0 (2025-06)

  • Livestreams Twitch, mode Power ON/OFF, amelioration de la synchronisation des joueurs

v1.1.0 (2025-04)

  • Support des images (PNG, JPG, GIF), correction du bug de texture noire au demarrage, nouveaux modeles TV par defaut

v1.0.0 (2025-02)

  • Version initiale

Mises a jour automatiques : les mises a jour sont livrees via FiveM Keymaster. Vous recevrez une notification Discord quand une nouvelle version sera publiee.

Support des anciennes versions

VersionSupportFin de support
v3.4.xActif
v3.3.xActif
v3.2.xMaintenance seuleJuillet 2026
v3.1.x et avantNon supporteAvril 2026
Il est fortement recommande de toujours utiliser la derniere version pour beneficier des correctifs et des nouvelles fonctionnalites.