UZ Scripts
Multicharacter

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.

Customize.lua

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,
}

Troubleshooting

On this page