Installation

Schritt 1 — Download

Nach Ihrem Kauf auf hzscripts.com/shop erhaelt Ihr FiveM Keymaster-Konto zwei separate Assets:

  1. Melden Sie sich auf keymaster.fivem.net an (oder portal.cfx.re/assets)
  2. Gehen Sie zu Granted Assets
  3. Laden Sie beide herunter:
* hz_television — das Haupt-Skript * hz_televisionprops — die 12 DashScreen-Prop-Varianten fuer Fahrzeuge (als dediziertes Asset bereitgestellt, damit Prop-Updates keinen erneuten Download der gesamten Logik-Ressource erzwingen)
Beide Downloads sind erforderlich. Beide Assets erscheinen als separate Eintraege in Ihrem Keymaster-Portal — Sie muessen beide herunterladen. Falls Sie nur hz_television herunterladen, werden die 12 DashScreen-Prop-Modelle nicht gestreamt und die DashScreen-Platzierung bleibt bei lib.requestModel stumm haengen.
Wichtig: Verwenden Sie dasselbe FiveM-Konto, das mit Ihrer Tebex-Lizenz verknuepft ist. Die Skripte sind durch Escrow geschuetzt und erfordern eine gueltige Lizenz.

Schritt 2 — Abhaengigkeiten

Erforderlich

  1. hz_lib — kostenloses Asset von hzscripts.com/shop. Uebernimmt die Framework- / Inventar- / Target- / Menue- / Benachrichtigungserkennung. Verwenden Sie immer die neueste Version — jede HZ-Television-Version wird mit dem neuesten Bridge-Build getestet. Muss vor HZ-Television starten. Siehe hz_lib Installation.
  2. HZ-TelevisionProps — separat von Keymaster neben HZ-Television heruntergeladen (siehe Schritt 1). Streamt die 12 DashScreen-Prop-Varianten (hz_dashscreen + hz_dashscreen_1..11) + deren Kalibrierungs-JSON. Muss vor HZ-Television starten.
  3. Ein Menuesystem — mindestens eines der folgenden:
* ox\_lib (empfohlen) — overextended/ox\_lib * qb-menu + qb-input — mitgeliefert bei QBCore / QBox
  1. Ein SQL-Treiber (erforderlich fuer Persistenz, Konten, Playlists, Verlassens-Cleanup). HZ-Television erkennt beide automatisch beim Start:
* oxmysql (empfohlen — modern, aktiv gepflegt) — overextended/oxmysql * mysql-async (Legacy-QBCore-v1-Stack) — weiterhin ueber Kompatibilitaets-Shim unterstuetzt

Optional

  • ox\_target oder qb-target — fuer Fadenkreuz-Interaktion (ansonsten TextUI / DrawText3D-Fallback)
  • lb-phone — erforderlich fuer die Begleit-Telefon-App lb-hztelevision
Aktualisieren Sie hz_lib vor dem Update von HZ-Television. Jede Hz-Script-Version wird mit dem neuesten Bridge-Build getestet — inkompatible Versionen verursachen "export not found"-Fehler oder fehlende Erkennung beim Start. Laden Sie hz_lib von hzscripts.com/shop jedes Mal neu herunter, wenn Sie eine neue HZ-Television-Version holen.
Doppelte SQL-Kompatibilitaet (v3.4.1+) — HZ-Television erkennt beim Start automatisch, ob Sie oxmysql oder mysql-async verwenden und installiert den entsprechenden MySQL.Async-Shim. Sie sehen eine dieser Zeilen in der Serverkonsole beim Start:

[hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed
[hz_television] SQL compat: detected existing MySQL.Async (mysql-async or compatible)

Falls Sie eine rote ERROR: no SQL resource detected-Meldung sehen, stellen Sie sicher, dass ensure oxmysql (oder ensure mysql-async) vor ensure hz_television in Ihrer server.cfg steht.

hz_lib zentralisiert die Erkennung. Sie konfigurieren Framework / Target / Inventar nicht mehr pro Skript — setzen Sie sie einmal in hz_lib/config.lua und jedes Hz-Script erbt sie. Siehe hz_lib Konfiguration.

Schritt 3 — Dateien

  1. Entpacken Sie beide Archive (hz_television.zip und hz_televisionprops.zip), die Sie in Schritt 1 von Keymaster heruntergeladen haben
  2. Platzieren Sie beide resultierenden Ordner in Ihrem resources/-Verzeichnis — ein gemeinsamer Kategorieordner wie [hz-scripts]/ haelt alles ordentlich
server/
├── resources/
│   ├── ox_lib/
│   ├── oxmysql/                    ← oder mysql-async (beide werden unterstuetzt)
│   ├── [hz-scripts]/
│   │   ├── hz_lib/
│   │   ├── hz_televisionprops/        ← 2. Keymaster-Download (12 DashScreen-Props + calibration.json)
│   │   ├── hz_television/          ← 1. Keymaster-Download (das Haupt-Skript)
│   │   │   ├── client/
│   │   │   ├── server/
│   │   │   ├── html/
│   │   │   ├── config.lua
│   │   │   ├── fxmanifest.lua
│   │   │   └── ...

Schritt 4 — Inventar-Items

HZ-Television wird mit 10 platzierbaren Items geliefert. Vorkonfigurierte Item-Definitionen fuer jedes unterstuetzte Inventar befinden sich in hz_television/items/.

Mitgelieferte Items

ItemPropBeschreibung
hz_tv_s / hz_tv_m / hz_tv_lhz_tv_*Smart TV Wandmontage — klein / mittel / gross
hz_tv_s_stand / hz_tv_m_stand / hz_tv_l_standhz_tv_*_standSmart TV mit Standfuss — klein / mittel / gross
curved_screen_s / curved_screen_m / curved_screen_lprop_curved_screen_*Gebogene Kinoleinwaende
hz_dashscreenhz_dashscreen + 11 VariantenDashScreen im Fahrzeug (Platzierung ueber Tastatur-Gizmo)

Fuer ox\_inventory

Oeffnen Sie ox_inventory/data/items.lua und fuegen Sie den Inhalt von hz_television/items/ox_inventory.txt hinzu (10 Eintraege einschliesslich hz_dashscreen).

Beispieleintrag:

['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'
    }
},

Fuer qb-inventory / qs-inventory / ps-inventory

Kopieren Sie den Inhalt der entsprechenden hz_television/items/<inventory>.txt-Datei in die Item-Datei Ihres Inventars.

Alle Items verwenden dasselbe Client-Event HZ-Television:useItem, das das Skript abfaengt und zum richtigen Platzierungsfluss weiterleitet (statisches Gizmo fuer TVs, Tastatur-Gizmo im Fahrzeug fuer DashScreen).

Schritt 5 — Datenbank (empfohlen)

Die Datenbank ist optional, aber dringend empfohlen — ohne sie verlieren Sie die Persistenz platzierter TVs, das Kontosystem, die persoenliche Playlist und die Verlassens-Cleanup-Funktion.

Aktivieren Sie in config.lua:

Config.Placer = {
    Persistence        = true,   -- platzierte TVs + DashScreens ueberleben Neustarts
    MaxPerPlayer       = 0,      -- 0 = unbegrenzt, N = Limit pro Besitzer-Identifikator
    AutoCleanupDays    = 0,      -- 0 = deaktiviert, N = automatische Loeschung nach N Tagen Inaktivitaet
    AutoCleanupInterval = 6,     -- Stunden zwischen Cleanup-Zyklen (0 = nur beim Start)
    BlockOnRoad        = false,  -- true = blockiert Prop-Platzierung auf Strassen (DashScreen ausgenommen)
    CleanupAdminPermission = 'admin',  -- ACE-Berechtigung fuer /tvclean
}

