Tu as un serveur FiveM qui démarre avec les ressources de base (chapitre 01) et tu as choisi QBCore (chapitre 02). Ce chapitre t'emmène jusqu'à une ville jouable : multi-personnage, appartement, inventaire, garage, banque, police, ambulance, mécano.
Sur TeamKit il n'y a pas de txAdmin, donc pas de recette « QBCore Framework » qui télécharge tout. Cette recette est publique : tu vas reproduire à la main ce qu'elle fait, dans le panel AMP.
Vérifié le 7 septembre 2026 :
- L'organisation GitHub de QBCore s'appelle désormais
qbcore-fivem(https://github.com/qbcore-fivem). Les anciennes adressesgithub.com/qbcore-framework/...y redirigent. - La documentation https://docs.qbcore.org redirige vers https://qbcore.org/docs.
- La recette officielle (liste des ressources,
server.cfgde référence, SQL complet) : https://github.com/qbcore-fivem/txAdminRecipe - Les dépôts
qb-*n'ont pas de « release » : on télécharge la branchemain(Code → Download ZIP). oxmysqlv2.14.1 — https://github.com/overextended/oxmysql/releases
Ce que tu vas installer #
| Bloc | Contenu | D'où |
|---|---|---|
| Cœur | qb-core |
dépôt qbcore-fivem/qb-core |
Ressources qb-* |
multi-personnage, spawn, appartements, vêtements, inventaire, garages, banque, métiers, admin… | un dépôt par ressource |
| Dépendances | oxmysql, PolyZone, progressbar, interact-sound, menuv, connectqueue (optionnel) |
oxmysql.zip + dépôts qbcore-fivem |
| Base de données | qbcore.sql de la recette (toutes les tables) |
dépôt txAdminRecipe |
✅ À retenir : QBCore, c'est une trentaine de dépôts séparés. Télécharge-les dans un dossier de travail avant d'envoyer quoi que ce soit.
Avant de commencer #
- Ton serveur démarre et est « online » sur Status, clé Cfx.re renseignée.
- FileZilla ou WinSCP connecté en SFTP (identifiants sur Status → Connection Info).
- Les infos de ta base sur le tableau de bord teamkit.fr : hôte local, port, utilisateur, nom de base, lien vers l'interface web (Adminer).
- Une base MariaDB. Le SQL de la recette utilise
CREATE TABLE IF NOT EXISTSet des colonnes JSON avec contraintes : sur MySQL 8.4 certaines constructions des packs FiveM échouent (chapitre 06). Si ton tableau de bord indique MySQL 8.4, demande une base MariaDB au staff.
1. Télécharger les archives #
- Télécharge
oxmysql.zipsur https://github.com/overextended/oxmysql/releases/latest (le zip de release, pas « Source code »). - Ouvre https://github.com/qbcore-fivem/txAdminRecipe, clique Code → Download ZIP. Tu y prends deux fichiers :
qbcore.sql(le schéma complet) etserver.cfg(à lire, pas à envoyer : il te sert de référence pour Starting Resources). - Pour chaque dépôt de la liste ci-dessous, ouvre
https://github.com/qbcore-fivem/<nom>et clique Code → Download ZIP.
Liste minimale pour une ville jouable (tous sur https://github.com/qbcore-fivem) :
Dépendances : PolyZone progressbar interact-sound menuv connectqueue
Cœur et interface: qb-core qb-menu qb-input qb-target qb-smallresources qb-weathersync
Personnage : qb-multicharacter qb-spawn qb-apartments qb-interior qb-clothing
Inventaire/armes : qb-inventory qb-weapons
HUD et menus : qb-hud qb-radialmenu qb-scoreboard
Véhicules : qb-vehiclekeys qb-garages qb-vehicleshop qb-fuel
Économie : qb-banking qb-management qb-shops qb-phone qb-cityhall
Métiers : qb-policejob qb-ambulancejob qb-mechanicjob qb-doorlock
Administration : qb-adminmenu
- Décompresse chaque zip. Chaque archive contient un dossier d'enrobage nommé
<nom>-main/: renomme-le en<nom>(par exempleqb-core-main→qb-core). FXServer identifie une ressource par le nom de son dossier :qb-core-mainne serait pas trouvé parensure qb-core. - Vérifie que chaque dossier renommé contient un
fxmanifest.luaà sa racine.
La recette complète installe une cinquantaine de qb-* (drogues, braquages, courses, jobs secondaires, maps, voix). Tu les ajouteras plus tard, un par un.
✅ À retenir : renomme xxx-main en xxx avant l'envoi. C'est l'erreur n°1 des installations QBCore à la main.
2. Déposer les ressources par SFTP #
Reprends l'organisation de la recette : quatre dossiers-catégories entre crochets dans server-data/resources/.
- Ouvre
server-data/resources/en SFTP. Les dossiers[system],[managers],[gameplay],[gamemodes],[local],[test]sont la base FiveM installée par AMP : ne les touche pas. - Crée
[standalone]et dépose dedansoxmysql,PolyZone,progressbar,interact-sound,menuv,connectqueue. - Crée
[qb]et dépose dedansqb-coreet tous les autresqb-*. - Crée
[voice]et[defaultmaps]si tu installespma-voice/qb-radioet les maps de la recette. Sinon, laisse-les de côté.
server-data/resources/
├── [system] [managers] [gameplay] [gamemodes] [local] [test] (base FiveM, déjà là)
├── [standalone]/
│ ├── oxmysql/ PolyZone/ progressbar/ interact-sound/ menuv/ connectqueue/
├── [qb]/
│ ├── qb-core/
│ ├── qb-multicharacter/ qb-spawn/ qb-apartments/ qb-interior/ qb-clothing/
│ ├── qb-inventory/ qb-weapons/ qb-garages/ qb-vehiclekeys/ …
│ └── qb-adminmenu/
├── [voice]/ (optionnel)
└── [defaultmaps]/ (optionnel)
Deux règles :
- Jamais de fichier de sauvegarde dans un dossier de ressource (
config.lua.bak,server.lua.old). Les manifestesqb-*chargent des motifs commeconfig/*.luaoulocales/*.lua: la copie serait chargée comme un vrai fichier. Range tes sauvegardes dansserver-data/sauvegardes/, horsresources/. - Un seul inventaire, un seul système de cibles, un seul HUD. Deux ressources qui font la même chose = comportements aléatoires.
✅ À retenir : resources/[qb]/qb-core/fxmanifest.lua doit exister. Si tu vois [qb]/qb-core-main/, renomme.
3. Importer la base de données #
Le dépôt qb-core contient un qbcore.sql minimal (players, bans, player_contacts). Il ne suffit pas : garages, appartements, banque, inventaire et téléphone ont besoin de leurs tables. Le qbcore.sql de la recette les regroupe toutes : players, bans, player_vehicles, apartments, bank_accounts, bank_statements, inventories, playerskins, player_outfits, player_houses, phone_*, player_mails, player_warns, crypto, occasion_vehicles…
- Ouvre le tableau de bord teamkit.fr → ton serveur → base de données → interface web.
- Connecte-toi avec l'utilisateur et le mot de passe affichés (mot de passe = ton compte AMP).
- Sélectionne ta base (vide) dans la colonne de gauche.
- Onglet Importer → choisis
qbcore.sqldu dossier txAdminRecipe → lance. - Vérifie que
players,player_vehicles,apartmentsetinventoriesapparaissent.
-- Vérification rapide (onglet SQL)
SHOW TABLES;
DESCRIBE players;
Si tu ajoutes plus tard une ressource qui a son propre fichier SQL (qb-houses/qb-houses.sql, qb-crypto/qb-crypto.sql, qb-phone/qb-phone.sql…), importe-le de la même façon. Ces fichiers utilisent CREATE TABLE IF NOT EXISTS : réimporter sur une table existante ne casse rien.
✅ À retenir : le bon fichier est txAdminRecipe/qbcore.sql, pas qb-core/qbcore.sql.
4. Renseigner la chaîne de connexion #
qb-core déclare oxmysql comme dépendance et lit la ConVar mysql_connection_string. Sur AMP TeamKit, server.cfg est regénéré à chaque démarrage : ne l'édite pas, passe par Configuration → FiveM → Additional Server Settings (une ligne par réglage).
- Ouvre Configuration → FiveM → Additional Server Settings.
- Ajoute, avec les valeurs du tableau de bord (hôte LOCAL, port de l'instance — pas 3306) :
set mysql_connection_string "mysql://UTILISATEUR:MOT_DE_PASSE@HOTE:PORT/BASE?charset=utf8mb4"
- Enregistre.
Les caractères ; , / ? : @ & = + $ # dans le mot de passe sont mal lus dans cette forme (avertissement de la documentation oxmysql : https://overextended.dev/oxmysql). Si le tien en contient, utilise la forme à points-virgules user=…;password=…;host=…;port=…;database=… décrite au chapitre 06.
✅ À retenir : 1045 = identifiants ou hôte faux. ECONNREFUSED = hôte ou port faux.
5. Écrire le bloc Starting Resources #
Configuration → FiveM → Starting Resources accepte n'importe quelle ligne de server.cfg. Piège d'AMP : Additional Server Settings est écrit APRÈS les ressources dans le fichier généré. Une ressource qui lit une ConVar à son démarrage ne la verrait pas. qb_locale (langue de tous les qb-*) et UseTarget (lu par qb-inventory et d'autres) sont dans ce cas. Donc : ConVars en tête, avant le premier ensure.
- Ouvre Configuration → FiveM → Starting Resources.
- Remplace le contenu par le bloc ci-dessous.
- Supprime les lignes des ressources que tu n'as pas déposées (
connectqueue,qb-target,qb-fuel,qb-doorlock…). - Enregistre.
# ===== 1. ConVars : TOUJOURS avant le premier ensure =====
setr qb_locale "fr"
setr UseTarget false
set resources_useSystemChat true
# ===== 2. Base FiveM (cfx-server-data) =====
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
ensure baseevents
# ===== 3. Dépendances =====
ensure oxmysql
ensure PolyZone
ensure progressbar
ensure interact-sound
ensure menuv
ensure connectqueue
# ===== 4. Cœur et interface =====
ensure qb-core
ensure qb-menu
ensure qb-input
ensure qb-target
ensure qb-smallresources
ensure qb-weathersync
# ===== 5. Personnage (dépendances avant dépendants) =====
ensure qb-interior
ensure qb-clothing
ensure qb-spawn
ensure qb-apartments
ensure qb-multicharacter
# ===== 6. Inventaire, HUD, véhicules =====
ensure qb-weapons
ensure qb-inventory
ensure qb-hud
ensure qb-radialmenu
ensure qb-scoreboard
ensure qb-vehiclekeys
ensure qb-fuel
ensure qb-garages
ensure qb-vehicleshop
# ===== 7. Économie et métiers =====
ensure qb-banking
ensure qb-management
ensure qb-shops
ensure qb-phone
ensure qb-cityhall
ensure qb-doorlock
ensure qb-policejob
ensure qb-ambulancejob
ensure qb-mechanicjob
# ===== 8. Administration =====
ensure qb-adminmenu
Pourquoi cet ordre (dépendances lues dans les fxmanifest.lua) :
oxmysqlavantqb-core:qb-corecharge@oxmysql/lib/MySQL.luaet déclaredependency 'oxmysql'.PolyZoneavantqb-targetetqb-garages: ils chargent@PolyZone/client.lua.menuvavantqb-adminmenu: dépendance déclarée.qb-core,qb-interior,qb-clothing,qb-weathersyncavantqb-apartments;qb-coreetqb-spawnavantqb-multicharacter: dépendances déclarées.qb-weaponsavantqb-inventory: dépendance déclarée.
La recette officielle fait plus court : ensure qb-core puis ensure [qb], ensure [standalone], ensure [voice], ensure [defaultmaps]. Ça marche aussi. La liste explicite te montre ce qui tourne et te laisse retirer une ressource en supprimant une ligne.
UseTarget : false = interaction par touche et menus qb-menu ; true = interaction par visée avec qb-target (déposé et démarré). Choisis maintenant et n'en change plus.
Trois réglages voisins dans la même page Configuration :
- Enforce Game Build : la recette QBCore utilise
3095. Le défaut AMP1604est trop ancien. Choisis3095ou plus, puis n'en change plus. - OneSync Mode :
On. - Player Limit : 32 pour commencer.
✅ À retenir : ConVars en haut, oxmysql avant qb-core, qb-core avant tous les qb-*. Redémarre l'instance après chaque changement de Configuration.
6. Créer le premier admin #
QBCore utilise trois niveaux : god, admin, mod (QBCore.Config.Server.Permissions dans qb-core/config.lua). Ils sont des principals ACE nommés qbcore.god, qbcore.admin, qbcore.mod, et QBCore vérifie les droits avec IsPlayerAceAllowed. Guide officiel : https://qbcore.org/docs/guides/setting-permissions. Sur AMP, ces lignes vont dans Configuration → FiveM → Access Control Commands.
- Démarre le serveur et connecte-toi une première fois (F8 →
connect ip:30120). - Dans la Console AMP, repère la ligne de connexion de ton joueur et copie la valeur
license:(40 caractères hexadécimaux). - Ouvre Configuration → FiveM → Access Control Commands et colle ce bloc, en remplaçant
XXXX:
add_ace group.admin command allow
add_ace resource.qb-core command allow
add_ace qbcore.god command allow
add_principal qbcore.god group.admin
add_principal qbcore.god qbcore.admin
add_principal qbcore.admin qbcore.mod
add_principal identifier.license:XXXX qbcore.god
Ligne par ligne : resource.qb-core command allow autorise qb-core à exécuter des commandes ; qbcore.god hérite de group.admin et de qbcore.admin ; qbcore.admin hérite de qbcore.mod ; ta licence devient god.
- Enregistre, puis Restart sur Status. La Configuration n'est relue qu'au démarrage.
- Reconnecte-toi. Tape
/admin: le menu deqb-adminmenus'ouvre. Il est ouvert aux niveauxadminetgod.
Pour promouvoir quelqu'un d'autre : /addpermission <id> admin (réservé à god), ou l'onglet Permissions de /admin. Pour un admin permanent, ajoute sa licence dans Access Control Commands avec qbcore.admin ou qbcore.mod.
✅ À retenir : licence lue dans la Console AMP, une ligne add_principal identifier.license:XXXX qbcore.god, Restart.
7. Redémarrer et vérifier #
- Restart sur Status, attends « Running ».
- Console :
oxmysqlannonce sa connexion,qb-coredémarre sans ligne rouge, puis chaqueqb-*. - Tape
status: liste vide, pas d'erreur. - Connecte-toi. Tu dois voir l'écran de
qb-multicharacter(5 emplacements par défaut), puis la création du personnage, puis le choix d'un appartement (qb-apartments) et le spawn. - En jeu, teste les commandes de
qb-core:/car adder,/dv(supprime le véhicule),/setjob <id> police 0,/setmoney <id> cash 500,/tpm,/admin. Liste complète : https://qbcore.org/docs/qb-core/commands. - F8 côté client : aucune erreur rouge.
Lignes rouges fréquentes à ce stade :
Couldn't find resource qb-core→ dossierqb-core-mainpas renommé, ou déposé un niveau trop bas.1045/ECONNREFUSED→ chaîne de connexion.Table 'xxx.player_vehicles' doesn't exist→ mauvaisqbcore.sqlimporté (voir étape 3)./adminmuet →menuvabsent ou démarré aprèsqb-adminmenu, ou licence fausse.
✅ À retenir : console propre + écran multi-personnage = QBCore est installé.
8. Ajouter les premiers scripts essentiels #
Inventaire #
Sur QBCore, garde qb-inventory (déjà dans ton bloc) : l'inventaire officiel, à jour (v2), qui lit UseTarget et se règle dans config/config.lua. Il dépend de qb-weapons. Sa table inventories vient du qbcore.sql de la recette.
ox_inventory n'annonce pas QBCore parmi ses frameworks supportés (sa liste : ox_core, esx, qbox, nd_core — https://github.com/overextended/ox_inventory). Si tu veux l'écosystème ox, le bon chemin est Qbox, chapitre 05, pas un QBCore bricolé.
Garage #
qb-garages (déjà dans ton bloc) : garages publics, de métier, de gang et fourrière. Il charge @PolyZone/client.lua (donc PolyZone avant lui) et écrit dans player_vehicles. Emplacements dans son config.lua (takeVehicle, spawnPoint, putVehicle). Il travaille avec qb-vehicleshop (achat) et qb-vehiclekeys (clés).
Métiers #
| Métier | Ressource | S'appuie sur (lu dans son code) |
|---|---|---|
| Police | qb-policejob |
qb-core, qb-menu, qb-target (si UseTarget true), qb-inventory |
| Ambulance | qb-ambulancejob |
qb-core, qb-menu, qb-target, qb-inventory |
| Mécano | qb-mechanicjob |
qb-core, qb-menu, qb-target, qb-inventory |
Les métiers, grades et salaires sont définis dans qb-core/shared/jobs.lua, les objets dans shared/items.lua, les véhicules dans shared/vehicles.lua. Après une modification : refresh puis restart qb-core en console.
Pour continuer, dans la recette : qb-taxijob, qb-busjob, qb-garbagejob, qb-truckerjob, qb-towjob (jobs sans whitelist), qb-houses (import qb-houses.sql), qb-prison (avec prison_map). La recette ajoute aussi pma-voice et qb-radio dans [voice] : pma-voice est un projet tiers, lis sa page GitHub et mets ses setr voice_* en tête de Starting Resources.
✅ À retenir : un script à la fois, dépendances d'abord, Restart entre chaque.
✅ Checklist du chapitre #
❓ Si ça ne marche pas #
*Couldn't find resource qb-core (ou un autre `qb-).** Le dossier s'appelle encoreqb-core-main, ou il est dans[qb]/qb-core-main/qb-core/. Renomme et remonte par SFTP, puisrefreshetensure qb-core` en console.
oxmysql : ER_ACCESS_DENIED_ERROR (1045) ou ECONNREFUSED.
1045 : utilisateur, mot de passe ou hôte. ECONNREFUSED : hôte ou port (celui du tableau de bord, pas 3306). Recopie la chaîne du tableau de bord. Si la ligne est bonne mais qu'oxmysql dit ne pas avoir de chaîne au démarrage, déplace-la en tête de Starting Resources.
Le jeu est en anglais alors que j'ai mis qb_locale "fr".
La ligne est dans Additional Server Settings (écrit trop tard) au lieu de Starting Resources, ou tu n'as pas redémarré l'instance. Il faut setr, pas set : la ConVar est lue côté client.
/admin ne fait rien, ou « pas la permission ».
Licence fausse (recopie-la depuis la console à ta connexion), instance pas redémarrée après l'ajout, ou menuv absent. Vérifie les trois.
Erreur SQL doesn't exist sur player_vehicles, apartments ou inventories.
Tu as importé le qbcore.sql de qb-core (3 tables) au lieu de celui de txAdminRecipe. Importe le bon par-dessus : ses CREATE TABLE IF NOT EXISTS ne touchent pas aux tables existantes.
*Une ressource `qb-plante côté client (F8 rouge) après une modification.** Cherche une chaîne Lua'...'coupée par un retour à la ligne dans le fichier modifié, ou un.bakoublié dansconfig/oulocales/que le manifeste charge en*.lua`.
Pour le reste (No such export, streaming, MLO, serveur invisible dans la liste), va au chapitre 08 « Dépannage ».