Hot reload : BM_State is now persisted via GlobalState['foltone_blackmarket:state'] and restored on resource start. The onResourceStart re-broadcast added in v1.1.0 was useless because Lua variables are reset on every resource reload — state is now actually recovered and already-connected players keep their van. The scheduler also skips the initial delay if a van was restored.
Client callbacks : the periodic sweep that drops expired callbacks (30s timeout) now notifies the caller with nil instead of silently deleting the entry. Without this, a single lost packet on NUI open left NUI.opening = true forever → menu impossible to reopen until /restart.
v1.1.0 — i18n robustness + bugfixes
Added
Full German (de.lua) and Spanish (es.lua) locales
New translation keys : rui_price_format, rui_price_stock_format, rui_component_suffix, rui_tint_suffix, rui_weapon_list_title, ui_html_title, ui_close_tooltip, ui_select_weapon (replace hardcoded strings in RageUI and NUI)
HTML data-i18n-title attribute support in the NUI (translatable tooltips)
configuration.md rewritten with every Config option : MenuType modes (nui/rageui), TargetSystem variants, RageUI themes (classic/modern) with visual descriptions, available banners, NUI 3D Preview options, VanCustom, door behavior, ped animations, phone parameters (radii / jitter), categories, etc.
version.json consumed by the version check (raw.githubusercontent.com/foltone/foltone_doc/main/foltone-blackmarket/version.json)
Fixed
NUI : RESOURCE_NAME now resolved via GetParentResourceName() → all JS↔Lua callbacks keep working if the server owner renames the resource folder (otherwise the menu becomes inert and /restart is the only way to release the NUI focus)
NUI : state.customWeaponFilter is reset on every open (avoids stale reference to a sold/removed weapon if DefaultCategory = 'customs')
NUI : NUI.opening guard against rapid double-opens (two getCatalog callbacks in flight)
Server : getCatalog now sends a merged locale payload (en as base + active locale as override), so a missing key in a partial locale falls back to English instead of showing the raw key in the UI
Server : hot reload (ensure foltone_blackmarket while players are online) re-broadcasts state to already-connected players
Server : BM_State.heat is reset on every spawn (was persisting across van cycles)
Client : 30s timeout + cleanup of orphan server callbacks on network drop, pcall around the callback to keep the queue healthy
Client : log console once when Config.Locale points to a missing locale, listing what’s available
RageUI : fmtMoney now uses a thousands separator ($1,234,567) like the NUI
Bridge : Bridge.HasItem (ESX/QB) more robust when the player object is missing
Version check : moved to a JSON endpoint (json.decode native + regex fallback)
Minor / security
playerDropped captures source into a local (best practice)
applyCustomToOxInventory : dropped an unused multi-value return
v1.0.0 — Initial release
Added
Mobile illegal weapons van with random spawn cycle
Configurable spawn locations (10 LS / countryside presets)
Multi-framework support (ESX / QBCore / QBox / standalone)
Multi-inventory support (ox_inventory / qs-inventory / esx / qb)
Multi-target support (ox_target / qb-target / qtarget) + textUI fallback
Dual menu : RageUI (in-game) and NUI (HTML/CSS) selectable via Config.MenuType
3D preview of items with mouse wheel zoom
Weapon customization tab (components + tints) for player-owned weapons