Release
On a server with qs-textui, garage labels no longer freeze on screen after you walk away, and every other interaction prompt in the suite — shops, storage, evidence racks, fine desks, lockers, K9 kennels, dealers, placed props — now uses qs-textui instead of ox_lib's corner panel. Garage points cost noticeably less in resmon, officers get their keys again with qs-vehiclekeys, the citizen file lists every weapon a player owns, and fines paid on ESX reach the society account.
Replace every file in the resource. About forty files changed across the Lua, the garage admin page and all fifteen translations — drop the whole folder in.
What to keep from your current install: anything you edited under config/ and custom/, which is everything escrow leaves editable. This release changes files in both of those folders, so if you edited any of these, merge your change into the new copy rather than keeping your old file:
config/client/libs.lua — the text UI and prompt code lives here nowconfig/shared/garages.lua — new Prompt.visibleDistance defaultclient/custom/vehiclekeys/qs-vehiclekeys.luaserver/custom/inventory/*.lua — every inventory adapterserver/custom/society/esx_addonaccount.luaLabels that got stuck on screen under 1.4.0 live in qs-textui's page, not in this resource, so updating does not clear the ones already there. Restart qs-textui once (or have players reconnect).
Prompts pick qs-textui on their own whenever it is running and fall back to ox_lib's panel when it is not — nothing to configure. The garage's Text style setting still wins for garage points, so a garage you set to ox_lib stays on ox_lib.
Admin → Garages → The text over a point → Text visible from (m), 18 m by default. Under qs-textui a garage label shows from that far in its small far-away style and opens into the key and the text as the officer closes in; the key itself still only works within Reach. It never shows further than the marker's Visible from. Existing servers get the default without doing anything.
Nothing to import.
6 new strings in all fifteen languages. The in-game locale updater overwrites locale files from Weblate — keep hand edits somewhere else.
Garage prompt ids contain colons, and qs-textui removes a label with a jQuery selector that treats a colon as a pseudo-class. The removal threw inside qs-textui, so the label stayed on screen at its last position, came back to life when you walked up again and never went away. Labels are now sent under an id qs-textui can delete. Restart qs-textui once after updating to clear any already stuck.
The adapter passed the vehicle entity where qs-vehiclekeys expects the model's spawn name, which errored inside qs-vehiclekeys on every take and every store and left the officer without keys. It now passes the model name.
Accounts coming out of esx_addonaccount were rejected as unusable, so every fine paid into a society account was dropped. They are accepted now, both routes to the account are tried, and when neither works the deposit is written straight to addon_account_data and esx_addonaccount is told to reload. A failure now logs its reason.
Shops, item storage, evidence racks, fine desks, outfit lockers, K9 kennels, dealers, placed props and the admin sample tour used ox_lib's corner panel even with qs-textui running. They now show a qs-textui label at the point — from 10 m in its far-away style, with the key working at arm's length — and fall back to ox_lib's panel when qs-textui is not running.
On QBCore the inventory walk stopped at the first empty slot, so weapons after the hotbar were missing. Every weapon is listed now, including for offline players, and Qbox weapons show their serial number again.
Under qs-textui a garage point's label is up from 18 m, like a marker, and opens into the key and text as you get close. Set it in Admin → Garages → Text visible from (m).
Garage settings were rebuilt into new tables on every frame for every prompt in range; they are now built once per change. Garage markers, prompt texts and distances are prepared when the point is created, the job check runs four times a second, store zones cost nothing on foot, qs-textui labels are re-checked ten times a second instead of every frame, and the speed reducer refreshes its sign at 10 Hz under qs-textui.
qs-textui draws the key in its own box, and prompts written as "[E] Fleet Garage" showed it a second time inside the text. The key is taken out of anything sent to qs-textui; the built-in text keeps it.
Whether qs-textui is running was read once at load, so start order decided the look until a restart. It is checked while running now, and restarting qs-textui mid-session no longer loses every label.