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ón | Descripció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ón | Descripció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ón | Descripció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ón | Descripció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ón | Descripción | Funciones |
'auto' | Detección automática (recomendado) | — |
'ox_lib' | Forzar ox\_lib | Context, Input, Alert, TextUI, Progress, Menu |
'qb-menu' | Forzar qb-menu | Context, Input (qb-input), TextUI (qb-core) |
'esx' | Forzar el menú de ESX | Context, menú de lista, TextUI |
'native' | Respaldo nativo de GTA | Entrada 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ón | Descripció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ón | Descripció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ámetro | Tipo | Descripción |
Timeout | integer | Milisegundos antes de que un callback caduque |
RateLimit | integer | Peticiones 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ámetro | Por defecto | Descripción |
RateLimit | 5 | Alertas máx. por jugador en una ventana (0 = sin límite) |
RateLimitWindowMs | 10000 | Duración de la ventana, en ms |
MaxTextLength | 200 | El título, el mensaje y el código se cortan a este número de caracteres |
MaxJobs | 20 | Nú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ámetro | Por defecto | Descripción |
AcePermission | 'admin' | Nodo ACE que abre /hzpanel. Consulta Configurar los permisos |
DevAllowAll | false | true deja que todo el mundo abra el panel, sin ninguna comprobación. Solo para un servidor de desarrollo |
RateLimitWrites | 10 | Guardados máx. por admin en una ventana |
RateLimitWindowMs | 5000 | Duración de esa ventana, en ms |
SessionTokenTtlMs | 300000 | Una sesión del panel caduca tras este tiempo sin actividad (5 min) |
AuditRetentionDays | 90 | No 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ámetro | Por defecto | Descripción |
Enabled | true | false = 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 |
CapsMemoTtlMs | 1000 | Tiempo (ms) que los derechos de un jugador quedan en caché entre dos comprobaciones. Mantenlo bajo |
ScrapePermissionsCfg | true | Lee 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 |
RestartRequiresManage | false | Reiniciar un módulo desde el panel requiere config. true exige además manage |
CuratedGroups | 13 nombres comunes | Nombres de grupo propuestos en el selector de roles antes de encontrarlos en tu servidor. Añade tus propios grupos de staff |
RescanCooldownMs | 30000 | Tiempo 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.