Instalacao

Etapa 1 — Download

Apos sua compra em hzscripts.com/shop, sua conta FiveM Keymaster recebe dois assets separados:

  1. Faca login em keymaster.fivem.net (ou portal.cfx.re/assets)
  2. Va em Granted Assets
  3. Baixe os dois:
* hz_television — o script principal * hz_televisionprops — as 12 variantes de props DashScreen no veiculo (entregues como um asset dedicado para que atualizacoes de props nao forcem um novo download do recurso logico completo)
Os dois downloads sao obrigatorios. Os dois assets aparecem como entradas separadas no seu portal Keymaster — voce deve baixar os dois. Se voce baixar apenas hz_television, os 12 modelos de props DashScreen nao serao transmitidos e a colocacao de DashScreen ficara bloqueada silenciosamente em lib.requestModel.
Importante: utilize a mesma conta FiveM vinculada a sua licenca Tebex. Os scripts sao protegidos por escrow e requerem uma licenca valida.

Etapa 2 — Dependencias

Obrigatorias

  1. hz_lib — asset gratuito em hzscripts.com/shop. Gerencia a deteccao de framework / inventario / target / menu / notificacao. Use sempre a versao mais recente — cada release do HZ-Television e testada com a versao mais recente do Bridge. Deve iniciar antes do HZ-Television. Veja Instalacao hz_lib.
  2. HZ-TelevisionProps — baixado separadamente do Keymaster ao lado do HZ-Television (veja Etapa 1). Transmite as 12 variantes de props DashScreen (hz_dashscreen + hz_dashscreen_1..11) + seu JSON de calibracao. Deve iniciar antes do HZ-Television.
  3. Um sistema de menu — pelo menos um dos seguintes:
* ox\_lib (recomendado) — overextended/ox\_lib * qb-menu + qb-input — inclusos com QBCore / QBox
  1. Um driver SQL (necessario para persistencia, contas, playlists, limpeza de abandono). HZ-Television detecta automaticamente os dois na inicializacao:
* oxmysql (recomendado — moderno, mantido ativamente) — overextended/oxmysql * mysql-async (stack QBCore v1 legada) — ainda suportado via shim de compatibilidade

Opcionais

  • ox\_target ou qb-target — para interacao por mira (caso contrario fallback TextUI / DrawText3D)
  • lb-phone — necessario para o aplicativo companheiro de celular lb-hztelevision
Atualize o hz_lib antes de atualizar o HZ-Television. Cada release Hz-Script e testada com a build mais recente do Bridge — versoes incompativeis causarao erros "export not found" ou deteccao ausente na inicializacao. Baixe novamente o hz_lib em hzscripts.com/shop toda vez que voce baixar uma nova release do HZ-Television.
Compatibilidade SQL dupla (v3.4.1+) — HZ-Television detecta automaticamente na inicializacao se voce esta usando oxmysql ou mysql-async e instala o shim MySQL.Async correspondente. Voce vera uma destas linhas no console do servidor na inicializacao:

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

Se voce ver um ERROR: no SQL resource detected em vermelho, certifique-se de que ensure oxmysql (ou ensure mysql-async) esta antes de ensure hz_television no seu server.cfg.

hz_lib centraliza a deteccao. Voce nao configura mais o framework / target / inventario por script — defina-os uma unica vez no hz_lib/config.lua e cada Hz-Script herda. Veja Configuracao hz_lib.

Etapa 3 — Arquivos

  1. Extraia os dois arquivos (hz_television.zip e hz_televisionprops.zip) baixados do Keymaster na Etapa 1
  2. Coloque as duas pastas resultantes no seu diretorio resources/ — agrupa-las em uma pasta de categoria comum como [hz-scripts]/ ajuda a manter tudo organizado
server/
├── resources/
│   ├── ox_lib/
│   ├── oxmysql/                    ← ou mysql-async (ambos sao suportados)
│   ├── [hz-scripts]/
│   │   ├── hz_lib/
│   │   ├── hz_televisionprops/        ← 2o download do Keymaster (12 props DashScreen + calibration.json)
│   │   ├── hz_television/          ← 1o download do Keymaster (o script principal)
│   │   │   ├── client/
│   │   │   ├── server/
│   │   │   ├── html/
│   │   │   ├── config.lua
│   │   │   ├── fxmanifest.lua
│   │   │   └── ...

