Changelog
v1.2.1 — Restablecer en el panel vuelve al archivo de config
2026-11-03
Correcciones
- El botón de restablecer junto a un ajuste modificado ahora borra el valor del panel. El ajuste vuelve a seguir el archivo de config del script. Antes, el botón guardaba el valor por defecto del propio panel, que luego ocultaba cualquier cambio posterior en el archivo de config.
- El punto de «modificado» y el botón de restablecer solo aparecen en los ajustes realmente cambiados en el panel.
- Los jugadores ya conectados reciben los valores de config de un script en cuanto ese script arranca.
Notas de actualización
- Reemplazo directo. Conserva tu carpeta
hz_lib/data/(guardados del panel). - Un ajuste que restableciste con la 1.2.0 sigue guardando el valor por defecto del panel que guardó el botón antiguo. Ahora muestra el punto: pulsa su botón de restablecer una vez más y volverá a seguir el archivo de config.
v1.2.0 — Diálogo con NPC + seguimiento de objetivos
2026-11-02
Dos elementos en pantalla que cualquier script HZ puede usar: una caja de diálogo para hablar con los NPC y un seguimiento de objetivos para trabajos y misiones. Ambos siguen tu tema del /hzpanel.
Novedades
- Caja de diálogo con NPC. La frase del NPC se escribe al ritmo de su voz y luego aparecen hasta cuatro opciones. La cámara encuadra al NPC por encima del hombro del jugador, el NPC mueve los labios al hablar y la caja se cierra sola cuando el jugador se aleja. La usan HZ-Banking (banqueros) y HZ-Fuel (empleados de gasolinera). Exports de cliente
OpenDialogue,SayDialogue,SelectDialogue,CloseDialogue,IsDialogueOpen. Consulta Diálogo con NPC. - Seguimiento de objetivos. Los pasos del trabajo o la misión en curso, con un contador y una barra de progreso en el paso actual. Exports de cliente
SetObjectives,UpdateObjective,ClearObjectives. Lado y altura en /hzpanel > Appearance > Objectives tracker. Consulta Seguimiento de objetivos.
Correcciones
GetItemData(source, item, meta)solo devuelve el objeto pedido. Con metadatos, ya no devuelve otro objeto con el mismo nombre: recibesnilsi ninguno coincide. Vale para todos los inventarios compatibles.- Inventario nativo de ESX:
GetItemDatadevuelvenilcuando el jugador no tiene el objeto (o cuando se piden metadatos, porque ESX no los guarda),RemoveItemdevuelvefalsecuando el jugador no tiene suficientes en lugar de indicar éxito, yAddItemdevuelvefalsecon un objeto desconocido. - Kit de UI: el mapa ya no cambia de color al arrastrarlo y no aparece ningún rectángulo más claro sobre el mar.
Mejoras
- Kit de UI: los colores de estado también están disponibles como tripletes RGB (
--hz-danger-rgb,--hz-warning-rgb,--hz-success-rgb) para fondos translúcidos.
Notas de actualización
- Reemplazo directo. Conserva tu carpeta
hz_lib/data/(guardados del panel). Ningún cambio incompatible de config, eventos o esquema. - Actualiza hz_lib antes que cualquier recurso HZ que use la caja de diálogo o el seguimiento de objetivos.
v1.1.6 — Seven Appearance Presets
2026-08-04
> Five new one-click presets in the Apparence tab. Every HZ resource follows the moment you apply one — loading screen, HUD, pause menú, panels.
New Features
- Ember, Toxic, Amethyst, Crimson and Mono join the existing Industrial and Vice, bringing the built-in preset count to seven. Each writes the full appearance set in one click: the three accent colours, the three surfaces, the gradient mode and the six-tier radius scale.
- All five keep the charte's neutral near-black surfaces (
#0F0F12panel, pure black sub-panel) and the sharp radius scale — only the signature colour changes, so a preset switch never reshapes your UI. - Mono is the deliberate exception. No hue at all: a white signature,
solidgradient mode so every accent gradient collapses to a flat fill, and near-square corners (0/0/2/2/4/4). For servers that want the HUD to read as a tool rather than a brand.
Improvements
- Adding a preset no longer requires editing a TypeScript union — the preset identifiers in the panel view are plain strings, so a new entry is data, not a type change.
Upgrade Notes
- Drop-in replace. No config, event or schema breaking changes — your current appearance is untouched until you click a preset.
- Presets are a starting point, not a lock: every value stays editable afterwards, and the
customtag records that you diverged.
v1.1.5 — Duplicate Modules in the Panel
2026-07-27
Bug Fixes
A resource declaringprovide appeared several times in the panel. FiveM enumerates a provide alias as its own resource, and LoadResourceFile(alias, 'bridge_schema.lua') resolves to the provider's* schema — so HZ-Appearance, which provides qb-clothing, skinchanger and esx_skin, registered four identical Character modules. The loader now recognises an alias by comparing the resource's folder name with its resource name: a real resource always matches, an alias never does. Unknown resources fail open, so nothing legitimate is dropped.
Housekeeping
- Removed five orphaned per-module saves left behind in
data/by those duplicates (esx_multicharacter,qb-clothing,qb-multicharacter,qb-spawn,qb-weathersync). Safe to delete on your own install too — they were never read by a real module.
v1.1.4 — ak47_inventory
2026-07-03
New Features
ak47_inventoryadapter. Auto-detected like every other inventory backend, no configuration needed.
v1.1.3 — Panel Order + Usable-Item Diagnostics
2026-06-19
Improvements
- The panel's module list follows the player journey, not the boot order. Modules are now sorted along a stable logical sequence — theme, then join flow, then in-game UI, then world, then activities — instead of appearing in whatever order the resources happened to start. Anything not in the list appends at the end, alphabetically by label.
- HZ-Television's panel view is registered and available.
Bug Fixes
RegisterUsableItemno longer fails in silence. When no inventory adapter implements it, the call falls back to the framework's usable-item registry — which does not exist on standalone, and is bypassed by some inventories (qb-inventory standalone, codem…). Previously the item simply never fired and nothing said why. It now prints an explicit warning on standalone, and an explicit error when neither an inventory nor a framework adapter can register the item, naming the item in both cases.
v1.1.2 — HZ-Weather Panel Polish
2026-06-09
> Two small but high-impact polish fixes for the HZ-Weather views inside the unified panel. No hz_lib core changes.
Bug Fixes
- Events panel showed IDLE after reopen mid-event. The Tsunami / Tornado view subscribed to
viewDataupdates but never asked the server for current state on mount. Now invokesrequestDataon mount and seeds the state fromGlobalState.tsunami/GlobalState.tornado. Requires HZ-Weather v1.3.0+ for the matching schema allowlist.
New Features
- Immediate time change confirmation modal. Clicking "Apply time" in the HZ-Weather Time panel with the Immediate option checked now opens a confirm dialog showing the target time, a warning that every player on the server sees the snap, and a hint to uncheck Immediate for a smooth transition instead.
Cancel/Apply Immediatelybuttons, Esc dismisses, Enter confirms. The Quick Set buttons (00:00, 06:00, 12:00, 18:00) go through the same modal — no accidental midnight snaps from a stray click.
Upgrade Notes
> Preserve your saved configs when updating. hz_lib stores every panel-saved value under hz_lib/data/ — one JSON file per module (hz_weather.json, hz_hud.json, hz_television.json, etc.) plus the deprecated archive and the audit log. Overwriting the resource folder on update wipes your saved panel state.
>
> Procedure:
>
> 1. Stop the server.
> 2. Copy your existing hz_lib/data/ folder somewhere safe.
> 3. Replace the hz_lib resource with the new build from Keymaster.
> 4. Copy your saved data/ folder back into the new hz_lib/data/ (overwrite the freshly-shipped files).
> 5. Start the server. Panel saves intact.
Files inside hz_lib/data/:
*.json— per-module panel saves (operator config), keep.*.deprecated.json— archive of removed fields, safe to drop._audit.log— who changed what / when, safe to drop if you don't need the history.
v1.1.1 — Hotfix : ACE Permission Mismatch + Actionable Error
2026-05-18
Bug Fixes
- ACE fallback inconsistency — when
HZBridge.Panel.AcePermissionwas missing,nil, or empty inconfig.lua, the panel fell back to"hz_lib.admin"while the documented default (and theconfig.luashipped default) were both"admin". Customers with a validadd_ace group.admin admin allowwere locked out for no reason. Fallback now correctly resolves to"admin", aligned on config + docs. - Fixed in both
modules/panel/api_server.luaandmodules/panel/theme.lua(the mismatch lived in two places).
Improvements
- Permission error message is now actionable. When
/hzpanelACE check fails, the server console prints the exact two lines to copy-paste, with the player's license already interpolated:
add_principal license:abcdef... group.admin
add_ace group.admin admin allow
- Chat notification names the missing ACE node explicitly instead of a vague
"perm. hz_lib". Players know exactly what to fix. - The console output also explicitly flags that
command.hzpanelis NOT the right ACE node — customers were trying it out of confusion (most common ticket source pre-v1.1.1).
Upgrade Notes
- Drop-in replace. No config / DB / event / schema changes.
- If your panel was working in v1.1.0 it still works in v1.1.1 — the fix only unblocks customers who were locked out by the bad fallback.
- See the Permissions setup section of the Admin Panel guide for the canonical setup (and the qb-core boilerplate gotcha that explains why so many tickets reference this).
v1.1.0 — Centralised Admin Panel + Theme Cascade
2026-05-15
The headline change: hz_lib ships a full in-game admin panel. Every HZ-Script module now declares its config schema via a small Lua DSL, and the panel auto-builds a typed editor for it. No more per-script commands, no more touching config.lua between every tweak, no more restart-to-apply.
New Features
/hzpanelcommand — opens the central admin panel in-game. ACE-gated (defaultadmin, configurable viaHZBridge.Panel.AcePermission). Skips the ACE check entirely whenHZBridge.Panel.DevAllowAll = true(dev only — turn off in production).- Schema DSL (
bridge_schema.lua) — every module declares its config as a sandboxed Lua chunk that callsmodule()/section()/group()/field()/invariant()/migrations(). The panel auto-builds a typed editor from the declaration. Field types supported:boolean,number,string,enum,color,keybind,list<string>,list<object>,vehicle-list,weapon-list,action,enum-action,view. enum-multifield type — constrained multi-select picker (toggle chips). Stored aslist<string>, but the admin can only tick values from a fixedchoicesarray. First consumer: HZ-Weather'sBlackoutExceptions.- Custom views — modules can register full-width React components in the panel under
web/src/views/<module>/. Used by HZ-Weather to ship a polygon + circle zone editor, a satellite map, a forecast graph, a calendar, a seasons panel, and a time controller. - Theme cascade ("Apparence" tab) — one place to control the visual surface of every HZ NUI. Four orthogonal axes:
accent / accentHi / gold) — Vice signature pink / hot pink / gold. Presets: Vice, Industrial.
* Surfaces (surface / subpanel / tint) — outer panel / inner sub-panel / hover tint. RGB only — opacity decided per consumer vía rgb(var(--hz-surface-rgb) / 0.X).
* Gradient mode (gradient / solid) — solid collapses every accent gradient to a 1-stop flat fill.
* Radii (radiusNone / Xs / Sm / Md / Lg / Xl) — six-tier corner scale. Presets: Sharp (0/2/4/6/8/10), Soft (0/3/6/8/12/16), Round (0/4/8/12/16/20), Industrial (0/0/2/2/4/4).
- Live broadcast —
HZ-Bridge:theme:updated(server + client) fires on every save. Resources subscribe and applyapplyTheme()to their own NUI. NewGetTheme()export returns the current effective theme synchronously. OpenPanel(src, module?)server export — open the panel for a player from another script, optionally preselecting a module's tab.
Safety + ops
- Sandboxed schemas — DSL runs without raw
io/os/debug, with restrictedstring/table/mathsubsets. A buggybridge_schema.luafails to load (logged) but can't crash the server. - Rate-limited writes — default
10 writes per 5sper source (configurable). - Session tokens — every panel open issues a short-lived token (default 5 min TTL) that gates every save.
- Per-source ACE check on every action — not just at panel open. A revoked admin can't keep editing on an already-open panel.
- Audit log — every accepted save writes a line to
data/_audit.log. - Atomic writes — effective config per module is written via tmpfile + rename (
data/<module>.json). Pending writes usedata/<module>.pending.jsonand are committed atomically.
Performance
- Map tile pre-fetch — the 257 satellite tiles used by HZ-Weather's Map / ZoneEditor views are pre-warmed in CEF's cache at panel mount via
requestIdleCallback, capped at 12 concurrent requests. First open of a map view is now instant instead of 1-3s. - No backdrop-filter anywhere — compositor blur was removed from every HZ NUI (the previous "allowed on overlays" carve-out is revoked). Even paused overlays cost 8-12 FPS to a single blur. Replaced with deeper alpha scrims (
rgba(0,0,0,0.78)+on backdrops,0.55–0.92on glass cards).
Improvements
- Mercator-safe circle rendering in HZ-Weather views — Cayo Perico (game Y ≈ -5150) used to render circles too small because the previous
<circle r=radius/SCALE_X>ignored Mercator stretch at high latitudes. Now uses a true projected ellipse with local px-per-meter on each axis. Both the editor and the map view agree. - Default Apparence colour matches the rest of the HZ ecosystem — Vice palette + Vice surfaces + Sharp radii pre-applied at first boot.
Upgrade Notes
- No breaking changes for consumers of the bridge's framework / inventory / notification APIs — those continue to work identically.
- Resources that want to expose config in the panel ship a
bridge_schema.luaat their root. See the Admin Panel guide for the DSL reference. - If you set
HZBridge.Panel.DevAllowAll = truewhile iterating, set it back to false before going live — the panel is a serious tool, not something to leave open.
v1.0.0 — Initial Release
2026-02-15
- Universal framework adapter — auto-detects ESX, QBCore, QBX, Ox Core, vRP, or runs standalone
- Inventory adapter — ox\_inventory, qs-inventory, ps-inventory, codem, core, origen, tgiann, or framework native
- Notifications adapter — ox\_lib, okokNotify, mythic\_notify, codem, pNotify, framework, or GTA native
- Target adapter — ox\_target, qb-target, interact, or built-in TextUI fallback
- Menú / input adapter — ox\_lib (full), qb-menu + qb-input, ESX menú, or GTA native fallback
- Dispatch adapter — cd\_dispatch, ps-dispatch, qs-dispatch, rcore\_dispatch, emergencydispatch, or built-in
- Bidirectional callbacks (client ↔ server) with rate limiting + timeout
- Built-in minigames — progress bar, skill check, sequence
- Single
'auto'mode that resolves the right backend per system
