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çãoDescriçã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çãoDescriçã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çãoDescriçã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çãoDescriçã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çãoDescriçãoRecursos
'auto'Detecção automática (recomendado)—
'ox_lib'Forçar ox\_libContext, Input, Alert, TextUI, Progress, Menu
'qb-menu'Forçar qb-menuContext, Input (qb-input), TextUI (qb-core)
'esx'Forçar o menu do ESXContext, menu de lista, TextUI
'native'Alternativa nativa do GTAEntrada 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çãoDescriçã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çãoDescriçã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âmetroTipoDescrição
TimeoutintegerMilissegundos antes de um callback expirar
RateLimitintegerMá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âmetroPadrãoDescrição
RateLimit5Máx. de alertas por jogador em uma janela (0 = sem limite)
RateLimitWindowMs10000Duração da janela, em ms
MaxTextLength200O título, a mensagem e o código são cortados neste número de caracteres
MaxJobs20Má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âmetroPadrãoDescrição
AcePermission'admin'Nó ACE que abre o /hzpanel. Veja Dar acesso ao painel
DevAllowAllfalsetrue deixa qualquer pessoa abrir o painel, sem nenhuma verificação. Apenas para um servidor de desenvolvimento
RateLimitWrites10Máx. de salvamentos por admin em uma janela
RateLimitWindowMs5000Duração dessa janela, em ms
SessionTokenTtlMs300000Uma sessão do painel expira após esse tempo sem atividade (5 min)
AuditRetentionDays90Nã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âmetroPadrãoDescrição
Enabledtruefalse = 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
CapsMemoTtlMs1000Tempo (ms) em que os direitos de um jogador ficam em cache entre duas verificações. Mantenha baixo
ScrapePermissionsCfgtrueLê 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
RestartRequiresManagefalseReiniciar um módulo pelo painel exige config. true exige também manage
CuratedGroups13 nomes comunsNomes de grupo oferecidos no seletor de cargos antes de serem encontrados no seu servidor. Adicione os seus próprios grupos de staff
RescanCooldownMs30000Tempo 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.