FAQ
Allgemein
Ist das Skript mit meinem Framework kompatibel?
HZ-Television unterstuetzt QBCore, QBox, ESX und Standalone. Die Erkennung wird von hz_lib uebernommen — einmal dort konfigurieren und HZ-Television (+ jedes andere Hz-Script) erbt es automatisch.
Kann ich mehrere TVs mit unterschiedlichem Inhalt gleichzeitig haben?
Ja — das ist eines der Hauptverkaufsargumente. Jeder TV in der Naehe zeigt seinen eigenen unabhaengigen Inhalt (keine Beschraenkung auf 5 Bildschirme mehr seit v2.3, keine Beschraenkung auf 12 TVs seit dem DrawSpritePoly-Rewrite). Auch die DashScreen-Funktion — jedes Fahrzeug mit einem hz_dashscreen-Item erhaelt seine eigene texturisolierte Variante, sodass 12 Autos im Verkehr = 12 verschiedene Smart TVs.
Wie viele Spieler koennen denselben TV gleichzeitig schauen?
Unbegrenzt. Die Echtzeitsynchronisation erfolgt ueber kennzeichen- und koordinatenbasierte Events (Heartbeat 5 s, Drifttoleranz 1,5 s, Praezision 0,1 s, sofortiges Seek/Play/Pause). Spieler, die spaeter dazukommen, erhalten die exakte Wiedergabeposition beim Verbinden.
Und Routing Buckets / Instanzen?
Vollstaendig Routing-Bucket-kompatibel seit v3.1.2. TVs, Werbetafeln, Betreibersperren und Playlist-Schleifen sind alle pro Instanz isoliert. Zwei TVs an denselben Koordinaten in verschiedenen Instanzen ueberschneiden sich nie.
Verbraucht es viele Ressourcen?
Client im Ruhezustand: ~0,01 ms. Sechs aktive TVs auf dem Bildschirm: ~0,03 ms (DrawSpritePoly-Vertexdaten im Cache). Server: ~0,00 ms. Siehe Leistung.
Installation
Fehler: "Resource HZ-TelevisionProps not found"
hz_televisionprops wird mit Ihrem HZ-Television-Download (v3.4+) mitgeliefert, muss aber separat in der server.cfg mit ensure geladen werden. Fuegen Sie ensure hz_televisionprops vor ensure hz_television hinzu. Ohne dies werden die 12 DashScreen-Prop-Varianten nicht gestreamt und die DashScreen-Platzierung bleibt stumm bei lib.requestModel haengen.
Fehler: "Menu system not detected"
Das Skript erfordert ox_lib (empfohlen) oder qb-menu + qb-input. Installieren Sie eines davon und laden Sie es mit ensure vor hz_lib (das wiederum vor HZ-Television startet).
TV-Items erscheinen nicht in meinem Inventar
Sie muessen die Items manuell zur Item-Datei Ihres Inventars hinzufuegen. Vorkonfigurierte Ausschnitte befinden sich in hz_television/items/:
ox_inventory.txt->ox_inventory/data/items.luaqb-inventory.txt->qb-core/shared/items.lua(oderqbx_core/shared/items.lua)qs-inventory.txt->qs-inventory/shared/items.lua
Vollstaendiger Server-Neustart erforderlich nach dem Hinzufuegen von Items (nicht nur
restart hz_television).
Ich verwende ak47_inventory — Items werden angezeigt, aber loesen bei Verwendung nichts aus
ak47_inventory gehoert nicht zur automatisch erkannten Liste von hz_lib (ox_inventory, qb-inventory, qs-inventory, ps-inventory, codem-inventory, origen_inventory, core_inventory, tgiann-inventory). Die Bridge faellt auf natives ESX zurueck, aber ak47 faengt Item-Nutzungsevents ab, bevor ESX sie sieht, sodass RegisterUsableItem nie ausgeloest wird.
Behebung gemaess der ak47_inventory-Dokumentation: Verknuepfen Sie den Callback direkt in der Item-Definition mit server.onUse. Oeffnen Sie die ak47-Item-Konfiguration (typischerweise ak47_inventory/shared/items.lua oder ak47_inventory/configs/items.lua) und fuegen Sie hinzu:
["hz_dashscreen"] = {
name = "hz_dashscreen",
label = "DashScreen Screen",
weight = 3000,
type = "item",
close = true,
server = {
onUse = function(source, item)
TriggerClientEvent('hz_television:useItem', source, { name = 'hz_dashscreen' })
end,
},
},
Wiederholen Sie dies fuer hz_television_screen, falls Sie auch Wand-TVs / Kinos verwenden. Legen Sie das entsprechende .png in den UI-Bildordner Ihres ak47. Dann ensure ak47_inventory und ensure hz_television.
SQL Error 1067 oder 1075 beim Import von install.sql
Beides sind MariaDB-Strict-Mode-Ablehnungen, die in v3.4.6 behoben wurden:
- Error 1067 bei
last_login—timestamp DEFAULT NULLerfordert eine expliziteNULL-Deklaration im Strict-Mode. Jetzttimestamp NULL DEFAULT NULL - Error 1075 bei
hz_dashscreen_placed— dieid AUTO_INCREMENT-Spalte benoetigte einenPRIMARY KEY. Jetzt deklariert
install.sql erneut aus. CREATE TABLE IF NOT EXISTS ueberspringt bereits erstellte Tabellen, sodass nur die zwei zuvor fehlgeschlagenen Tabellen erstellt werden. Keine Datenmigration.
Generic_texture_renderer_gfx — brauche ich das?
Nein. Seit v2.3 verwendet die Render-EngineDrawSpritePoly direkt. Die alte Scaleform-Abhaengigkeit wurde entfernt.
Wie aktualisiere ich?
- Laden Sie die neueste Version von keymaster.fivem.net herunter
- Sichern Sie Ihre
config.luaundtv_config.json - Ersetzen Sie alle Dateien ausser diesen beiden
- Pruefen Sie den Changelog auf neue Konfigurationsschluessel
- Starten Sie den Server neu
ensure hz_televisionprops zur server.cfg hinzu und pruefen Sie die neuen Felder Config.Placer.BlockOnRoad / MaxPerPlayer / AutoCleanupDays.
DashScreen (v3.2+)
Wie platziere ich ein DashScreen in meinem Fahrzeug?
- Legen Sie das Item
hz_dashscreenin Ihr Inventar - Steigen Sie in ein Fahrzeug (Fahrersitz)
- Verwenden Sie das Item — ein Vorschau-Prop erscheint auf dem Armaturenbrett und ein Tastatur-Gizmo uebernimmt die Steuerung
- Pfeiltasten = Position, Mausrad = Hoehe, Q/D (oder A/D) = Drehung, Z/S (oder W/S) = Neigung, Enter = Bestaetigen, Escape = Abbrechen
- Nach der Platzierung verwenden Sie Ihr Target-System (ox\_target / qb-target) am Fahrzeug fuer Turn On DashScreen -> Smart TV
Das Fahrzeug driftet waehrend der Gizmo-Anpassung
Behoben in v3.4 — das Fahrzeug wird jetzt automatisch waehrend der gesamten Gizmo-Dauer eingefroren (FreezeEntityPosition + Geschwindigkeit auf Null + Steuerung deaktiviert). Aufgetaut bei Bestaetigung / Abbruch.
Die Kamera schaut nicht nach vorne, wenn ich das DashScreen-Item verwende
Behoben in v3.4 — die Ego-Kamera rastet jetzt bei heading=0 / pitch=0 beim Wechsel in die Cockpit-Ansicht ein, unabhaengig von der vorherigen Blickrichtung des Spielers.
Warum hoere ich das DashScreen nicht, wenn ich ausserhalb des Fahrzeugs bin?
Das ist beabsichtigt — DashScreen ist Kabinen-Audio, kein Lautsprecher. Die Web-Audio-Okklusionspipeline (v3.3) schneidet jenseits von 5 m vom Fahrzeug vollstaendig ab. Innerhalb des Fahrzeugs (Fahrer + Beifahrer) ist das Audio vollstaendig sauber und ungefiltert. Zuhoerer in einer 5-m-Blase ausserhalb erhalten eine Lowpass-gefilterte und lautstaerkegedaempfte Version basierend auf der Anzahl geoeffneter Tueren.
Passen Sie Config.DashScreen.AudioCabinRange an, wenn Sie eine andere Blasengroesse wuenschen.
Kann ich mehr als 12 DashScreens auf der Karte haben?
Ja — unbegrenzte Platzierungen. Jeder Client rendert die 12 naechstgelegenen (eine pro texturisolierter Variante), sodass jenseits von 12 gleichzeitig sichtbaren auf demselben Client die entferntesten unsichtbar werden, bis Sie sich naehern.
Ich moechte die DashScreen-Funktion im Fahrzeug nicht
Deaktivieren Sie sie sauber ueber config.lua (v3.4.5+):
Config.DashScreen = { Enabled = false }
Dies ueberspringt die RegisterUsableItem-Schleife fuer hz_dashscreen*, die Target-Optionsregistrierung, die Platzierungsaufforderung, den Reconciliation-Tick — alles DashScreen-Spezifische. Wand-TVs / Kino / Werbetafeln funktionieren weiterhin normal.
Mein DashScreen faellt manchmal nach einem heftigen Crash ab
Behoben in v3.4.6 — die not-attached-Invariante des Reconciliation-Ticks erkennt, wenn IsEntityAttached(prop) false zurueckgibt (der Prop wurde durch Kollisionsphysik geloest), gibt den Slot frei und erwirbt ihn beim naechsten Durchlauf (≤ 500 ms) wieder. Der Prop wird am selben Fahrzeug an seinen urspruenglichen Offsets replatziert, und das DUI reaktiviert sich automatisch, da PoweredOn[cpId] ueber den Freigabezyklus hinweg erhalten bleibt.
Aktivieren Sie Config.Debug = true, um den Freigabegrund (not-attached) in der F8-Konsole zu sehen.
Nutzung
Der Bildschirm ist schwarz oder nichts wird angezeigt
Checkliste:- Ist der TV eingeschaltet? (Turn On ueber das Target-Menue)
- Wurde das Modell kalibriert? Verwenden Sie
/tvcfgin der Naehe des Props — die Live-Cyan-Vorschau zeigt genau, wo sich die Cursor-Klickzone befindet - Fuer grosse Vanilla-Werbetafeln fuegen Sie das Modell in
Config.BillboardUseSmartTVhinzu (die automatische Render-Target-Erkennung in v3.3 uebernimmt dies automatisch) - Testen Sie zuerst mit einer einfachen direkten Videodatei, nicht mit einem Livestream
- Pruefen Sie die F8-Konsole auf JS-Fehler
Cursor-Klicks sind versetzt / verfehlen Symbole
- Flache Props: Verwenden Sie
/tvcfgund passen Sie Scale / Offset / Rotation an. Die Cyan-Vorschau entspricht genau der Klickzone. - Gebogene Props: Stellen Sie sicher, dass das Modell einen
Curve = { Radius, Arc, Invert }-Eintrag hat und die Bogen-Vorschau (16 Cyan-Segmente) mit der tatsaechlichen Oberflaeche uebereinstimmt. Setzen SieCurve.Invert = truefuer Props, die sich zum Betrachter hin woelben.
Kein Ton / Ton zu leise
- Schalten Sie den TV ein
- Gehen Sie naeher heran — die Lautstaerke nimmt linear zwischen
MinSoundDistanceundMaxSoundDistanceab - Erhoehen Sie
Config.Display.MaxSoundDistancefuer groessere Audioreichweite - Fuer DashScreen: Audio spielt nur innerhalb des Fahrzeugs (+ eine 5-m-Blase darum)
Eine Video-URL spielt nicht ab
Eingebettete Quellen: Manche Seiten deaktivieren die Einbettung oder beschraenken sie regional. Testen Sie die URL in einem normalen Browser im Inkognito-Modus — wenn sie dort in einer Einbettung nicht abspielt, wird sie auch im Spiel nicht abspielen. Live-Kanaele: Eine Stream-Quelle muss auf eine Live-Kanal-URL zeigen, nicht auf ein Archiv. V3 verwendet das native Player-SDK der Quelle, sofern vorhanden, sodass Lautstaerke / Pause / Stummschaltung nativ funktionieren.Andere Spieler sehen meinen Web-Browser-Inhalt nicht (Seiten mit Login-Erfordernis)
Der TV jedes Spielers ist seine eigene unabhaengige CEF-Browserinstanz mit eigenen Cookies und eigener Sitzung. Das Skript synchronisiert die URL an alle Zuschauer, aber nicht den Sitzungsstatus — dies ist eine grundlegende Einschraenkung der Browserisolierung durch die DUI-Funktionsweise, kein Skriptfehler.
Eine URL, die von einem Konto abhaengt, wird daher pro Spieler gerendert; jeder sieht, was seine eigene Sitzung zurueckgibt. Nur oeffentlich erreichbare URLs werden fuer alle identisch dargestellt.
Spaeter dazukommende Spieler sehen den Video-/Browser-Inhalt nicht
Die Echtzeitsynchronisation (Heartbeat 5 s, Drifttoleranz 1,5 s) holt sie ein, wenn sie den TV streamen — sie erhalten automatisch die aktuelle Wiedergabeposition.
Falls spaeter dazukommende Spieler speziell im Browser-Modus einen schwarzen Bildschirm bekommen, liegt das Problem normalerweise an einer Race-Condition zwischen DUI-Erstellung und dem ersten SetDuiUrl-Aufruf beim Streamen des Spielers. Stellen Sie sicher, dass Ihr hz_television aktuell ist (die Browser-Synchronisation fuer spaetere Ankuenfte wurde in neueren Versionen mit Retry-Durchlaeufen verstaerkt).
Weitere Punkte:
- OneSync muss aktiviert sein (
set onesync oninserver.cfg) - Falls Sie sich in einem Routing Bucket befinden, muessen beide Spieler im selben Bucket sein — Synchronisationsevents sind konzeptbedingt pro Bucket isoliert
Konfiguration
Wie fuege ich ein benutzerdefiniertes TV- / Werbetafel-Modell hinzu?
- Fuegen Sie einen Eintrag in
Config.Modelshinzu, indiziert nach Modellname, mit sinnvollen Scale / Offset / Rotation-Startwerten - Laden Sie das Spiel, gehen Sie zum Prop
- Fuehren Sie
/tvcfgaus -> waehlen Sie das Modell -> kalibrieren Sie mit dem 3D-Gizmo; die Cyan-Vorschau zeigt die Klickzone in Echtzeit - Fuer gebogene Bildschirme aktivieren Sie Curve + setzen Sie Radius / Arc / Invert
- Speichern — die Werte werden in
tv_config.jsongeschrieben
Wie verhindere ich, dass Spieler Props auf Strassen platzieren?
Aktivieren Sie den Strassenschutz v3.4:
Config.Placer.BlockOnRoad = true
Die Platzierungsvorschau wird rot, wenn auf eine Strassenflaeche gezielt wird, und Enter wird blockiert. DashScreen-Platzierung im Fahrzeug ist immer ausgenommen — das ist der Sinn von DashScreen.
Wie verhindere ich, dass inaktive Spieler endlos TVs hinterlassen?
Verwenden Sie die Verlassensschutz-Felder v3.4:
Config.Placer = {
MaxPerPlayer = 5, -- striktes Limit pro Besitzer
AutoCleanupDays = 45, -- Loeschung nach 45 Tagen Inaktivitaet
AutoCleanupInterval = 6, -- erneuter Scan alle 6 Stunden
}
Auch verfuegbar auf Abruf ueber /tvclean run (Admin-Befehl) oder exports['hz_television']:RunHZTVCleanup().
Wie loesche ich alle Platzierungen eines bestimmten Spielers?
/tvclean purge <identifier>
Ausserdem: /tvclean list zeigt die Top 20 Besitzer nach Inaktivitaet, um verlassene Konten zu finden.
Platzierte TVs verschwinden nach dem Neustart
Aktivieren Sie die Persistenz:
Config.Placer.Persistence = true
Erfordert oxmysql. Die Tabellen hz_television_placed und hz_dashscreen_placed werden automatisch erstellt (+ migriert fuer die Spalte last_seen).
Wie fuege ich vordefinierte Sender hinzu?
Config.Channels = {
{ name = 'Weazel News', url = 'https://example.com/stream.m3u8', category = 'news' },
{ name = 'LS Rock Radio',url = 'https://example.com/stream.m3u8', category = 'music' },
}
Erscheint in einem "Channels"-Bereich in der Smart-TV-Oberflaeche.
Berechtigungen
TVs / Platzierung nur fuer Admins reservieren
Config.Permissions = {
UseTV = 'admin',
PlaceTV = 'admin',
}
Einschraenkung nach Job
Config.Permissions = {
UseTV = 'job:police,ambulance',
PlaceTV = 'job:estate',
}
Format: 'job:jobname' oder 'job:job1,job2' fuer mehrere.
Fortgeschritten / Integration
TVs synchronisieren sich nicht zwischen Spielern
Aktivieren Sie OneSync — set onesync on in server.cfg. Stellen Sie ausserdem sicher, dass Sie einen einigermaassen aktuellen FiveM-Build verwenden (2802+).
Lag / Ruckeln bei vielen TVs
Seit v3.1 cached die Render-Engine die Vertexdaten, sodass 6 TVs auf dem Bildschirm ungefaehr so viel kosten wie 1 TV vor dem Cache. Falls weiterhin Probleme auftreten, senken Sie Config.Display.RenderDistance (z. B. 30 m) und Config.Display.DefaultRange (z. B. 20 m).
Fehler "Failed to load video" in F8
Normalerweise eine Einbettungsbeschraenkung, regionale Sperre oder geloeschtes Video. Testen Sie die URL in einem normalen Browser im Inkognito-Modus. Falls die URL Browser-Rendering erfordert, uebergeben Sie mode = 'browser' beim Aufruf von PlayVideoOnTelevision.
Wie deaktiviere ich Werbetafeln vollstaendig?
Entfernen Sie die Werbetafel-Modelle aus Config.BillboardUseSmartTV UND aus Config.Models. Die Vanilla-GTA-V-Werbetafeln (prop_huge_display_01/02) fallen dann auf ihren Standard-Render-Target-Inhalt zurueck (der im Spiel normalerweise nichts anzeigt).
Wie integriere ich mit esx\_property / qb-houses?
Verwenden Sie Server-Events, um die Platzierung einzuschraenken — siehe Exports & Events fuer vollstaendige Beispiele.
AddEventHandler('hz_television:placeTV', function(model, coords, heading)
local src = source
if not exports['esx_property']:IsPlayerInOwnedProperty(src) then
TriggerClientEvent('esx:showNotification', src, 'You must be in your property')
CancelEvent()
end
end)
Notfall-Uebertragung auf allen TVs
Verwenden Sie PlayVideoOnTelevision auf der Liste, die Sie ueber GetAllPlacedTVs erhalten — siehe die Exports-Beispiele.
