Skip to content

Multicharacter: config files ​

These files stay readable in every build (escrow too), so you can change them. Shown as shipped in version 1.0.3.

shared/config.lua ​

lua
Config = {}
Config.Debug = false
Config.Interior = vector3(-1465.2, -535.7, 55.53) -- Interior to load where characters are previewed
-- Where a brand-new character appears when no starter-apartment script runs (always on
-- ESX and standalone). Must be OUTSIDE: it used to equal Config.Interior, which left new
-- characters stuck inside the selection apartment. Default: LSIA arrivals, like stock
-- qb-multicharacter. vector4 = with heading.
Config.DefaultSpawn = vector4(-1035.71, -2731.87, 13.76, 330.0)
Config.PedCoords = vector4(-1470.19, -530.11, 55.53, 0.71)-- Create preview ped at these coordinates
Config.PedConfig = {
    [1] = { coords = vector4(-1470.22, -530.41, 55.53, 20.0), anim = { dict = "timetable@ron@ig_3_couch", anim = "base" } },
    [2] = { coords = vector4(-1471.67, -528.42, 55.53, 270.0), anim = { dict = "timetable@ron@ig_3_couch", anim = "base" } },
    [3] = { coords = vector4(-1468.36, -529.2, 55.53, 75.0), anim = { dict = "timetable@ron@ig_3_couch", anim = "base" } },
    [4] = { coords = vector4(-1474.51, -533.62, 55.55, 313.0), anim = { dict = "timetable@ron@ig_3_couch", anim = "base" } },
}
Config.HiddenCoords = vector4(-1478.0, -540.0, 45.0, 0.0) -- Hides your actual ped while you are in selection
Config.CamCoords = vector4(-1468.1, -534.96, 54.95, 38.57) -- Camera coordinates for character preview screen
Config.EnableDeleteButton = true -- Define if the player can delete the character or not

Config.DefaultNumberOfCharacters = 4 -- Define maximum amount of default characters, Max 4 
Config.PlayersNumberOfCharacters = { -- Per-licence slot overrides (licence is in your players/users table)
    -- { license = "license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", numberOfChars = 4 },
}


Config.coordsSequence = {
    vector4(-1467.49, -534.61, 56.8, 38.68),
    vector4(-1466.8, -529.5, 56.8, 120.0),
    vector4(-1474.71, -530.11, 56.88, 295.98),
}

Config.duration = 35000 -- 35 seconds per transition

Config.MugshotsEnabled = true
Config.MugshotsTransparent = false
Config.MugshotsBackgroundColor = "rgba(1, 169, 143, 0.2)"
Config.MugshotsInterval = 600000
Config.MugshotsInitialDelayMs = 12000
Config.MugshotsOnJoinDelayMs = 5000
Config.ApplyScaleDelayMs = 3000
Config.ApplyScaleRepeatDelayMs = 8000
Config.customNationality = "American"
Config.idleCameraDelayMs = 60000
Config.PedModels = { male = "mp_m_freemode_01", female = "mp_f_freemode_01" }
Config.CharacterCreation = {
    Height = { Min = 150, Max = 200, Default = 175 },
    Weight = { Min = 50, Max = 120, Default = 80 },
    Birthday = { Default = "2005-05-05", Min = "1900-01-01", Max = "2023-12-31" },
}
Config.Preview = {
    RotateSensitivity = 0.25,
    CameraFov = 60.0,
    FocusDistance = 3.2,
    FocusHeight = 0.85,
    FocusTargetHeight = 0.35,
    FocusDurationMs = 1400,
    CreateDistance = 3.0,
    CreateHeight = 0.75,
    CreateTargetHeight = 0.35,
    ScreenFadeInMs = 1000,
    ChooseCharFadeOutMs = 10,
    ChooseCharWaitMs = 1000,
    ChooseCharPostWaitMs = 1500,
    CloseDefaultFadeOutMs = 500,
    CloseDefaultWaitMs = 2000,
    CloseDefaultPreOpenWaitMs = 500,
    CloseDefaultFadeInMs = 250,
}
Config.UI = {
    WelcomePercentage = "30vh",
    LoadingDotsIntervalMs = 500,
    LoadingScreenMs = 2000,
    SetupCharactersDelayMs = 500,
    FadeInPositions = {
        CharactersList = "80.6%",
        Bar = "79%",
        Bar2 = "78.92%",
        Icon = "66.66%",
        Text = "70.26%",
        Text2 = "72.66%",
    },
    FadeOutPercent = "-40%",
    LayoutPosition = "top",
    IdentityCreationSide = "left"
}
Config.Notifications = {
    CharacterSlotsFull = "Character slots are full",
    CharacterDeleted = "Character deleted!",
    CharacterDeleteFailed = "Could not delete that character",
    DisconnectReason = "You have disconnected from the server",
}
-- QBCore, Qbox and ESX are detected automatically; with none running the
-- script runs standalone. To force one, or to wire up a custom core, edit
-- bridge/config.lua (built in; the lumo-bridge resource is not needed).

