Changelog
v3.4.6 — Correctif install.sql mode strict + amelioration recovery CarPlay
2026-04-30
install.sqlError 1067 surlast_login—timestamp DEFAULT NULLetait rejete par les instances MariaDB en mode strictSQL_MODE. La colonne est maintenant declareetimestamp NULL DEFAULT NULLdansinstall.sqlet dans l'auto-creation dansserver/accounts.lua, donc les installations neuves sans le fichier SQL fonctionnent aussi sur les bases en mode strictinstall.sqlError 1075 surhz_carplay_placed— la table avaitid INT AUTO_INCREMENTmais seulement uneUNIQUE KEYsurplate; MariaDB exige que la colonne auto-increment soit une cle. Ajout dePRIMARY KEY (id). Le chemin d'auto-creation dansserver/placer.luaetait deja correct, donc seul l'import manuel deinstall.sqletait affecte- Le CarPlay n'est plus orphelin apres un crash — quand une collision violente detache le prop du vehicule parent, l'invariant
not-attacheddu 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 viaPoweredOn[cpId]donc le DUI se rallume automatiquement
Mise a jour
- Re-importez
install.sqlune fois apres la mise a jour —CREATE TABLE IF NOT EXISTSignore 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 = truepour voir la raison de liberationnot-attacheddans 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.Debugsont maintenant conditionnees par celui-ci :[HZ-Television] Screen → DRAWSPRITEPOLY,[HZ-TV RT] name=..., etDrawToRenderTargetDebug. 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_volumeperdait la valeur finale si vous relachiez le curseur en cours de fenetre. Maintenant un envoi trailing-edge (mis en file viapendingVolume) 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=1a 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)
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 }dansconfig.lua
v3.4.4 — Resilience DB + Revision des locales
2026-04-22
- Fichier
install.sqlfourni comme fallback manuel. Si l'etapeCREATE TABLE IF NOT EXISTSautomatique ne peut pas creer une ou plusieurs tables (permissionCREATEmanquante, mode SQL STRICT, etc.), la console serveur affiche maintenantCREATE TABLE+ pointe vers le fichier fourni. Executez-le une fois avec un utilisateur MySQL privilegie (FAILED: mysql -u ... -p) et redemarrez HZ-Television< install.sql - Chemin de connexion fail-cleanly — quand une table manque au runtime, le callback
hz_tv:loginretourne maintenant{ success = false, reason = 'db_not_ready' }au lieu de lancerTable 'yourdb.hz_tv_sessions' doesn't existen pleine requete. Un log serveur rouge avertit l'admin. Conditionne par un nouveau flag_G.HZ_TV_DB_READYdefini apres que tous les CREATEs reussissent - Bootstrap DB resilient — chaque appel
CREATE TABLEest maintenant enveloppe danspcall; 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 idempotente —
install.sqlne contient que desCREATE TABLE IF NOT EXISTS, donc l'importer sur une base saine est inoffensif install.sqlcouvre 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
FindVehicleou une condition de course pool-not-ready ; le serveur diffuse maintenantspawnCarplaya 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 aDoesEntityExist/IsEntityAttached, que FiveM peut continuer a rapporter commetruependant plusieurs secondes apres qu'un script de garage ait effectivement supprime le vehicule - Visibilite debug — definissez
Config.Debug = truepour 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.luaappelle l'API moderne oxmysql-only (MySQL.ready,MySQL.query.await,MySQL.single,MySQL.scalar,MySQL.insert) server/sql_compat.luacharge maintenantoxmysql/lib/MySQL.luadirectement viaLoadResourceFile+load()quand oxmysql est detecte, donnant a HZ-Television l'API complete moderne + legacy- Le fallback mysql-async ajoute un shim
MySQL.readypour queaccounts.luane crash pas (l'API moderne.awaitn'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
oxmysqloumysql-asyncau demarrage et synthetise un shimMySQL.Async/MySQL.Syncau-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 avantHZ-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.luaa ete supprimee defxmanifest.lua— le nouveauserver/sql_compat.luala remplace
v3.4.0 — Protection route, protection abandon, separation CarPlay
2026-04-19
- Protection route —
Config.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 abandon —
Config.Placer.MaxPerPlayerlimite stricte par identifiant +Config.Placer.AutoCleanupDayspour les proprietaires inactifs +Config.Placer.AutoCleanupIntervaltick periodique - Colonne
last_seensurhz_television_placed+hz_carplay_placed, rafraichie aplayerJoining— migration additive au demarrage - Commande admin
/tvclean—list(top 20 proprietaires par inactivite),run(declencher nettoyage immediatement),purge(supprimer tous les placements d'un joueur). Protege par ACE viaConfig.Placer.CleanupAdminPermission. Aussiexports["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-PropsCarplayest maintenant requis. La calibration est deplacee dansHZ-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 aheading=0 / pitch=0pour 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) viaConfig.BillboardUseSmartTV - Detection automatique render target — l'heuristique
dict == namedetecte les textures render target vanilla (echec silencieux deAddReplaceTexture) et bascule vers le pipelineDrawToRenderTargetcorrect, 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 = truepour les props qui courbent vers le spectateur.RaycastMaxDistancedynamique = 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
/tvcfglocalise — 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,
/carplayInteract 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-09 → 2026-04-10
- Cache de sommets —
ComputeSpritePolyData()met en cache la geometrie 3D par ecran ; le thread de rendu descend a 2xDrawSpritePolypar 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 personnalises —
hz_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 Twitch —
Twitch.Playerpour 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
| Version | Support | Fin de support |
|---|---|---|
| v3.4.x | Actif | — |
| v3.3.x | Actif | — |
| v3.2.x | Maintenance seule | Juillet 2026 |
| v3.1.x et avant | Non supporte | Avril 2026 |
Il est fortement recommande de toujours utiliser la derniere version pour beneficier des correctifs et des nouvelles fonctionnalites.
