Configuração
Todas as configurações ficam no config.lua, que permanece aberto (não criptografado). Por padrão, cada detecção está em 'auto': você só precisa alterá-las se a detecção automática não funcionar no seu servidor.
Framework
HZBridge.Framework = 'auto'
| Opção | Descrição |
'auto' | Detecção automática (recomendado) |
'esx' | Forçar ESX |
'qbcore' | Forçar QBCore |
'qbox' | Forçar QBox (QBX) |
'ox' | Forçar Ox Core |
'vrp' | Forçar vRP |
'standalone' | Sem framework |
Ordem de detecção: es_extended > qbx_core > qb-core > ox_core > vRP > standalone
Inventário
HZBridge.Inventory = 'auto'
| Opção | Descrição |
'auto' | Detecção automática (recomendado) |
'ox_inventory' | Forçar ox\_inventory |
'hz_inventory' | Forçar hz\_inventory (usa o adaptador do ox\_inventory) |
'qs-inventory' | Forçar qs-inventory |
'ps-inventory' | Forçar ps-inventory |
'codem-inventory' | Forçar codem-inventory |
'core_inventory' | Forçar core\_inventory |
'origen_inventory' | Forçar origen\_inventory |
'tgiann-inventory' | Forçar tgiann-inventory |
'qb-inventory' | Forçar qb-inventory |
'ak47_inventory' | Forçar ak47\_inventory |
'framework' | Usar o inventário nativo do framework |
Ordem de detecção: hz_inventory > ox_inventory > qs-inventory > ps-inventory > core_inventory > origen_inventory > tgiann-inventory > codem-inventory > ak47_inventory > qb-inventory > framework
qb-inventory fica por último porque vem com o QBCore: um servidor que roda outro inventário ao lado dele usa esse outro.
GetDetectedInventory() informa o hz\_inventory como ox_inventory, já que ele usa o mesmo adaptador.
- No QBox e no Ox Core, o hz_lib usa
ox_inventory mesmo antes de ele iniciar.
- Em
'auto', um inventário que inicia depois do hz_lib é detectado assim que inicia. Um valor forçado desativa isso.
Notificações
HZBridge.Notifications = 'auto'
| Opção | Descrição |
'auto' | Detecção automática (recomendado) |
'ox_lib' | Forçar as notificações do ox\_lib |
'okok' | Forçar okokNotify |
'mythic' | Forçar mythic\_notify |
'codem' | Forçar codem-notification |
'pnotify' | Forçar pNotify |
'framework' | Usar as notificações do framework |
'gta' | Texto nativo do GTA V |
Target / Interação
HZBridge.Target = 'auto'
| Opção | Descrição |
'auto' | Detecção automática (recomendado) |
'ox_target' | Forçar ox\_target |
'qb-target' | Forçar qb-target |
'interact' | Forçar o sistema interact |
'builtin' | TextUI integrado como alternativa |
HZBridge.Menu = 'auto'
| Opção | Descrição | Recursos |
'auto' | Detecção automática (recomendado) | — |
'ox_lib' | Forçar ox\_lib | Context, Input, Alert, TextUI, Progress, Menu |
'qb-menu' | Forçar qb-menu | Context, Input (qb-input), TextUI (qb-core) |
'esx' | Forçar o menu do ESX | Context, menu de lista, TextUI |
'native' | Alternativa nativa do GTA | Entrada pelo teclado, texto de ajuda (limitado) |
Ordem de detecção: ox_lib > qb-menu > esx_menu_default > native
A alternativa 'native' oferece funções básicas, mas limitadas. Para a melhor experiência, instale o ox\_lib ou o qb-menu.
Dispatch
HZBridge.Dispatch = 'auto'
| Opção | Descrição |
'auto' | Detecção automática (recomendado) |
'cd_dispatch' | Forçar cd\_dispatch |
'ps-dispatch' | Forçar ps-dispatch |
'qs-dispatch' | Forçar qs-dispatch |
'rcore_dispatch' | Forçar rcore\_dispatch |
'emergencydispatch' | Forçar emergencydispatch |
'builtin' | Notificação + blip integrados |
Banco (contas de sociedade)
HZBridge.Banking = 'auto'
A conta de sociedade (a conta do chefe de um emprego ou de uma gangue) na qual os scripts HZ depositam e da qual retiram dinheiro, por exemplo a receita de um negócio.
| Opção | Descrição |
'auto' | Detecção automática (recomendado) |
'hz_banking' | Forçar HZ-Banking |
'qb-banking' | Forçar qb-banking |
'qb-management' | Forçar qb-management |
'Renewed-Banking' | Forçar Renewed-Banking |
'okokBanking' | Forçar okokBanking |
'qs-banking' | Forçar qs-banking |
'tgg-banking' | Forçar tgg-banking |
'crm-banking' | Forçar crm-banking |
'tgiann-bank' | Forçar tgiann-bank |
'esx_society' | Forçar esx\_society |
'none' | Sem conta de sociedade (pagamentos desativados) |
Ordem de detecção: hz_banking > qb-banking > qb-management > Renewed-Banking > okokBanking > qs-banking > tgg-banking > crm-banking > tgiann-bank > esx_society > none
- O banco é detectado uma única vez, quando o hz_lib inicia. Um banco que inicia depois do hz_lib não é visto: force-o aqui.
- Exceção: em
'auto', o HZ-Banking assume quando inicia depois do hz_lib, e devolve o controle ao banco anterior quando para.
- Alguns bancos só permitem adicionar dinheiro. Os scripts verificam isso com o export
GetBankingSupports.
Callbacks
HZBridge.Callback = {
Timeout = 15000, -- ms before timeout (default 15s)
RateLimit = 50, -- max requests/second per player (0 = disabled)
}
| Parâmetro | Tipo | Descrição |
Timeout | integer | Milissegundos antes de um callback expirar |
RateLimit | integer | Máx. de requisições por segundo por jogador (0 = sem limite) |
Relé do dispatch
HZBridge.DispatchRelay = {
RateLimit = 5,
RateLimitWindowMs = 10000,
MaxTextLength = 200,
MaxJobs = 20,
}
Limites que o servidor aplica aos alertas de dispatch que os jogadores enviam pelo hz_lib.
| Parâmetro | Padrão | Descrição |
RateLimit | 5 | Máx. de alertas por jogador em uma janela (0 = sem limite) |
RateLimitWindowMs | 10000 | Duração da janela, em ms |
MaxTextLength | 200 | O título, a mensagem e o código são cortados neste número de caracteres |
MaxJobs | 20 | Máx. de empregos que um alerta pode atingir |
Idioma
HZBridge.Locale = 'en'
Idioma do painel de administração, das mensagens do próprio hz_lib e das teclas mostradas no diálogo com NPC. Vem com 'en' e 'fr'. Você pode adicionar locales/<idioma>.lua para as mensagens do hz_lib; o painel em si só existe em inglês e francês, e aparece em inglês para qualquer outro idioma.
Painel de administração
HZBridge.Panel = {
AcePermission = 'admin',
DevAllowAll = false,
RateLimitWrites = 10,
RateLimitWindowMs = 5000,
SessionTokenTtlMs = 5 * 60 * 1000,
AuditRetentionDays = 90,
}
| Parâmetro | Padrão | Descrição |
AcePermission | 'admin' | Nó ACE que abre o /hzpanel. Veja Dar acesso ao painel |
DevAllowAll | false | true deixa qualquer pessoa abrir o painel, sem nenhuma verificação. Apenas para um servidor de desenvolvimento |
RateLimitWrites | 10 | Máx. de salvamentos por admin em uma janela |
RateLimitWindowMs | 5000 | Duração dessa janela, em ms |
SessionTokenTtlMs | 300000 | Uma sessão do painel expira após esse tempo sem atividade (5 min) |
AuditRetentionDays | 90 | Não é aplicado na v1.2.0: o hz_lib nunca apaga os arquivos de auditoria. Apague você mesmo os arquivos data/_audit.*.log antigos se precisar de um limite de retenção |
Controle de acesso
HZBridge.Panel.AccessControl = {
Enabled = true,
Resolution = 'union',
CapsMemoTtlMs = 1000,
ScrapePermissionsCfg = true,
PermissionsCfgPath = 'config/permissions.cfg',
RestartRequiresManage = false,
CuratedGroups = {
'god', 'owner', 'superadmin', 'admin', 'headadmin', 'sradmin',
'dev', 'developer', 'mod', 'moderator', 'trialmod', 'support', 'helper',
},
RescanCooldownMs = 30000,
}
Cargos da staff com acesso por módulo. Um cargo é um grupo ACE (group.admin, group.mod…) ou um grupo de staff do framework. Em cada módulo, um cargo recebe um ou mais destes três direitos:
- view: ler as configurações do módulo
- config: alterar as configurações salvas dele
- manage: usar as ações ao vivo dele (por exemplo, mudar o clima agora)
Um moderador pode ter manage no HZ-Weather sem config: ele controla o clima, mas não pode alterar as configurações. Você edita os cargos no jogo, em /hzpanel > Access control (só um cargo com permissão para editar os acessos vê essa aba).
| Parâmetro | Padrão | Descrição |
Enabled | true | false = sem cargos: quem tem AcePermission recebe acesso total a tudo |
Resolution | 'union' | Jogador em vários cargos. 'union': soma os direitos de todos. 'highest': só os direitos do cargo de maior nível |
CapsMemoTtlMs | 1000 | Tempo (ms) em que os direitos de um jogador ficam em cache entre duas verificações. Mantenha baixo |
ScrapePermissionsCfg | true | Lê o seu arquivo de permissões para listar os nomes dos seus grupos no seletor de cargos. Só os nomes: o acesso é sempre verificado ao vivo pelo ACE. Coloque false se a sua hospedagem bloquear a leitura de arquivos |
PermissionsCfgPath | 'config/permissions.cfg' | Esse arquivo, a partir da raiz do servidor |
RestartRequiresManage | false | Reiniciar um módulo pelo painel exige config. true exige também manage |
CuratedGroups | 13 nomes comuns | Nomes de grupo oferecidos no seletor de cargos antes de serem encontrados no seu servidor. Adicione os seus próprios grupos de staff |
RescanCooldownMs | 30000 | Tempo mínimo (ms) entre duas buscas de grupos iniciadas pelo painel |
- Na primeira inicialização, o grupo por trás de
AcePermission (group.admin por padrão) recebe acesso total e o direito de editar os acessos, para que ninguém fique trancado do lado de fora. Os grupos admin do framework (admin, god, superadmin, owner) encontrados nesse momento recebem acesso total aos módulos, mas não o direito de editar os acessos.
- Um jogador cujos grupos não correspondem a nenhum cargo mantém o acesso total se tiver
AcePermission (ou o ACE command). Um jogador que corresponde a um cargo mantém os limites desse cargo.
- Ficou sem acesso? Execute
hzaccess_recover <grupo> no console do servidor (por exemplo hzaccess_recover admin): esse grupo recupera o acesso total e o direito de editar os acessos.
Reiniciar os dependentes
HZBridge.AutoRestartDependents = false
Parar o hz_lib também para todos os recursos que dependem dele. Com true, esses recursos são iniciados de novo assim que o hz_lib volta. Desativado por padrão: isso também iniciaria os recursos que você mantém parados de propósito.
Debug
HZBridge.Debug = false
Coloque true para ativar os logs detalhados com o prefixo [HZ Bridge] no console. Útil para diagnosticar problemas de detecção.
Exemplo completo
HZBridge = {}
HZBridge.Framework = 'auto'
HZBridge.Inventory = 'auto'
HZBridge.Notifications = 'auto'
HZBridge.Dispatch = 'auto'
HZBridge.Target = 'auto'
HZBridge.Menu = 'auto'
HZBridge.Banking = 'auto'
HZBridge.Callback = {
Timeout = 15000,
RateLimit = 50,
}
HZBridge.DispatchRelay = {
RateLimit = 5,
RateLimitWindowMs = 10000,
MaxTextLength = 200,
MaxJobs = 20,
}
HZBridge.Locale = 'en'
HZBridge.Panel = {
AcePermission = 'admin',
DevAllowAll = false,
RateLimitWrites = 10,
RateLimitWindowMs = 5000,
SessionTokenTtlMs = 5 * 60 * 1000,
AuditRetentionDays = 90,
}
HZBridge.Panel.AccessControl = {
Enabled = true,
Resolution = 'union',
CapsMemoTtlMs = 1000,
ScrapePermissionsCfg = true,
PermissionsCfgPath = 'config/permissions.cfg',
RestartRequiresManage = false,
CuratedGroups = {
'god', 'owner', 'superadmin', 'admin', 'headadmin', 'sradmin',
'dev', 'developer', 'mod', 'moderator', 'trialmod', 'support', 'helper',
},
RescanCooldownMs = 30000,
}
HZBridge.AutoRestartDependents = false
HZBridge.Debug = false
Recomendação: deixe a detecção em 'auto', a menos que tenha um motivo concreto para forçar um sistema. A detecção automática é confiável e cobre todas as configurações comuns.