Die folgenden Tabellen werden beim ersten Start automatisch erstellt (alle verwenden CREATE TABLE IF NOT EXISTS + additive ALTER TABLE ADD COLUMN IF NOT EXISTS-Migrationen):

  • hz_television_placed — statisch platzierte TVs (Wand, Standfuss, gebogen, Werbetafeln)
  • hz_dashscreen_placed — DashScreen-Platzierungen, indiziert nach Fahrzeugkennzeichen
  • hz_tv_users, hz_tv_sessions, hz_tv_favorites, hz_tv_history, hz_tv_playlists, hz_tv_playlist_items — Konto / Login / Favoriten / Verlauf / Playlists (befuellt bei der ersten Smart-TV-Anmeldung)

Manuelle Installation (Fallback — v3.4.3+)

Falls eine Tabelle nicht automatisch erstellt werden kann (MySQL-Benutzer ohne CREATE-Berechtigung, Verbindungsstring zeigt auf falsche Datenbank usw.), sehen Sie direkt nach [hz_television] SQL compat: ... eine rote Fehlermeldung in der Serverkonsole mit dem genauen Tabellennamen + Fehler. Fuehren Sie in diesem Fall die mitgelieferte install.sql manuell aus:

mysql -u <user> -p <database> < resources/[standalone]/hz_television/install.sql

...oder oeffnen Sie hz_television/install.sql in phpMyAdmin / HeidiSQL / DBeaver und fuehren Sie es auf der Datenbank Ihres Servers aus. Starten Sie dann hz_television neu. Das Skript enthaelt nur CREATE TABLE IF NOT EXISTS-Anweisungen, daher ist eine doppelte Ausfuehrung sicher.

Nur v3.4.3+ — der alte Fehler Table 'yourdb.hz_tv_sessions' doesn't exist bei der Anmeldung schlaegt jetzt sauber mit einer db_not_ready-Antwort fehl, anstatt abzustuerzen, und das Server-Log verweist auf install.sql. Fruehere Versionen liessen den Sitzungsfluss abstuerzen.

Schritt 6 — server.cfg

Fuegen Sie die Ressourcen in Ihre server.cfg in dieser Reihenfolge ein:

# Abhaengigkeiten (muessen VOR hz_lib starten)
ensure oxmysql                # oder `ensure mysql-async` — HZ-Television unterstuetzt beide
ensure ox_lib                 # oder qb-menu + qb-input
ensure ox_target              # oder qb-target (optional)

# Framework (falls zutreffend)
ensure qbx_core               # oder ensure qb-core, oder ensure es_extended
# ensure qb-core
# ensure es_extended

# HZ-Scripts — Reihenfolge ist wichtig
ensure hz_lib              # uebernimmt automatische Erkennung
ensure hz_televisionprops        # streamt die 12 DashScreen-Prop-Varianten (separater Keymaster-Download)
ensure hz_television          # die TV-Logik-Ressource

Die Startreihenfolge ist entscheidend. hz_lib, hz_televisionprops und Ihr SQL-Treiber (oxmysql oder mysql-async) muessen alle vor hz_television starten. Falls hz_televisionprops nicht mit ensure geladen wird, werden die 12 DashScreen-Varianten-Modelle nicht gestreamt und die DashScreen-Platzierung scheitert stumm bei lib.requestModel. Falls kein SQL-Treiber geladen ist, funktioniert die Persistenz stumm nicht mehr.

Schritt 7 — Konfiguration

Oeffnen Sie hz_television/config.lua und passen Sie die Einstellungen an. Siehe Konfiguration fuer Details zu jeder Option.

Wichtige Punkte vor der Produktivsetzung:
  • Config.Locale'en' / 'fr' / 'es' / 'de'
  • Config.Permissions — wer /tvcfg verwenden, TVs platzieren und TVs nutzen darf
  • Config.Placer.Persistencetrue fuer Datenbank-Speicherung
  • Config.Placer.BlockOnRoadtrue falls Platzierung auf Strassen blockiert werden soll
  • Config.Placer.MaxPerPlayer + Config.Placer.AutoCleanupDays — Verlassensschutz
  • Config.BillboardUseSmartTV — welche Werbetafel-/Kinomodelle die vollstaendige Smart-TV-Oberflaeche verwenden sollen (Standard: die 3 gebogenen Kino-Props + 2 grosse Vanilla-Werbetafeln)