Etapa 4 — Itens de inventario

O HZ-Television vem com 10 itens colocaveis prontos para uso. Definicoes de itens pre-configuradas para cada inventario suportado estao em hz_television/items/.

Itens inclusos

ItemPropDescricao
hz_tv_s / hz_tv_m / hz_tv_lhz_tv_*Smart TVs de parede — pequena / media / grande
hz_tv_s_stand / hz_tv_m_stand / hz_tv_l_standhz_tv_*_standSmart TVs com suporte — pequena / media / grande
curved_screen_s / curved_screen_m / curved_screen_lprop_curved_screen_*Telas de cinema curvas
hz_dashscreenhz_dashscreen + 11 variantesDashScreen no veiculo (colocado via gizmo de teclado)

Para ox\_inventory

Abra ox_inventory/data/items.lua e adicione o conteudo de hz_television/items/ox_inventory.txt (10 entradas incluindo hz_dashscreen).

Exemplo 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 o conteudo do arquivo hz_television/items/<inventory>.txt correspondente para o arquivo de itens do seu inventario.

Todos os itens passam pelo mesmo evento cliente HZ-Television:useItem, que o script intercepta e redireciona para o fluxo de colocacao correto (gizmo estatico para TVs, gizmo de teclado no veiculo para DashScreen).

Etapa 5 — Banco de dados (recomendado)

O banco de dados e opcional mas fortemente recomendado — sem ele, voce perde a persistencia das TVs colocadas, o sistema de contas, a playlist pessoal e a funcionalidade de limpeza de abandono.

Ative no config.lua:

Config.Placer = {
    Persistence        = true,   -- TVs + DashScreens colocados sobrevivem ao reinicio
    MaxPerPlayer       = 0,      -- 0 = ilimitado, N = limite por identificador do proprietario
    AutoCleanupDays    = 0,      -- 0 = desativado, N = remocao automatica apos N dias de inatividade
    AutoCleanupInterval = 6,     -- horas entre os ciclos de limpeza (0 = apenas na inicializacao)
    BlockOnRoad        = false,  -- true = bloqueia colocacao de props nas estradas (DashScreen isento)
    CleanupAdminPermission = 'admin',  -- permissao ACE para /tvclean
}

As seguintes tabelas sao criadas automaticamente na primeira inicializacao (todas usam CREATE TABLE IF NOT EXISTS + migracoes aditivas ALTER TABLE ADD COLUMN IF NOT EXISTS):

  • hz_television_placed — TVs estaticas colocadas (parede, suporte, curvas, paineis)
  • hz_dashscreen_placed — colocacoes DashScreen indexadas por placa do veiculo
  • hz_tv_users, hz_tv_sessions, hz_tv_favorites, hz_tv_history, hz_tv_playlists, hz_tv_playlist_items — conta / login / favoritos / historico / playlists (alimentados no primeiro login Smart TV)

Instalacao manual (fallback — v3.4.3+)

Se uma tabela nao puder ser criada automaticamente (usuario MySQL sem permissao CREATE, string de conexao apontando para o banco errado, etc.), voce vera um erro vermelho no console do servidor logo apos [hz_television] SQL compat: ... com o nome exato da tabela + o erro. Nesse caso, execute o arquivo install.sql fornecido manualmente:

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

...ou abra hz_television/install.sql no phpMyAdmin / HeidiSQL / DBeaver e execute-o no banco de dados do seu servidor. Depois reinicie hz_television. O script contem apenas instrucoes CREATE TABLE IF NOT EXISTS, entao executa-lo duas vezes e seguro.

v3.4.3+ apenas — o antigo erro Table 'yourdb.hz_tv_sessions' doesn't exist no login agora falha de forma limpa com uma resposta db_not_ready em vez de crashar, e o log do servidor direciona voce para install.sql. Versoes anteriores faziam o fluxo de sessao crashar.

