👥 px-multicharacter
Complete FiveM character selection, dynamic slot unlocking, character creator, and spawn selector suite with built-in Tebex integration.
Thank You for Your Purchase! If you need assistance, feature requests, or updates, join our Discord Support Server .
📋 Compatibility & Requirements
| Layer / Component | Supported | Details / Minimum Version |
|---|---|---|
| ESX Legacy | ✅ Supported | es_extended (v1.8+ / Legacy) |
| QBCore | ✅ Supported | qb-core (Latest & Stable builds) |
| Qbox (QBX) | ✅ Supported | qbx_core |
| Database | ✅ Required | oxmysql (player characters & Tebex slots) |
| Appearance | ⚙️ Configurable | skinchanger, qb-clothing, illenium-appearance, fivem-appearance |
| Spawn System | ✅ Built-in | Built-in spawn selector + Last Location |
| Tebex Unlocks | ⚡ Automated | Dynamic slot redeem codes & console commands |
| Resmon Values | ⚡ Highly Optimized | 0.00ms (In-game idle) • 0.01 - 0.02ms (During character selection UI) |
| Minimum Artifact | 5848+ | FiveM server artifact build |
💾 Database Setup
Import sql/sql.sql into your server database before starting the resource:
CREATE TABLE IF NOT EXISTS `px-multichar_slots` (
`license` VARCHAR(60) NOT NULL PRIMARY KEY,
`slots` INT(11) NOT NULL DEFAULT 4,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `px-multichar_codes` (
`code` VARCHAR(50) NOT NULL PRIMARY KEY,
`slots` INT(11) NOT NULL DEFAULT 1,
`used` TINYINT(1) NOT NULL DEFAULT 0,
`used_by` VARCHAR(60) DEFAULT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`redeemed_at` TIMESTAMP NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;📦 Installation
Step 1: Add to Resources
Place px-multicharacter into your server’s resources directory (e.g. resources/[scripts]/px-multicharacter).
- fxmanifest.lua
- config.lua
Step 2: Configure for Your Framework
Choose the setup instructions below that correspond to your server framework.
ESX Legacy
1. Dependencies
Ensure you have the following resources started on your server:
oxmysqles_extendedskinchanger
Appearance Note: skinchanger is the only required appearance dependency. esx_skin is completely optional. If you use illenium-appearance, fivem-appearance, or the built-in character creator, you do not need esx_skin.
2. Disable Conflicting Resources
In your server.cfg, disable default ESX multicharacter and identity resources:
# Disable default ESX character selection and registration:
# ensure esx_multicharacter
# ensure esx_identity3. Start Order (server.cfg)
Add px-multicharacter after ESX core and dependencies:
ensure oxmysql
ensure es_extended
ensure skinchanger
# ensure esx_skin # Optional: only if using default esx_skin menus
ensure px-multicharacter4. Clothing & Appearance Options
- Built-in Creator (Default): The resource includes an integrated character creator. Players configure genetics, face, hair, and clothing directly inside the UI. Appearance is automatically saved to the database.
- External Menus: If you prefer using an external clothing shop (
illenium-appearance,fivem-appearance, oresx_skin), setConfig.CharacterCreator.enableDefaultCreator = falseinshared/config.luaand add your trigger inConfig.CharacterCreator.customCharacterCreator.
⚙️ Configuration (shared/config.lua)
General Settings
Config.Settings = {
-- Language: 'en' or 'tr'
language = 'en',
-- UI Accent Color: 'violet', 'cyan', 'orange', 'gold', 'pink', 'emerald', 'crimson'
theme = 'violet',
-- Maximum slots a player can ever unlock
maxslot = 6,
-- Slots unlocked by default for new players
availablSlots = 4,
-- Allow players to delete characters from the menu
enableDeleteButton = true,
-- Enable slot purchasing / promo code unlock dialog in UI
enableSlotPurchasing = true,
-- Store link opened when clicking "Buy from Store"
storeLink = 'https://pixelsoft.tebex.io',
-- Phone number format for newly created characters
phoneFormat = '555-%04d',
}Spawn Settings
Config.Spawn = {
-- true: Use built-in spawn selector with Last Location
-- false: Calls customSpawn hook below
enableDefaultSpawn = true,
-- Default spawn for newly created characters
defaultSpawn = {
directSpawn = true, -- Spawns new players directly at coords without opening menu
coords = vector4(-1037.86, -2737.85, 20.17, 330.52), -- LSIA Airport
},
-- Hook for external spawn resources (e.g. qb-spawn)
customSpawn = function(charData)
-- TriggerEvent('qb-spawn:client:setupSpawns', charData, false, nil)
end,
-- Interactive spawn points available in the spawn menu
spawnPoints = {
{
id = 'legion_square',
name = 'Legion Square',
type = 'public',
typeLabel = 'DOWNTOWN',
description = 'Central city square and transit hub.',
coords = vector4(215.8, -910.1, 30.7, 160.0),
icon = 'Building',
},
{
id = 'palms_motel',
name = 'Palms Motel',
type = 'motel',
typeLabel = 'ACCOMMODATION',
description = 'Comfortable roadside motel with parking.',
coords = vector4(315.6, -234.8, 54.0, 340.0),
icon = 'Bed',
},
{
id = 'sandy_shores',
name = 'Sandy Shores',
type = 'public',
typeLabel = 'DESERT REGION',
description = 'Rural Blaine County hub.',
coords = vector4(1850.2, 3680.5, 34.2, 210.0),
icon = 'Building',
},
}
}💎 Tebex Integration (Paid Slots)
You can sell extra character slots through your Tebex store with instant delivery.
1. Configure Tebex Package
- In your Tebex Dashboard, go to Packages and edit your character slot package.
- Under FiveM Server Commands, add the following command:
(Replace
addslotcode {transaction} 11with the number of slots this package grants). - Important: Check the box “Execute this command even if the player is offline”.
2. How Players Redeem
- The player purchases the slot package on your Tebex webstore.
- Tebex executes
addslotcode <TransactionID> 1on the server console. - In-game, the player clicks any locked slot, enters their Tebex Transaction ID, and clicks Redeem.
- The slot unlocks immediately.
🛠️ Commands
| Command | Arguments | Permission | Description |
|---|---|---|---|
/setslots | [playerId / license] [slots] | Admin / Console | Sets total unlocked slots for a player |
/giveslot | [playerId / license] [slots] | Admin / Console | Adds slots to a player |
/generateslotcode | [slots] [count] | Admin / Console | Generates batch promo codes (giveaways/events) |
/checkslotcode | [code] | Admin / Console | Checks status and slot value of a code |
/removeslotcode | [code] | Admin / Console | Deletes a promo code |
/addslotcode | [code] [slots] | Admin / Console | Manually creates a redeemable code |
/logout | None | Everyone | Logs out and returns to character selection |
/relog | None | Everyone | Alias for /logout |
⚠️ Troubleshooting
Common installation issues and immediate solutions:
❌ Failed to verify protected resource / Keymaster Error
Error Message: Could not load resource px-multicharacter (failed to verify protected resource)
Cause: The FiveM server sv_licenseKey in your server.cfg does not belong to the Cfx.re / Keymaster account that purchased the asset on Tebex, or Keymaster asset cache has not synced yet.
Solution Steps:
- Log into keymaster.fivem.net with the account used to purchase the asset.
- Ensure your server license key was generated under this exact account, or transfer the asset grant.
- Restart your FiveM server (Keymaster asset grant synchronization may take 5–10 minutes).
❌ SCRIPT ERROR: attempt to index a nil value (oxmysql / MySQL)
Error Message: @px-multicharacter/server/main.lua:… attempt to index a nil value (field ‘query’)
Cause: oxmysql is started after px-multicharacter in server.cfg, or the database connection is not established before the script executes queries.
Solution Steps:
- Ensure
ensure oxmysqlis placed at the very top of yourserver.cfg(before framework and gameplay resources). - Verify your
set mysql_connection_stringcredentials and connection parameters. - Confirm that the required player table (
usersorplayers) exists in your database schema.
⚠️ NUI Interface Does Not Open / Black Screen on Connect
Cause: Resource folder was renamed (e.g. px-multicharacter-main extracted from a zip/git branch). The NUI root URL cannot locate the web bundle.
Solution: Rename the folder to strictly px-multicharacter. Remove any -main, -master, or version suffixes.
⚠️ Player Falls Through Map After Selecting Character
Cause: Custom MLO/IPL interior collisions take longer to stream over slow network connections or heavy map assets.
Solution: Verify Config.Spawn.defaultSpawn.coords in shared/config.lua or ensure the player ped is frozen for ~1.5 seconds on spawn to allow world collisions to load.
⚠️ Appearance / Clothing Not Loading (Player Spawns Naked or Invisible)
Cause: Appearance system mismatch (illenium-appearance, fivem-appearance, or qb-clothing) or appearance script starts after px-multicharacter.
Solution: Ensure your appearance resource is configured in shared/config.lua and started before px-multicharacter in server.cfg.
❓ FAQ (Frequently Asked Questions)
Do I need esx_skin on ESX?
esx_skin on ESX?No. Only skinchanger is required. If your server uses illenium-appearance, fivem-appearance, or the built-in creator, you do not need esx_skin.
How do I change the default number of slots?
In shared/config.lua, change Config.Settings.availablSlots to the desired number of default unlocked slots, and Config.Settings.maxslot to the maximum possible slots.
How do players return to the character menu?
Players can type /logout or /relog in chat. Their character data, position, and inventory are saved before returning to the selection screen.
Can I use an external spawn menu like qb-spawn?
Yes. Set Config.Spawn.enableDefaultSpawn = false and add your export or event trigger inside Config.Spawn.customSpawn.
💬 Support
If you need assistance with installation or configuration, join our Discord server:
- Discord: discord.gg/AVvkrvrUsW
- Store: pixelsoft.tebex.io