Die Einstellungen fuer Framework / Target / Menue / Benachrichtigung / Inventar werden in hz_lib verwaltet — siehe hz_lib Konfiguration.

Schritt 8 — Ueberpruefung

  1. Starten Sie den Server
  2. Die Konsole sollte (in dieser Reihenfolge) anzeigen:
* [hz_lib] <framework> detected, <inventory> detected, ... * [hz_televisionprops] shared/models.lua loaded [hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed (oder detected existing MySQL.Async (mysql-async or compatible))* * [hz_television] v3.4.1 loaded successfully * [hz_television] Database tables initialized
  1. Verbinden Sie sich im Spiel
  2. Gehen Sie zu einem TV-Prop (Wandfernseher, gebogene Kinoleinwand, oder verwenden Sie das Item hz_dashscreen in einem Fahrzeug)
  3. Waehlen Sie Power On -> Smart TV -> fuegen Sie eine Video-URL ein
Fertig! Wenn sich die Smart-TV-Oberflaeche oeffnet und Ihre URL abgespielt wird, funktioniert das Skript. Gehen Sie zu Konfiguration fuer die Anpassung von Modellen, Berechtigungen und Verlassensschutz-Schwellenwerten.

Schnelle Fehlerbehebung

Das Skript startet nicht

Pruefen Sie:


  • Die Ordner heissen korrekt hz_television, hz_televisionprops, hz_lib (Gross-/Kleinschreibung beachten)

  • Alle drei sind in der server.cfg mit ensure in der richtigen Reihenfolge geladen (Bridge -> TelevisionProps -> Television)

  • Ihre FiveM-Lizenz ist auf Keymaster gueltig

  • Ein Menuesystem (ox_lib oder qb-menu) wird vor hz_lib mit ensure geladen

Fehler "Framework not detected"

Die Erkennung wird von hz_lib uebernommen. Stellen Sie sicher:


  • es_extended, qb-core oder qbx_core wird mit ensure vor hz_lib geladen

  • hz_lib wird mit ensure vor HZ-Television geladen

  • Pruefen Sie die hz_lib-Konsolenzeile zur Bestaetigung der automatischen Erkennung

  • Erzwingen Sie bei Bedarf ein Framework im config.lua von hz_lib — z. B. HZBridge.Framework = 'esx'

DashScreen-Platzierung scheitert stumm

Haeufigste Ursache: hz_televisionprops ist nicht gestartet. lib.requestModel(hz_dashscreen) haengt endlos, weil das Modell nicht gestreamt wird.

hz_televisionprops ist ein separater Download auf Keymaster — es ist nicht in hz_television enthalten. Bestaetigen Sie:


  • Beide Assets sind in Ihren Keymaster Granted Assets gelistet und wurden heruntergeladen

  • Der Ordner hz_televisionprops befindet sich neben hz_television in resources/

  • ensure hz_televisionprops steht in Ihrer server.cfg vor ensure hz_television

  • Die Ressource wird in der Serverkonsole als started aufgefuehrt

Platzierte TVs werden nach Neustart nicht gespeichert / Fehler "no SQL resource detected"

HZ-Television benoetigt entweder oxmysql oder mysql-async im laufenden Betrieb. Beim Start zeigt die Serverkonsole eine der folgenden Meldungen:

[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)

Falls die rote Fehlermeldung erscheint:


  • Stellen Sie sicher, dass ensure oxmysql (oder ensure mysql-async) in der server.cfg steht

  • Es muss vor ensure hz_television platziert sein — wenn die SQL-Ressource danach laedt, wird die Runtime-Erkennung verfehlt

  • Beide Treiber werden unterstuetzt — waehlen Sie einen; fuehren Sie nicht beide gleichzeitig aus

Fehler "Table 'yourdb.hz_tv_sessions' doesn't exist" wenn ein Spieler sich am Smart TV anmeldet

Der automatische Erstellungsschritt konnte eine oder mehrere Tabellen nicht anlegen. Sie sehen rote Zeilen direkt nach SQL compat: detected ... waehrend des Starts:

[hz_television] CREATE TABLE hz_tv_sessions FAILED: <error>
[hz_television] Import hz_television/install.sql manually to create the missing tables.

Behebung (v3.4.3+):

mysql -u <user> -p <database> < resources/[standalone]/hz_television/install.sql

Oder oeffnen Sie hz_television/install.sql in phpMyAdmin / HeidiSQL / DBeaver und fuehren Sie es auf der Datenbank Ihres Servers aus. Starten Sie dann hz_television neu. Die Datei enthaelt nur CREATE TABLE IF NOT EXISTS-Anweisungen — eine doppelte Ausfuehrung ist sicher.

Haeufige Ursachen fuer fehlgeschlagene automatische Erstellung:


  • Der in set mysql_connection_string konfigurierte MySQL-Benutzer hat keine CREATE-Berechtigung auf der Zieldatenbank -> vergeben Sie CREATE, ALTER, INDEX und starten Sie neu

  • Der Verbindungsstring zeigt auf eine Datenbank, die der Benutzer lesen, aber nicht beschreiben kann -> ueberpruefen Sie den Datenbanknamen

  • MySQL laeuft im STRICT-Modus mit inkompatiblen Sitzungseinstellungen -> install.sql setzt explizit SQL_MODE = '' am Anfang, um dies zu umgehen


Falls Sie SQL Error 1067 (Invalid default value for 'last_login') oder SQL Error 1075 (Incorrect table definition; there can be only one auto column and it must be defined as a key) beim Import von install.sql sehen, verwenden Sie eine aeltere Version von HZ-Television. Beide Fehler wurden in v3.4.6 behoben — aktualisieren Sie und fuehren Sie die neue install.sql erneut aus.

Ab v3.4.3+ schlaegt der Anmeldefluss jetzt sauber mit db_not_ready fehl, wenn Tabellen fehlen, anstatt mitten in der Abfrage abzustuerzen.

Der Bildschirm bleibt schwarz / nichts wird angezeigt
  • Verwenden Sie /tvcfg in der Naehe des TVs, um Scale/Offset/Rotation zu kalibrieren (die Live-Cyan-Vorschau zeigt genau, wo sich die Cursor-Klickzone befindet)
  • Testen Sie zuerst mit einer einfachen direkten Videodatei (kein Livestream)
  • Pruefen Sie die F8-Konsole auf JavaScript-Fehler
  • Fuer grosse Vanilla-Werbetafeln stellen Sie sicher, dass das Modell in Config.BillboardUseSmartTV steht (die automatische Render-Target-Erkennung in v3.3 uebernimmt dies)
Kein Ton oder globaler Ton
  • Erhoehen Sie Config.Display.MaxSoundDistance in config.lua
  • Stellen Sie sicher, dass der TV eingeschaltet ist
  • Gehen Sie naeher heran (die Lautstaerke nimmt zwischen MinSoundDistance und MaxSoundDistance ab)
  • Speziell fuer DashScreen: Audio hat eine Kabinen-Reichweite von 5 m mit Web-Audio-Okklusion. Fahrer + Beifahrer hoeren sauberen, ungefilterten Ton; Zuhoerer ausserhalb erhalten einen Lowpass-gefilterten und lautstaerkegedaempften Ton
TV-Items erscheinen nicht im Inventar
  • Fuegen Sie die Items aus hz_television/items/<inventory>.txt in die Item-Datei Ihres Inventars ein
  • Starten Sie den Server komplett neu, nachdem Sie Items hinzugefuegt haben (nicht nur die Ressource)
  • Fuer ox\_inventory ist der Pfad ox_inventory/data/items.lua
  • Fuer QBCore/QBox ist es qb-core/shared/items.lua oder qbx_core/shared/items.lua