Changelog
Update 1.5.0 12/05/2026
Full Live Configurator overhaul.
/dirk_multichar(or the new cog button on the character-list title) opens a 6-tab admin panel: Basic, Scene, Backstories, Spawn Locations, States, VIP Roles.Configurator can now be opened from inside the Multichar UI itself (gated by
dirk_lib's scriptConfig edit permission). Back / Esc / close button all drop you straight back into the character list instead of bouncing through the script chooser.New
cameraViews,defaultItems, andcharacterStatesfields now live in scriptConfig β every value the resource cares about is admin-editable in-game.Backstory editor: tabbed modal (General / Access / Items / Scenes) with fixed height so switching tabs doesn't shift the panel. Items use a compact
SelectItemlist with inline expand. Discord-role access is gated behind the Locked toggle.Scene tab: drag-reorder character display positions, modal editor with
Scenario/Dict/Anim/Flagrows, walk-and-set position picker (E confirms, β« cancels), customisation-position + atmosphere (weather/time) consolidated here. Scene atmosphere now actually applies during the multichar scene and restores on hand-off to the spawn selector / first spawn.Spawn Locations: modal editor with FontAwesome icon picker, in-game group/rank pickers backed by
lib.framework, randomised internal IDs (no more hand-typedspawn_1).States tab: edit visual character states (icon + colour + message + Disabled toggle) and an Online Players sub-panel that lets admins search any online character and apply a state from the same tab.
VIP Roles tab gets the
Use ESX Character Slots Tabletoggle. Spawn Selector toggle moved into the Spawn Locations tab.Backstory System fully overhauled β new UI for creating / managing backstories, scenes with their own walk-set positions, items use SelectItem, locked / discord-gated access in its own tab.
Restyle pass on every consumer NUI to use
dirk-cfx-reactfor consistency with the rest of the dirk_* lineup.Full locale sweep β every label, tooltip, placeholder, and confirm message reads from
locales/en.json.%splaceholders used for dynamic values instead of hand-rolled{name}substitutions.
scriptConfig migration
settings/folder removed. Every value that was a Lua table βbasic,lifestyles,spawnLocations,vipRoles,characterPositions,cameraViews,defaultItems,characterStatesβ now lives inschema.jsonand persists through dirk_lib's scriptConfig.Every Lua consumer reads via
lib.scriptConfig.get('section')+ reacts to admin saves throughlib.scriptConfig.on('section', ...). Edits in the configurator apply live, no resource restart required.characterMetadatais the only Lua holdout (its entries carryget(charId)callback functions that query the DB β can't be JSON). Moved toextras/.profanity.jsonandnationalities.jsonmoved to the resource root (no longer Lua tables).Schema
x-arrayKeyused on lifestyles + spawnLocations + characterPositions + characterStates so smartMerge identifies entries cleanly across saves.lifestyles/folder removed β all the per-lifestyleinit.luatemplate stubs were entirely commented out and the new scriptConfig flow obsoletes them. Custom Lua-side lifestyles can still be registered from other resources viaexports.dirk_multichar:registerLifestyle(id, data).React-side
getStateInfo()now derives fromuseScriptConfig.characterStatesinstead of a parallel hardcoded Zustand store, so the React copy can no longer drift from the Lua copy.web/src/stores/basic.tsremoved too β every consumer now reads fromuseScriptConfigdirectly so admin saves propagate everywhere live.
Bug fixes
Fixed character customisation handoff to
illenium-appearance(QBX) β appearance UI now opens reliably on character creation by routing throughqb-clothes:client:CreateFirstCharacterand matching illenium's exact default camera offsets so the cut between our hold-cam and illenium's cam is invisible.Fixed
NUI_READYcallback collision that left/dirk_multicharpermanently showing "Settings UI is still loading" β now listens for dirk_lib'snuiReadyevent instead of overwriting its handler.Fixed
basic.totalSlots(legacy field name) referenced inserver/main.luaβ now correctly readsbasic.maxSlots.Fixed lockup where saving the configurator with an empty
vipRolesdefault +x-arrayKeycaused smartMerge to silently drop every entry on load.Fixed
useFormFieldcalls that silently degraded toanybecause the generic was given the field value type instead of the parent form shape.Fixed module-load deadlock where
lib.scriptConfig.get('basic')at client file top awaited a server callback before the rest ofnui.luacould execute, leavingopenMulticharundefined. Client files now use.onfor module-scope snapshots and only call.getinside function bodies.Walk-and-set position picker now properly hides every body child (including Mantine portal modals) while picking, via a
data-dirk-pickingbody attribute + injected CSS rule.Multichar slot count + admin-editable basics update live in the UI as soon as the admin saves them β no more "saved 6 slots, still shows 5 until reopen".
Scene atmosphere time/weather now sticks even when a third-party time-sync resource (vSync / qb-weathersync / etc.) tries to override the clock every tick β a 250ms re-apply loop keeps our value pinned for as long as we own the scene, then exits cleanly so the bridge takes back over.
dirk_lib + dirk-cfx-react improvements
lib.scriptConfig.setBackHandler(fn)added β one-shot hook for consumers that open the configurator from their own UI and want Back / Esc / close to return to that UI instead of dirk_lib's chooser list. Drained on every exit path so focus stays claimed by the consumer.Client-side
lib.scriptConfig.get(path)now supports dot-paths like the server side already did (e.g.lib.scriptConfig.get('basic.time.hour')).<ConfigPanel>title shrunk tosize="md"+flex: 1+overflow: hiddenon the title container so longer resource names don't truncate to ellipsis.Vector2/3/4SchemaZod types added todirk-cfx-reactso consumers stop redefining them.
Update 1.1.2 09/09/2025
Changed some of the buttons/backgrounds to darker theming to match other resources better.
Altered Button.tsx to fit better with theming
Completely revampled the lifestyles system
Revamped UI with cleaner look.
Added easier ability to create/manage lifestyles from settings/lifestyles.lua
Added support for vms housing to display housing
Update 1.1.1 11/07/2025
Fixed issue with qbx_core not picking up license2 natively, resulting in no characters being shown.
Consolidated and reworked all logic for clothing/appearance menus to dirk_lib for simpler adding of more.
With illenium and all major clothing including rcore_clothing the characters will now properly display.
Added ability to use existing character_slots table from es_extended for vipSlots
Added better support for finding player cars/houses including for qs-housing.
Added ability to disable deleting of characters.
Fixed loadEvent stuff from preventing peoples HUDs showing up.
Last updated