-- After an existing character is chosen this hands over to a spawn selector
-- (lumo-spawn, qb-spawn, qbx_spawn). With none of these running, the player is
-- placed at their last location instead (Config.DefaultSpawn when unknown).
-- Add your own spawn resource's name here if it listens for
-- 'qb-spawn:client:setupSpawns'.
Config.SpawnResources = { 'lumo-spawn', 'qb-spawn', 'qbx_spawn' }
Config.LastLocationFallback = true

-- Optional: share theme settings when lumo-ui is installed. Not a dependency.
Config.SyncLumoUI = true

bridge/config.lua ​

lua
--- lumo-multicharacter — framework settings
---
--- QBCore, Qbox and ESX are detected automatically; with none of them running
--- the script runs standalone. Most servers never touch this file. The rest
--- of the settings live in shared/config.lua.
---
--- This folder (bridge/) is the script's built-in framework layer. You do NOT
--- need the separate lumo-bridge resource.

LumoBridgeConfig = {
    --- 'auto' | 'qb' | 'qbx' | 'esx' | 'standalone' | 'custom'
    ---   auto       — Qbox (qbx_core) > QBCore (qb-core) > ESX (es_extended) > Fallback
    Framework = 'auto',

    --- Used by 'auto' when no core is running. 'standalone' = no framework.
    --- Set 'custom' only if you wire your own core in Custom below.
    Fallback = 'standalone',

    --- Print the detected framework and every unresolved call to the console.
    Debug = false,

    --- Resource names, in case yours are renamed.
    Resources = {
        qb  = 'qb-core',
        qbx = 'qbx_core',
        esx = 'es_extended',
        oxlib = 'ox_lib',
    },

    --- How long a server callback waits for its answer before giving up (ms).
    CallbackTimeout = 15000,

    --- Inventory used for starter items. 'auto' probes: lumo-inventory,
    --- ox_inventory, qb-inventory, qs-inventory, ps-inventory.
    Inventory = 'auto',

    --- Appearance resource used for the preview peds and the first-time
    --- creator. 'auto' probes: lumo-clothing, illenium-appearance,
    --- fivem-appearance, qb-clothing, esx_skin.
    Appearance = 'auto',

    --- Given to new characters on Qbox and standalone (with an inventory
    --- resource running). On QBCore the core's own QBShared.StarterItems wins;
    --- ESX uses ESX.StarterItems below.
    StarterItems = {
        { item = 'phone',          amount = 1 },
        { item = 'id_card',        amount = 1 },
        { item = 'driver_license', amount = 1 },
    },

    ESX = {
        --- Starter items on ESX. These three ship in stock ESX Legacy's `items`
        --- table (phone, bread, water); id_card/driver_license do not exist there.
        StarterItems = {
            { item = 'phone', amount = 1 },
            { item = 'bread', amount = 3 },
            { item = 'water', amount = 3 },
        },

        --- How ESX multichar identifiers look. %s = slot, %l = licence hex.
        IdentifierFormat = 'char%s:%l',
        --- true only for an ESX build without per-slot identifiers.
        SingleCharacter = false,
        --- Warn at boot when esx_multicharacter is still running.
        VerifyMulticharAtBoot = true,
        --- Character-owned tables wiped when an ESX character is deleted.
        --- Missing tables are skipped.
        DeleteTables = {
            { table = 'owned_vehicles',   column = 'owner' },
            { table = 'user_licenses',    column = 'owner' },
            { table = 'datastore_data',   column = 'owner' },
            { table = 'addon_inventory_items', column = 'owner' },
            { table = 'addon_account_data',    column = 'owner' },
            { table = 'player_mugshots',  column = 'citizenid' },
        },
        --- Override for ESX forks with a different login call:
        --- function(source, identifier, newCharacterData) ... return true end
        LoginHook = nil,
    },

    --- Resources that run the whole new-character sequence themselves
    --- (pick apartment, place ped, open creator). With one running, this
    --- script stands aside after creating the character.
    StartingApartmentResources = {
        'qbx_properties',
        'qbx_apartments',
        'ps-housing',
    },

    --- Standalone (no framework). This script stores the characters in the
    --- `lumo_characters` table and is the "core" other scripts read from.
    Standalone = {
        OwnsCharacters = true,              -- keep true in this script
        CharacterResource = 'lumo-multicharacter',
        SaveInterval = 60000,               -- position save, ms
        RememberPosition = true,
        SetPedModel = true,                 -- freemode ped matching the gender
    },

    --- Only for Framework = 'custom'. See docs/CUSTOM-FRAMEWORKS.md.
    Custom = {
        client = {},
        server = {},
        inventory = {},
    },

    --- Before deleting a character, also delete rows that have a FOREIGN KEY
    --- on it (Qbox `properties.owner`), or the database refuses the delete.
    --- Found automatically from your database.
    DeleteLinkedRows = true,

    --- Extra character-owned tables to clean when a character is deleted
    --- (any framework). Example: { table = 'my_table', column = 'citizenid' }
    CharacterDeleteTables = {},
}