Etapa 6 — server.cfg

Adicione os recursos ao seu server.cfg nesta ordem:

# Dependencias (devem iniciar ANTES do hz_lib)
ensure oxmysql                # ou `ensure mysql-async` — HZ-Television suporta ambos
ensure ox_lib                 # ou qb-menu + qb-input
ensure ox_target              # ou qb-target (opcional)

# Framework (se aplicavel)
ensure qbx_core               # ou ensure qb-core, ou ensure es_extended
# ensure qb-core
# ensure es_extended

# HZ-Scripts — a ordem importa
ensure hz_lib              # gerencia a deteccao automatica
ensure hz_televisionprops        # transmite as 12 variantes de props DashScreen (download Keymaster separado)
ensure hz_television          # o recurso logico de TV

A ordem de inicializacao e critica. hz_lib, hz_televisionprops e seu driver SQL (oxmysql ou mysql-async) devem todos iniciar antes do hz_television. Se hz_televisionprops nao estiver garantido, os 12 modelos de variantes DashScreen nao serao transmitidos e a colocacao de DashScreen falhara silenciosamente em lib.requestModel. Se nenhum driver SQL estiver garantido, a persistencia para de funcionar silenciosamente.

Etapa 7 — Configuracao

Abra hz_television/config.lua e adapte os parametros. Veja Configuracao para cada opcao em detalhe.

Pontos essenciais a verificar antes de ir para producao:
  • Config.Locale'en' / 'fr' / 'es' / 'de'
  • Config.Permissions — quem pode usar /tvcfg, colocar TVs, usar as TVs
  • Config.Placer.Persistencetrue para ativar a persistencia no banco
  • Config.Placer.BlockOnRoadtrue se voce quiser bloquear colocacao nas estradas
  • Config.Placer.MaxPerPlayer + Config.Placer.AutoCleanupDays — protecao de abandono
  • Config.BillboardUseSmartTV — quais modelos de paineis/cinema devem usar a interface Smart TV completa (padrao: os 3 props de cinema curvos + 2 grandes paineis vanilla)
Os parametros framework / target / menu / notificacao / inventario sao gerenciados no hz_lib — veja Configuracao hz_lib.

Etapa 8 — Verificacao

  1. Inicie o servidor
  2. O console deve exibir (nesta ordem):
* [hz_lib] <framework> detected, <inventory> detected, ... * [hz_televisionprops] shared/models.lua loaded [hz_television] SQL compat: detected oxmysql, MySQL.Async shim installed (ou detected existing MySQL.Async (mysql-async or compatible))* * [hz_television] v3.4.1 loaded successfully * [hz_television] Database tables initialized
  1. Conecte-se ao jogo
  2. Aproxime-se de um prop de TV (TV de parede, tela de cinema curva, ou use o item hz_dashscreen em um veiculo)
  3. Selecione Power OnSmart TV → cole uma URL de video
Pronto! Se a interface Smart TV abrir e sua URL for reproduzida, o script esta funcionando. Va para Configuracao para personalizar modelos, permissoes e limites de protecao de abandono.

Solucao rapida de problemas

O script nao inicia

Verifique:


  • As pastas estao corretamente nomeadas hz_television, hz_televisionprops, hz_lib (sensivel a maiusculas/minusculas)

  • Os tres estao com ensure no server.cfg na ordem correta (Bridge → TelevisionProps → Television)

  • Sua licenca FiveM e valida no Keymaster

  • Um sistema de menu (ox_lib ou qb-menu) esta com ensure antes do hz_lib

Erro "Framework not detected"

A deteccao e gerenciada pelo hz_lib. Certifique-se de que:


  • es_extended, qb-core ou qbx_core esta com ensure antes do hz_lib

  • hz_lib esta com ensure antes do HZ-Television

  • Verifique a linha do console do hz_lib para confirmar a deteccao automatica

  • Force um framework se necessario no config.lua do hz_lib — ex. HZBridge.Framework = 'esx'

A colocacao de DashScreen falha silenciosamente

