Configuración

Todos los ajustes están en config.lua, que queda abierto (sin cifrar). Por defecto, cada detección está en 'auto': solo tienes que cambiarlas si la detección automática no funciona con tu servidor.


Framework

HZBridge.Framework = 'auto'

OpciónDescripción
'auto'Detección automática (recomendado)
'esx'Forzar ESX
'qbcore'Forzar QBCore
'qbox'Forzar QBox (QBX)
'ox'Forzar Ox Core
'vrp'Forzar vRP
'standalone'Sin framework
Orden de detección: es_extended > qbx_core > qb-core > ox_core > vRP > standalone

Inventario

HZBridge.Inventory = 'auto'

OpciónDescripción
'auto'Detección automática (recomendado)
'ox_inventory'Forzar ox\_inventory
'hz_inventory'Forzar hz\_inventory (usa el adaptador de ox\_inventory)
'qs-inventory'Forzar qs-inventory
'ps-inventory'Forzar ps-inventory
'codem-inventory'Forzar codem-inventory
'core_inventory'Forzar core\_inventory
'origen_inventory'Forzar origen\_inventory
'tgiann-inventory'Forzar tgiann-inventory
'qb-inventory'Forzar qb-inventory
'ak47_inventory'Forzar ak47\_inventory
'framework'Usar el inventario nativo del framework
Orden de detección: hz_inventory > ox_inventory > qs-inventory > ps-inventory > core_inventory > origen_inventory > tgiann-inventory > codem-inventory > ak47_inventory > qb-inventory > framework
  • qb-inventory va el último porque viene con QBCore: un servidor que usa otro inventario a su lado usa ese otro.
  • GetDetectedInventory() devuelve ox_inventory para hz\_inventory, ya que usa el mismo adaptador.
  • En QBox y Ox Core, hz_lib usa ox_inventory incluso antes de que arranque.
  • En 'auto', un inventario que arranca después de hz_lib se detecta en cuanto arranca. Un valor forzado desactiva esto.

Notificaciones

HZBridge.Notifications = 'auto'

OpciónDescripción
'auto'Detección automática (recomendado)
'ox_lib'Forzar las notificaciones de ox\_lib
'okok'Forzar okokNotify
'mythic'Forzar mythic\_notify
'codem'Forzar codem-notification
'pnotify'Forzar pNotify
'framework'Usar las notificaciones del framework
'gta'Texto nativo de GTA V

Target / Interacción

HZBridge.Target = 'auto'

OpciónDescripción
'auto'Detección automática (recomendado)
'ox_target'Forzar ox\_target
'qb-target'Forzar qb-target
'interact'Forzar el sistema interact
'builtin'TextUI integrado de respaldo

Menú / UI

HZBridge.Menu = 'auto'

OpciónDescripciónFunciones
'auto'Detección automática (recomendado)—
'ox_lib'Forzar ox\_libContext, Input, Alert, TextUI, Progress, Menu
'qb-menu'Forzar qb-menuContext, Input (qb-input), TextUI (qb-core)
'esx'Forzar el menú de ESXContext, menú de lista, TextUI
'native'Respaldo nativo de GTAEntrada por teclado, texto de ayuda (limitado)
Orden de detección: ox_lib > qb-menu > esx_menu_default > native
El respaldo 'native' ofrece funciones básicas pero limitadas. Para la mejor experiencia, instala ox\_lib o qb-menu.

Dispatch

HZBridge.Dispatch = 'auto'

OpciónDescripción
'auto'Detección automática (recomendado)
'cd_dispatch'Forzar cd\_dispatch
'ps-dispatch'Forzar ps-dispatch
'qs-dispatch'Forzar qs-dispatch
'rcore_dispatch'Forzar rcore\_dispatch
'emergencydispatch'Forzar emergencydispatch
'builtin'Notificación + blip integrados

Banca (cuentas de sociedad)

HZBridge.Banking = 'auto'

La cuenta de sociedad (la cuenta del jefe de un trabajo o de una banda) en la que los scripts HZ ingresan y de la que retiran dinero, por ejemplo los ingresos de un negocio.

OpciónDescripción
'auto'Detección automática (recomendado)
'hz_banking'Forzar HZ-Banking
'qb-banking'Forzar qb-banking
'qb-management'Forzar qb-management
'Renewed-Banking'Forzar Renewed-Banking
'okokBanking'Forzar okokBanking
'qs-banking'Forzar qs-banking
'tgg-banking'Forzar tgg-banking
'crm-banking'Forzar crm-banking
'tgiann-bank'Forzar tgiann-bank
'esx_society'Forzar esx\_society
'none'Sin cuenta de sociedad (pagos desactivados)
Orden de detección: hz_banking > qb-banking > qb-management > Renewed-Banking > okokBanking > qs-banking > tgg-banking > crm-banking > tgiann-bank > esx_society > none
  • El banco se detecta una sola vez, cuando arranca hz_lib. Un banco que arranca después de hz_lib no se ve: fuérzalo aquí.
  • Excepción: en 'auto', HZ-Banking toma el control cuando arranca después de hz_lib, y lo devuelve al banco anterior cuando se detiene.
  • Algunos bancos solo permiten añadir dinero. Los scripts lo comprueban con el export GetBankingSupports.

Callbacks

HZBridge.Callback = {
    Timeout   = 15000,  -- ms before timeout (default 15s)
    RateLimit = 50,     -- max requests/second per player (0 = disabled)
}

