Instalación
Paso 1 — Descarga
Tras su compra en hzscripts.com/shop, su cuenta FiveM Keymaster recibe dos assets separados:
- Inicie sesión en keymaster.fivem.net (o portal.cfx.re/assets)
- Vaya a Granted Assets
- Descargue ambos:
hz_television — el script principal
* hz_televisionprops — las 12 variantes de props DashScreen en vehículo (entregadas como un asset dedicado para que las actualizaciones de los props no fuercen una re-descarga del recurso lógico completo)
hz_television, los 12 modelos de props DashScreen no se transmitirán y la colocación de DashScreen se bloqueara silenciosamente en lib.requestModel.Paso 2 — Dependencias
Requeridas
- hz_lib — asset gratuito desde hzscripts.com/shop. Gestiona la detección de framework / inventario / target / menú / notificación. Utilice siempre la última versión — cada release de HZ-Television se prueba con la última versión del Bridge. Debe iniciarse antes de HZ-Television. Vea Instalación hz_lib.
- HZ-TelevisionProps — descargado por separado desde Keymaster junto con HZ-Television (vea Paso 1). Transmite las 12 variantes de props DashScreen (
hz_dashscreen+hz_dashscreen_1..11) + su JSON de calibración. Debe iniciarse antes de HZ-Television. - Un sistema de menú — al menos uno de los siguientes:
- Un driver SQL (requerido para la persistencia, cuentas, playlists, limpieza de abandono). HZ-Television detecta automáticamente ambos al inicio:
Opcionales
- ox\_target o qb-target — para la interacción por mira (de lo contrario fallback TextUI / DrawText3D)
- lb-phone — requerido para la aplicación compañera de teléfono
lb-hztelevision
oxmysql o mysql-async e instala el shim MySQL.Async correspondiente. Verá una de estas lineas en la consola del servidor al inicio:
[hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed
[hz_television] SQL compat: detected existing MySQL.Async (mysql-async or compatible)
Si ve un ERROR: no SQL resource detected en rojo, asegúrese de que ensure oxmysql (o ensure mysql-async) se encuentre antes de ensure hz_television en su server.cfg.
hz_lib/config.lua y cada Hz-Script lo hereda. Vea Configuración hz_lib.Paso 3 — Archivos
- Extraiga ambos archivos (
hz_television.zipyhz_televisionprops.zip) descargados desde Keymaster en el Paso 1 - Coloque ambas carpetas resultantes en su directorio
resources/— agruparlas en una carpeta de categoría común como[hz-scripts]/permite mantener todo ordenado
server/
├── resources/
│ ├── ox_lib/
│ ├── oxmysql/ ← o mysql-async (ambos estan soportados)
│ ├── [hz-scripts]/
│ │ ├── hz_lib/
│ │ ├── hz_televisionprops/ ← 2da descarga Keymaster (12 props DashScreen + calibration.json)
│ │ ├── hz_television/ ← 1ra descarga Keymaster (el script principal)
│ │ │ ├── client/
│ │ │ ├── server/
│ │ │ ├── html/
│ │ │ ├── config.lua
│ │ │ ├── fxmanifest.lua
│ │ │ └── ...
Paso 4 — Items de inventario
HZ-Television viene con 10 items colocables listos para usar. Definiciones de items pre-configuradas para cada inventario soportado se encuentran en hz_television/items/.
Items incluidos
| Item | Prop | Descripción |
|---|---|---|
hz_tv_s / hz_tv_m / hz_tv_l | hz_tv_* | Smart TV murales — pequeña / mediana / grande |
hz_tv_s_stand / hz_tv_m_stand / hz_tv_l_stand | hz_tv_*_stand | Smart TV con soporte — pequeña / mediana / grande |
curved_screen_s / curved_screen_m / curved_screen_l | prop_curved_screen_* | Pantallas de cine curvas |
hz_dashscreen | hz_dashscreen + 11 variantes | DashScreen en vehículo (se coloca mediante el gizmo de teclado) |
Para ox\_inventory
Abra ox_inventory/data/items.lua y agregue el contenido de hz_television/items/ox_inventory.txt (10 entradas incluyendo hz_dashscreen).
Ejemplo de entrada:
['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'
}
},
Para qb-inventory / qs-inventory / ps-inventory
Copie el contenido del archivo hz_television/items/<inventory>.txt correspondiente en el archivo de items de su inventario.
HZ-Television:useItem, que el script intercepta y redirige hacia el flujo de colocación correcto (gizmo estático para las TV, gizmo de teclado en vehículo para DashScreen).Paso 5 — Base de datos (recomendado)
Active en config.lua:
Config.Placer = {
Persistence = true, -- las TV + DashScreens colocados sobreviven al reinicio
MaxPerPlayer = 0, -- 0 = ilimitado, N = limite por identificador de propietario
AutoCleanupDays = 0, -- 0 = desactivado, N = eliminacion automatica despues de N dias de inactividad
AutoCleanupInterval = 6, -- horas entre los ciclos de limpieza (0 = solo al inicio)
BlockOnRoad = false, -- true = bloquea la colocacion de props en carreteras (DashScreen exento)
CleanupAdminPermission = 'admin', -- permiso ACE para /tvclean
}
Las siguientes tablas se crean automáticamente en el primer inicio (todas utilizan CREATE TABLE IF NOT EXISTS + migraciones aditivas ALTER TABLE ADD COLUMN IF NOT EXISTS):
hz_television_placed— TV estáticas colocadas (murales, con soporte, curvas, vallas)hz_dashscreen_placed— colocaciones DashScreen indexadas por placa de vehículohz_tv_users,hz_tv_sessions,hz_tv_favorites,hz_tv_history,hz_tv_playlists,hz_tv_playlist_items— cuenta / inicio de sesión / favoritos / historial / playlists (poblados en el primer inicio de sesión Smart TV)
Instalación manual (fallback — v3.4.3+)
Si una tabla no puede crearse automáticamente (usuario MySQL sin permiso CREATE, cadena de conexión apuntando a la base incorrecta, etc.), verá un error rojo en la consola del servidor justo después de [hz_television] SQL compat: ... con el nombre exacto de la tabla + el error. En ese caso, ejecute el archivo install.sql proporcionado manualmente:
mysql -u <user> -p <database> < resources/[standalone]/hz_television/install.sql
...o abra hz_television/install.sql en phpMyAdmin / HeidiSQL / DBeaver y ejecútelo en la base de datos de su servidor. Luego reinicie hz_television. El script solo contiene instrucciones CREATE TABLE IF NOT EXISTS, por lo que ejecutarlo dos veces es seguro.
Table 'yourdb.hz_tv_sessions' doesn't exist al iniciar sesión ahora falla limpiamente con una respuesta db_not_ready en lugar de crashear, y el log del servidor le dirige hacia install.sql. Las versiones anteriores hacían crashear el flujo de sesión.Paso 6 — server.cfg
Agregue los recursos a su server.cfg en este orden:
# Dependencias (deben iniciarse ANTES de hz_lib)
ensure oxmysql # o `ensure mysql-async` — HZ-Television soporta ambos
ensure ox_lib # o qb-menu + qb-input
ensure ox_target # o qb-target (opcional)
# Framework (si corresponde)
ensure qbx_core # o ensure qb-core, o ensure es_extended
# ensure qb-core
# ensure es_extended
# HZ-Scripts — el orden importa
ensure hz_lib # gestiona la deteccion automatica
ensure hz_televisionprops # transmite las 12 variantes de props DashScreen (descarga Keymaster separada)
ensure hz_television # el recurso logico TV
hz_lib, hz_televisionprops y su driver SQL (oxmysql o mysql-async) deben iniciarse todos antes de hz_television. Si hz_televisionprops no tiene ensure, los 12 modelos de variantes DashScreen no se transmitirán y la colocación de DashScreen fallara silenciosamente en lib.requestModel. Si ningún driver SQL tiene ensure, la persistencia deja de funcionar silenciosamente.Paso 7 — Configuración
Abra hz_television/config.lua y adapte los parámetros. Vea Configuración para cada opción en detalle.
Config.Locale—'en'/'fr'/'es'/'de'Config.Permissions— quien puede usar/tvcfg, colocar TV, usar las TVConfig.Placer.Persistence—truepara activar el guardado en base de datosConfig.Placer.BlockOnRoad—truesi quiere bloquear la colocación en carreterasConfig.Placer.MaxPerPlayer+Config.Placer.AutoCleanupDays— protección de abandonoConfig.BillboardUseSmartTV— que modelos de vallas/cine deben usar la interfaz Smart TV completa (por defecto: los 3 props de cine curvo + 2 grandes vallas vanilla)
Paso 8 — Verificación
- Inicie el servidor
- La consola debería mostrar (en orden):
[hz_lib] <framework> detected, <inventory> detected, ...
* [hz_televisionprops] shared/models.lua loaded
[hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed (o detected existing MySQL.Async (mysql-async or compatible))*
* [hz_television] v3.4.1 loaded successfully
* [hz_television] Database tables initialized
- Conectese al juego
- Acérquese a un prop TV (TV mural, pantalla de cine curva, o utilice el item
hz_dashscreenen un vehículo) - Seleccione Power On → Smart TV → pegue una URL de vídeo
Solución rápida de problemas
El script no se inicia
Verifique:
- Las carpetas están correctamente nombradas
hz_television,hz_televisionprops,hz_lib(sensible a mayúsculas) - Las tres tienen
ensureenserver.cfgen el orden correcto (Bridge → TelevisionProps → Television) - Su licencia FiveM es valida en Keymaster
- Un sistema de menú (
ox_liboqb-menu) tieneensureantes de hz_lib
Error "Framework not detected"
La deteccion se gestiona por hz_lib. Asegúrese de que:
es_extended,qb-coreoqbx_coretieneensureantes de hz_lib- hz_lib tiene
ensureantes de HZ-Television - Verifique la línea de consola de hz_lib para confirmar la detección automática
- Fuerce un framework si es necesario en el
config.luade hz_lib — ej.HZBridge.Framework = 'esx'
La colocación de DashScreen falla silenciosamente
Causa más común: hz_televisionprops no está iniciado. lib.requestModel(hz_dashscreen) se queda bloqueado indefinidamente porque el modelo no se transmite.
hz_televisionprops es una descarga separada en Keymaster — no esta incluido con hz_television. Confirme:
- Ambos assets están listados en sus Granted Assets de Keymaster y se han descargado
- La carpeta
hz_televisionpropsse encuentra junto ahz_televisionenresources/ ensure hz_televisionpropsestá en suserver.cfgantes deensure hz_television- El recurso aparece como
starteden la consola del servidor
Las TV colocadas no se guardan después del reinicio / Error "no SQL resource detected"
HZ-Television necesita oxmysql o mysql-async en funcionamiento. Al inicio, la consola del servidor muestra uno de los siguientes mensajes:
[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 obtiene el error rojo:
- Asegúrese de que
ensure oxmysql(oensure mysql-async) está enserver.cfg - Debe estar colocado antes de
ensure hz_television— si el recurso SQL se carga después, la detección en tiempo de ejecución lo pierde - Ambos drivers están soportados — elija uno; no los ejecute simultáneamente
Error "Table 'yourdb.hz_tv_sessions' doesn't exist" cuando un jugador inicia sesión en una Smart TV
El paso de creación automática no pudo construir una o más tablas. Verá lineas rojas justo después de SQL compat: detected ... durante el inicio:
[hz_television] CREATE TABLE hz_tv_sessions FAILED: <error>
[hz_television] Import hz_television/install.sql manually to create the missing tables.
Solución (v3.4.3+):
mysql -u <user> -p <database> < resources/[standalone]/hz_television/install.sql
O abra hz_television/install.sql en phpMyAdmin / HeidiSQL / DBeaver y ejecútelo en la base de datos de su servidor. Luego reinicie hz_television. El archivo solo contiene instrucciones CREATE TABLE IF NOT EXISTS — ejecutarlo dos veces es seguro.
Causas comunes del fallo de creación automática:
- El usuario MySQL configurado en
set mysql_connection_stringno tiene el permisoCREATEen la base de datos destino → concedaCREATE, ALTER, INDEXy reinicie - La cadena de conexión apunta a una base que el usuario puede leer pero no escribir → verifique el nombre de la base
- MySQL funciona en modo STRICT con configuraciones de sesión incompatibles →
install.sqlestablece explícitamenteSQL_MODE = ''al inicio para evitar este problema
Si ve SQL Error 1067 (
Invalid default value for 'last_login') o SQL Error 1075 (Incorrect table definition; there can be only one auto column and it must be defined as a key) al importar install.sql, está en una versión antigua de HZ-Television. Ambos errores fueron corregidos en v3.4.6 — actualice y re-ejecute el nuevo install.sql.
En v3.4.3+, el flujo de inicio de sesión ahora falla limpiamente con db_not_ready cuando las tablas faltan, en lugar de crashear en plena consulta.
La pantalla permanece negra / sin visualización
- Utilice
/tvcfgcerca de la TV para calibrar Scale/Offset/Rotation (la vista previa cyan en vivo muestra exactamente donde esta la zona de clic del cursor) - Pruebe primero con un simple archivo de vídeo directo (no un livestream)
- Verifique la consola F8 en busca de errores JavaScript
- Para las grandes vallas vanilla, asegúrese de que el modelo está en
Config.BillboardUseSmartTV(la detección automática del render target en v3.3 los gestiona)
Sin sonido o sonido global
- Aumente
Config.Display.MaxSoundDistanceenconfig.lua - Asegúrese de que la TV está encendida
- Acérquese (el volumen disminuye entre
MinSoundDistanceyMaxSoundDistance) - Para el DashScreen específicamente: el audio tiene un alcance de cabina de 5 m con oclusión Web Audio. El conductor + los pasajeros tienen un sonido limpio y completo; los oyentes exteriores reciben un sonido filtrado y atenuado
Los items TV no aparecen en el inventario
- Agregue los items desde
hz_television/items/<inventory>.txten el archivo de items de su inventario - Reinicie el servidor completamente después de agregar los items (no solo el recurso)
- Para ox\_inventory la ruta es
ox_inventory/data/items.lua - Para QBCore/QBox es
qb-core/shared/items.luaoqbx_core/shared/items.lua
