DirkScripts
Docs
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.