Causa mais comum: hz_televisionprops nao esta iniciado. lib.requestModel(hz_dashscreen) fica bloqueado indefinidamente porque o modelo nao esta sendo transmitido.

hz_televisionprops e um download separado no Keymaster — nao esta incluso com hz_television. Confirme:


  • Os dois assets estao listados nos seus Granted Assets do Keymaster e foram baixados

  • A pasta hz_televisionprops esta ao lado de hz_television em resources/

  • ensure hz_televisionprops esta no seu server.cfg antes de ensure hz_television

  • O recurso esta listado como started no console do servidor

As TVs colocadas nao sao salvas apos reinicio / Erro "no SQL resource detected"

HZ-Television precisa de oxmysql ou mysql-async em funcionamento. Na inicializacao, o console do servidor exibe uma das seguintes mensagens:

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

Se voce receber o erro vermelho:


  • Certifique-se de que ensure oxmysql (ou ensure mysql-async) esta no server.cfg

  • Deve estar posicionado antes de ensure hz_television — se o recurso SQL carregar depois, a deteccao em runtime o perde

  • Ambos os drivers sao suportados — escolha um; nao execute os dois simultaneamente

Erro "Table 'yourdb.hz_tv_sessions' doesn't exist" quando um jogador se conecta em uma Smart TV

A etapa de criacao automatica nao conseguiu construir uma ou mais tabelas. Voce vera linhas vermelhas logo apos SQL compat: detected ... durante a inicializacao:

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

Correcao (v3.4.3+):

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

Ou abra hz_television/install.sql no phpMyAdmin / HeidiSQL / DBeaver e execute-o no banco de dados do seu servidor. Depois reinicie hz_television. O arquivo contem apenas instrucoes CREATE TABLE IF NOT EXISTS — executa-lo duas vezes e seguro.

Causas comuns da falha na criacao automatica:


  • O usuario MySQL configurado em set mysql_connection_string nao tem permissao CREATE no banco de destino → conceda CREATE, ALTER, INDEX e reinicie

  • A string de conexao aponta para um banco que o usuario pode ler mas nao escrever → verifique o nome do banco

  • MySQL esta rodando em modo STRICT com parametros de sessao incompativeis → install.sql define explicitamente SQL_MODE = '' no topo para contornar esse problema


Se voce ver SQL Error 1067 (Invalid default value for 'last_login') ou SQL Error 1075 (Incorrect table definition; there can be only one auto column and it must be defined as a key) ao importar install.sql, voce esta em uma versao antiga do HZ-Television. Ambos os erros foram corrigidos na v3.4.6 — atualize e re-execute o novo install.sql.

Na v3.4.3+, o fluxo de login agora falha de forma limpa com db_not_ready quando as tabelas estao ausentes, em vez de crashar no meio da consulta.

A tela fica preta / sem exibicao
  • Use /tvcfg perto da TV para calibrar Scale/Offset/Rotation (o preview ciano ao vivo mostra exatamente onde esta a zona de clique do cursor)
  • Teste primeiro com um simples arquivo de video direto (nao um livestream)
  • Verifique o console F8 para erros JavaScript
  • Para grandes paineis vanilla, certifique-se de que o modelo esta em Config.BillboardUseSmartTV (a deteccao automatica do render target na v3.3 os gerencia)
Sem som ou som global
  • Aumente Config.Display.MaxSoundDistance no config.lua
  • Certifique-se de que a TV esta ligada
  • Aproxime-se (o volume diminui entre MinSoundDistance e MaxSoundDistance)
  • Para o DashScreen especificamente: o audio tem alcance de cabine de 5 m com oclusao Web Audio. O motorista + passageiros tem som limpo e completo; ouvintes externos recebem som filtrado e atenuado
Os itens de TV nao aparecem no inventario
  • Adicione os itens de hz_television/items/<inventory>.txt no arquivo de itens do seu inventario
  • Reinicie o servidor completamente apos adicionar os itens (nao apenas o recurso)
  • Para ox\_inventory o caminho e ox_inventory/data/items.lua
  • Para QBCore/QBox e qb-core/shared/items.lua ou qbx_core/shared/items.lua