Configuration
Configure language, character slots, UI theme, camera system, animations, scene locations, and script integrations.
All settings are in Customize.lua — the only file you need to edit.
General
Prop
Type
Character Slots
Prop
Type
Customize.playersNumberOfCharacters = {
['license2:abc123...'] = 10, -- VIP
['license2:def456...'] = 8, -- Donator
}UI
Prop
Type
Camera
Cinematic dolly zoom from wide establishing shot to close portrait when a character is selected.
Prop
Type
Customize.defaultCamera = {
sideOff = 0.18,
startDist = 3.0, endDist = 2.1,
startCamZ = 1.50, endCamZ = 1.74,
startLook = 1.48, endLook = 1.65,
startFov = 58.0, endFov = 27.0,
duration = 5500,
}Players can also drag to rotate (with momentum) and scroll to zoom (FOV 16°–50°) during character selection.
Animations
Selectable idle animations in the scene settings panel. Players cycle with arrow buttons and their choice is saved per character.
Prop
Type
Customize.defaultAnimation = nil -- optional global animation
Customize.animations = {
{ label = 'Default' },
{ label = 'Street Pose', dict = 'anim@amb@nightclub@mini@dance@dance_solo@female@var_a@', clip = 'low_center' },
{ label = 'Guard', dict = 'anim@amb@business@bgen@bgen_no_work@', clip = 'stand_phone_phoneputdown_idle_nowork' },
{ label = 'Smoking', dict = 'amb@world_human_smoking@male@male_a@idle_a', clip = 'idle_b' },
{ label = 'Gang Pose', dict = 'anim@amb@nightclub@mini@dance@dance_solo@male@var_b@', clip = 'low_center' },
{ label = 'Impatient', dict = 'anim@heists@heist_corona@single_team', clip = 'single_team_loop_boss' },
}Locations
Each location defines a preview scene with character position, environment, and optional cinematic camera path.
Location Properties
Prop
Type
Cinematic (AFK Camera)
Activates after AfkTimeout seconds of inactivity. Camera moves smoothly through waypoints in a loop.
Prop
Type
Example
Customize.locations = {
{
label = 'Night Street',
pedCoords = vec4(-1006.1, -479.36, 49.03, 33.63),
camera = { -- optional
sideOff = 0.20,
startDist = 3.5, endDist = 2.0,
startFov = 60.0, endFov = 25.0,
duration = 6000,
},
animation = { -- optional
dict = 'amb@world_human_hang_out_street@female_hold_arm@idle_a',
clip = 'idle_a', flags = 1,
},
weather = 'RAIN',
time = { hour = 23, minute = 0 },
cinematic = { -- optional
waypoints = {
{ pos = vec4(-1010.67, -474.75, 49.03, 200.0), lookZ = 50.83 },
{ pos = vec4(-1000.12, -477.44, 49.03, 250.0), lookZ = 50.53 },
},
fov = 40.0, duration = 50000, lookDist = 6.5,
dof = { enabled = true, strength = 0.8, fnumber = 1.4 },
},
},
}Each character's location preference is saved to the database and persists across sessions.
Script Integration
The Scripts table controls which external resources the system integrates with. All integrations support auto-detection.
Prop
Type
Customize.Scripts = {
Appearance = 'auto', -- skin loading & character creator
SpawnSelector = 'auto', -- where existing characters spawn
Apartment = 'auto', -- first-spawn apartment selection
}If your appearance/spawn/apartment script isn't auto-detected, you can add it yourself — see Custom Integration.
Default Spawn
Fallback spawn point when no spawn selector or apartment system is active.
Customize.DefaultSpawn = vec4(-269.4, -955.3, 31.2, 205.0)Default Skin (ESX)
Default appearance for new ESX characters. Not used with QBCore/Qbox.
Customize.DefaultSkin.male = {
sex = 0, face = 0, skin = 0,
tshirt_1 = 15, tshirt_2 = 0, torso_1 = 15, torso_2 = 0,
pants_1 = 61, pants_2 = 0, shoes_1 = 34, shoes_2 = 0,
arms = 15,
}Customize.DefaultSkin.female = {
sex = 1, face = 0, skin = 0,
tshirt_1 = 15, tshirt_2 = 0, torso_1 = 15, torso_2 = 0,
pants_1 = 61, pants_2 = 0, shoes_1 = 34, shoes_2 = 0,
arms = 15,
}