ParámetroTipoDescripción
TimeoutintegerMilisegundos antes de que un callback caduque
RateLimitintegerPeticiones máx. por segundo y jugador (0 = sin límite)

Relé del dispatch

HZBridge.DispatchRelay = {
    RateLimit         = 5,
    RateLimitWindowMs = 10000,
    MaxTextLength     = 200,
    MaxJobs           = 20,
}

Límites que el servidor aplica a las alertas de dispatch que los jugadores envían a través de hz_lib.

ParámetroPor defectoDescripción
RateLimit5Alertas máx. por jugador en una ventana (0 = sin límite)
RateLimitWindowMs10000Duración de la ventana, en ms
MaxTextLength200El título, el mensaje y el código se cortan a este número de caracteres
MaxJobs20Número máx. de trabajos a los que apunta una alerta

Idioma

HZBridge.Locale = 'en'

Idioma del panel de administración, de los mensajes propios de hz_lib y de las teclas que muestra el diálogo con NPC. Incluye 'en' y 'fr'. Puedes añadir locales/<idioma>.lua para los mensajes de hz_lib; el panel en sí solo existe en inglés y en francés, y se muestra en inglés para cualquier otro idioma.


Panel de administración

HZBridge.Panel = {
    AcePermission      = 'admin',
    DevAllowAll        = false,
    RateLimitWrites    = 10,
    RateLimitWindowMs  = 5000,
    SessionTokenTtlMs  = 5 * 60 * 1000,
    AuditRetentionDays = 90,
}

ParámetroPor defectoDescripción
AcePermission'admin'Nodo ACE que abre /hzpanel. Consulta Configurar los permisos
DevAllowAllfalsetrue deja que todo el mundo abra el panel, sin ninguna comprobación. Solo para un servidor de desarrollo
RateLimitWrites10Guardados máx. por admin en una ventana
RateLimitWindowMs5000Duración de esa ventana, en ms
SessionTokenTtlMs300000Una sesión del panel caduca tras este tiempo sin actividad (5 min)
AuditRetentionDays90No se aplica en la v1.2.0: hz_lib nunca borra los archivos de auditoría. Borra tú los archivos data/_audit.*.log antiguos si necesitas un límite de conservación

Control de acceso

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,
}

Roles del staff con acceso por módulo. Un rol es un grupo ACE (group.admin, group.mod…) o un grupo de staff del framework. En cada módulo, un rol recibe uno o varios de estos tres derechos:

  • view: leer los ajustes del módulo
  • config: cambiar sus ajustes guardados
  • manage: usar sus acciones en directo (por ejemplo, cambiar el clima ahora)
Un moderador puede tener manage en HZ-Weather sin config: maneja el clima pero no puede cambiar sus ajustes. Los roles se editan en el juego, en /hzpanel > Access control (solo lo ve un rol con permiso para editar los accesos).
ParámetroPor defectoDescripción
Enabledtruefalse = sin roles: quien tenga AcePermission obtiene acceso completo a todo
Resolution'union'Jugador con varios roles. 'union': suma los derechos de todos. 'highest': solo los derechos de su rol de mayor rango
CapsMemoTtlMs1000Tiempo (ms) que los derechos de un jugador quedan en caché entre dos comprobaciones. Mantenlo bajo
ScrapePermissionsCfgtrueLee tu archivo de permisos para listar tus nombres de grupo en el selector de roles. Solo los nombres: el acceso siempre se comprueba en directo con ACE. Ponlo en false si tu hosting bloquea la lectura de archivos
PermissionsCfgPath'config/permissions.cfg'Ese archivo, desde la raíz del servidor
RestartRequiresManagefalseReiniciar un módulo desde el panel requiere config. true exige además manage
CuratedGroups13 nombres comunesNombres de grupo propuestos en el selector de roles antes de encontrarlos en tu servidor. Añade tus propios grupos de staff
RescanCooldownMs30000Tiempo mínimo (ms) entre dos búsquedas de grupos lanzadas desde el panel
  • En el primer arranque, el grupo detrás de AcePermission (group.admin por defecto) recibe acceso completo y el derecho de editar los accesos, para que nadie se quede fuera. Los grupos admin del framework (admin, god, superadmin, owner) encontrados en ese momento reciben acceso completo a los módulos, pero no el derecho de editar los accesos.
  • Un jugador cuyos grupos no coinciden con ningún rol conserva el acceso completo si tiene AcePermission (o el ACE command). Un jugador que coincide con un rol conserva los límites de ese rol.
  • ¿Te has quedado fuera? Ejecuta hzaccess_recover <grupo> en la consola del servidor (por ejemplo hzaccess_recover admin): ese grupo recupera el acceso completo y el derecho de editar los accesos.

Reinicio de las dependencias

HZBridge.AutoRestartDependents = false

Detener hz_lib también detiene todos los recursos que dependen de él. Con true, esos recursos se vuelven a iniciar en cuanto hz_lib vuelve. Desactivado por defecto: también iniciaría los recursos que mantienes detenidos a propósito.


Debug

HZBridge.Debug = false

Ponlo en true para activar los logs detallados con el prefijo [HZ Bridge] en la consola. Útil para diagnosticar problemas de detección.


Ejemplo 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

Recomendación: deja la detección en 'auto' salvo que tengas un motivo concreto para forzar un sistema. La detección automática es fiable y cubre todas las configuraciones habituales.