FiveM Multicharacter & Players — Quasar Framework (qs-core) | Quasar Store | Quasar Store
Documentation
Characters & Players
FiveM multicharacter, loading screen, clothing creator and death system for ESX and QBCore servers: spawn, downed state, EMS revive and settings in qs-core.
Everything a player lives through from the moment they connect to your FiveM server until they are walking the streets — and what happens when they go down — is handled by Quasar Framework (qs-core) and its core resources. This page follows that journey step by step: the loading screen, the first-join intro, the multicharacter screen, the clothing creator, the spawn, and the downed, respawn and revive system. Each step comes with the settings that shape it.
Character selection, creation and appearance are built in. There is no separate multicharacter, identity or skin script to install, whether your other scripts are written for ESX, ESX Legacy or QBCore: they all see the same character through the es_extended and qb-core bridges.
Resource
Folder
What it does
loadingscreen
[core]
The loading screen shown while the game loads: server name, default keys and tips.
qs-intro
[core]
First-join cinematic where the player picks the colours of every interface.
qs-coremulticharacter
[core]
Character selection, creation, deletion and /logout.
qs-clothing
[core]
Appearance editor, character creator, clothing stores, barbers and tattoo parlours.
qs-core
[core]
Characters in the database, spawning, saving, death, downed state, respawn and revive.
When a player joins, five stages run one after the other. Each resource hands over to the next on its own, so the player never sees a gap or the default FiveM spawn.
Connection and ban check
While the player is connecting, qs-core reads their Rockstar license: identifier. If Config.EnableBans is true and that license has an active ban, the connection is refused with the ban reason. If the license has an admin group saved with /setgroup, that group is applied before they finish connecting.
Loading screen
GTA V loads the map while loadingscreen shows the server name, a progress bar, the default keys and rotating tips. It stays up until the next stage is ready to take over, then plays a short outro.
Intro (first join only)
If the player has never chosen a colour palette, qs-intro plays a short cinematic and opens the colour picker. The palette they pick is saved to their account. Players who already have a palette skip this stage entirely.
Character selection
qs-coremulticharacter opens the character screen: pick a character, create a new one (with the clothing creator), delete one or quit.
Spawn
qs-core loads the character, applies its appearance and places it at its last saved position — or at the default spawn for a brand-new character — then fades the screen in. The HUD and chat appear, and the player is in.
Stage
Resource
Ends when
Can be turned off
Ban check
qs-core
The connection is accepted or refused
Config.EnableBans = false in qs-core/shared/config.lua
Loading screen
loadingscreen
The intro or the character screen is ready (or 12 s after spawning, as a safety net)
The FiveM loading screen of Quasar Framework is a full-screen page with:
The server name in large letters, a subtitle under it and a one-line about text.
A progress bar that follows the real game loading and never goes backwards.
Key hints: chips that show the default keys of the framework, so new players know the controls before they spawn.
Tips: a line at the bottom that rotates every few seconds.
Its colours follow the player's saved palette (primary, accent, glow and border). On a player's very first join there is no palette yet, so it shows the default blue of the framework.
When the intro or the character screen is ready, the bar jumps to 100 %, a flash and zoom-out play, and the screen fades to black into the next stage. If nothing asks it to close, it closes by itself 12 seconds after the player spawns, so a player is never stuck on it.
Every interface of Quasar Framework — HUD, menus, notifications, chat, inventory, character screen, loading screen — reads the same colour palette. The intro lets each player pick their own the first time they join.
The intro plays only when the player has no saved palette. The palette is stored per Rockstar license (table player_colors), so it belongs to the account, not to a character: a player sees the intro once, on their first join, and never again unless the palette is cleared. Everyone else goes straight to the character screen.
The screen fades into a cinematic scene in an interior. The player's own character is hidden; an actor walks across the frame, from left to right, in front of a cinematic camera with a shallow depth of field.
At the right of the frame the actor turns to the camera and crosses its arms, and the colour picker opens: Choose Your Colors — "Pick the palette your whole HUD, menus and notifications will use."
The player picks one of the 8 presets — Ocean (the default blue), Cyan, Emerald, Violet, Rose, Crimson, Amber and Slate — or switches to Custom and chooses their own Primary and Accent colours.
Confirm applies the palette to every interface, saves it, and hands over to the character screen.
Opens the same colour picker in game at any time. Provided by qs-core (Config.AllowColorChange, name set by Config.ColorCommand).
/introreset
Everyone
Deletes your saved palette. You see "Colours cleared. Reconnect to replay the intro." and the intro plays again on your next connection.
/introoutfit
Everyone
Prints the outfit of your current character to the F8 console in the format of Config.Ped, so you can dress the intro actor like your character.
The server-wide default palette (what players see before they choose, and what the server uses) is Config.Theme in qs-core/shared/config.lua — see Configuration.
false skips the intro for everyone: players go straight to the character screen and keep the server's default palette until they use /colors.
Config.Dof
true
Background blur (depth of field) on the intro camera.
Config.Cam.pos
vec3(1000.46, -3108.20, -38.80)
Camera position. The actor turns to face this point.
Config.Cam.look
vec3(997.54, -3108.59, -38.80)
Point the camera looks at.
Config.Cam.fov
25.0
Field of view. Lower is closer.
Config.Ped.model
'mp_m_freemode_01'
Actor model.
Config.Ped.start
vec4(997.92, -3112.22, -39.00, 7.86)
Where the actor appears (x, y, z, heading).
Config.Ped.finish
vec3(997.76, -3107.55, -39.00)
Where the actor walks to.
Config.Ped.speed
1.0
Walking speed (1 walk, 2 run).
Config.Ped.pose
Arms crossed
Animation { dict, anim } the actor holds at the finish while the colour picker is open. Default: anim@heists@heist_corona@single_team / single_team_loop_boss. false = no pose.
Config.Ped.components
10 clothing components
Actor clothing { id, drawable, texture }. Generate yours with /introoutfit.
Config.Ped.props
5 props, all empty
Actor props (hat, glasses, ears, watch, bracelet). drawable = -1 means none.
Config.Scene.hide
vec3(1001.46, -3108.20, -39.00)
Where the player's real (hidden, frozen) character waits during the scene.
Dress the intro actor like your server's mascot
Join your server, put the outfit on your character (with /clothing as an admin, for example).
Dump the outfit
Type /introoutfit in the chat and open the F8 console.
Paste it
Copy the printed model, components and props into Config.Ped in qs-intro/config.lua and restart qs-intro.
Test it
Type /introreset, reconnect, and watch the intro with your new actor.
Multicharacter: selecting and creating characters#
qs-coremulticharacter is the FiveM multicharacter screen of Quasar Framework. Each player can own several characters, each with its own money, job, inventory, appearance and position.
Your character stands in an interior in an idle pose, framed by a cinematic camera with a blurred background. The HUD and the chat are hidden and other players are invisible to you while you choose.
Your characters are listed in slots. Each card shows the character's name and job ("Civilian" when they have none). Highlighting a card dresses the preview with that character's appearance and a new idle pose.
Play loads the highlighted character.
Delete removes it after a confirmation: "This character will be permanently deleted. This cannot be undone."
Create character appears on every free slot.
Quit game asks for confirmation and disconnects you ("Left the game.").
A player with no characters yet goes straight to the creation form.
Choosing Create character opens the form "Create your character to begin your adventure in our city."
Field
Required
Rules
First name
Yes
Up to 30 characters.
Last name
Yes
Up to 30 characters.
Date of birth
No
Day, month and year selectors. Stored as YYYY-MM-DD when all three are chosen.
Nationality
No
Free text, up to 40 characters.
Sex
Yes (Male by default)
Male or Female. Sets the freemode model (mp_m_freemode_01 / mp_f_freemode_01).
The first and last name are what other players see in the chat, in /me and on the admin menu, and what ESX and QBCore scripts read as the character's name.
When qs-clothing is running, pressing Create does not spawn you straight away:
The camera glides from the selection shot to a close-up of the face.
The appearance editor opens in creator mode with four sections: Face & Hair, Upper Body, Lower Body and Accessories. Each section moves the camera to frame that part of the body. Tattoos are not offered here — they are done later in a tattoo parlour.
Confirm creates the character with that look, loads it and spawns it.
Without qs-clothing, the character is created as soon as the form is sent, with the default appearance.
There is no spawn-location selector: a character always spawns where it was last saved. A new character spawns at Config.DefaultSpawn. The position is saved automatically every 5 minutes (Config.SaveInterval), on /logout, when the player disconnects and when qs-core stops.
During the spawn the screen is black while the appearance is applied and the world around the character loads, then it fades in, the HUD and chat come back and the character is ready. A character that was downed when the player disconnected spawns downed again (see Death, downed state and revive below).
/logout saves your character, unloads it and takes you back to the character screen without disconnecting. It only works while a character is loaded. Rename it with Config.LogoutCommand or remove it with Config.EnableLogout = false.
qs-clothing handles the appearance of every character on the GTA V freemode models: the creator during character creation, the appearance editor, and the clothing stores, barbers and tattoo parlours around the map.
The editor is a panel on the right of the screen with your character framed by a camera that moves to the section you are editing. The HUD is hidden while it is open, and you can rotate your character left and right.
Section
Categories
Face & Hair
Hair, Beard
Upper Body
Undershirt, Arms, Top
Lower Body
Legs, Shoes
Accessories
Mask, Bag, Hat, Glasses
Tattoos
Business, Hipster, Biker, Air Races, Beach, Festive, Gunrunning, Import/Export, Lowrider II, Lowrider
For each category you pick a model and its texture (Tex). Hat, glasses and beard can also be removed entirely.
Save keeps the new look and shows "Outfit saved."
Cancel or Esc puts your previous look back; nothing is saved.
The appearance is saved with the character: it is applied every time the character loads, shown on the character screen, and written to the database with the next save. The editor works with clothing, hair, beard, props and tattoos; it does not edit face shape, heritage or hair colour.
Stores are marked on the map. Walk up to one, and within 3 metres a help text appears; press E to open the editor with only the sections that store offers. Stores are free — no money is taken.
Store type
Map blip
Sections offered
Help text
Locations
clothing
Clothing Store (sprite 73)
Upper Body, Lower Body, Accessories
Press E to change your clothes
14 (Ponsonbys and Suburban stores)
barber
Barber (sprite 71)
Face & Hair
Press E to change your hair & beard
7
tattoo
Tattoo Parlor (sprite 75)
Tattoos
Press E to get tattoos
6
In a tattoo parlour your character is stripped to underwear while you choose, so you can see the tattoos; your outfit comes back when you save or cancel.
Tattoos come from 10 GTA V collections. One tattoo per collection can be active at a time, so a character can wear up to 10 tattoos. They are applied on top of the outfit and kept with the character. Tattoos are chosen in tattoo parlours (or with /clothing), not in the character creator.
Opens the full editor anywhere, with every section including Tattoos. Players without permission see "No permission". It does nothing from the server console.
add_ace group.admin command allow in server.cfg (shipped by the txAdmin recipe) already grants command.qs to your admins. See Administration.
The type must be one of the keys of Config.StoreTypes: clothing, barber or tattoo. To change which sections a store type opens, or its blip, edit that type's enabled list and blip in Config.StoreTypes.
When a character's health reaches zero in Quasar Framework, they do not die and respawn straight away: they go down. A downed player waits for a paramedic, calls EMS, or gives up and respawns at a hospital. This death system lives in qs-core; the EMS job that treats and revives players is qs-ambulance (see Jobs, Police & EMS).
Pressing E after the countdown fades the screen out and respawns you at the nearest hospital in Config.Death.hospitals, standing and at full health:
Hospital
Position
Pillbox Hill Medical Center (Los Santos)
vec4(298.6, -584.6, 43.26, 65.0)
Paleto Bay Medical Center (Blaine County)
vec4(-247.6, 6331.4, 32.4, 200.0)
Respawning restores your health but does not treat your wounds. Injuries tracked by qs-ambulance (bleeding, bruises, burns) stay until a medic treats them or you check in with the doctor at Pillbox Hill, who heals you completely for $250 cash.
The medic presses E next to you, treats every injury with the right item, and you get up: "A medic has treated your wounds". The medic earns $250 cash (Config.ReviveReward).
/revive [id]
Admins (ACE command.qs)
Revives a player by server ID, or yourself without an ID.
Admin menu
Admins (qs-admin, F6)
Revive action on a player.
txAdmin Heal
txAdmin admins
Heal on one player revives them; Heal all revives every loaded player.
Your own scripts
Developers
exports['qs-core']:SetPlayerDead(source, false) on the server.
A revived player stands up where they are, at full health, with the HUD and minimap back, and sees "You were revived."
While you are down you cannot open the inventory (F1), the item wheel (TAB) or use the quick slots (1–5). If one of them was open when you went down, it closes.
The downed state is saved with the character. A player who disconnects (or crashes) while down spawns downed again the next time they load that character, with the countdown starting over. Logging off is not a way out of a scene.
Fired on the player's client when they go down and when they are revived or respawn.
lua
AddEventHandler('qs:client:onDeath', function()-- close your menu, stop your minigame...end)
AddEventHandler('qs:client:onRevive', function()-- the player is back on their feetend)
qs:client:emsCall — client event
Fired when a downed player presses G. qs-ambulance forwards it to every medic. Trigger it yourself (TriggerEvent('qs:client:emsCall')) to page EMS from another script, such as a phone app.
Driving it from your own scripts? Every export and event of the framework is listed in Commands and Exports.
Quasar Framework writes the essential player data to replicated state bags. Read them on the server with Player(source).state and on the client with LocalPlayer.state (or Player(serverId).state for another player) — no callback needed.
State bag
Value
Set by
Updated
citizenid
The loaded character's citizen ID (QS + 6 characters)
The FiveM player name stored when the character was created
qs-core
When a character loads.
dead
true while the player is downed
qs-core
On load and every time they go down or are revived.
cuffed
true while the player is handcuffed
qs-police
When a police officer cuffs or uncuffs them.
lua
-- serverlocal state = Player(source).state
if state.job and state.job.name == 'police'andnot state.dead then-- an officer who is on their feetend-- clientif LocalPlayer.state.cuffed thenreturnend
ESX scripts see the citizen ID as xPlayer.identifier; QBCore scripts read it from Player.PlayerData.citizenid. How the bridges map the rest of the player is explained in ESX & QBCore Compatibility.