Qbox (qbx_core) est un fork moderne de QBCore, bâti sur l'écosystème ox : ox_lib, oxmysql, ox_inventory, ox_target. Sans txAdmin, il n'y a pas de « recette » qui installe tout à ta place. Ce chapitre refait la recette officielle à la main, avec les outils que tu as sur TeamKit : le panel AMP, le SFTP et l'interface web de ta base.
Avant de commencer, tu dois avoir fini le chapitre 01 : ton serveur démarre avec les ressources de base, ta clé Cfx.re est renseignée, tu sais te connecter en SFTP. Garde aussi le chapitre 06 sous la main pour tout ce qui touche à la base de données.
Ce que tu vas installer #
La recette officielle (qbox.yaml dans https://github.com/Qbox-project/txAdminRecipe) télécharge une soixantaine de ressources. Tu n'as pas besoin de tout. Voici le socle minimal pour une ville jouable, rangé par dossier :
| Dossier | Ressources | Rôle |
|---|---|---|
[ox] |
oxmysql, ox_lib, ox_inventory, ox_target |
Base de données, bibliothèque, inventaire, interaction |
[qbx] |
qbx_core, qbx_vehicles, qbx_spawn, qbx_smallresources, qbx_hud, qbx_radialmenu, qbx_adminmenu, qbx_scoreboard, qbx_vehiclekeys, qbx_management, qbx_idcard |
Le cœur et le confort de base |
[qbx] (métiers) |
qbx_police, qbx_ambulancejob, qbx_medical, qbx_garages, qbx_vehicleshop, qbx_customs |
Police, hôpital, garages, concession, customisation |
[voice] |
pma-voice |
Voix de proximité |
[standalone] |
illenium-appearance |
Création et habillage du personnage |
Deux fichiers viennent en plus du dépôt txAdminRecipe : items.lua (la liste des objets pour ox_inventory) et qbox.sql (les tables partagées par plusieurs ressources). Les images d'objets viennent du dépôt qbx_invimages.
Les autres qbx_* (braquages, drogues, courses…) s'ajoutent plus tard, un par un, quand le socle tourne.
✅ À retenir : Qbox = qbx_core + les quatre ressources ox. Sans
ox_inventory,qbx_corene démarre pas : c'est une dépendance déclarée, pas une option.
Vérifier trois réglages avant tout #
- Ouvre
Configuration → FiveM → OneSync Modeet mets On. Le manifeste deqbx_coredéclare/onesyncen dépendance : sans OneSync, la ressource refuse de démarrer. - Ouvre
Configuration → FiveM → Enforce Game Buildet choisis 3258 (le build utilisé par la recette officielle). Ne répète passv_enforceGameBuilddans Starting Resources : ce réglage AMP s'en charge. - Ouvre ton tableau de bord teamkit.fr et regarde le moteur de ta base. Qbox exige MariaDB (minimum 10.9, source : https://docs.qbox.re/installation). Si ton tableau de bord indique MySQL 8.4, demande au staff une base MariaDB avant d'importer quoi que ce soit. Le chapitre 06 explique pourquoi.
Télécharger les ressources #
Tout vient de GitHub, avec deux cas. Les ressources ox ont une page « Releases » avec une archive prête à l'emploi : prends celle nommée comme la ressource (ox_lib.zip, oxmysql.zip…), jamais « Source code », qui n'a pas l'interface compilée. **Les ressources qbx_*** se prennent par Code → Download ZIP ; le dossier extrait s'appelle qbx_core-main et devra être renommé.
- Télécharge, depuis https://github.com/overextended :
ox_lib.zip,oxmysql.zip,ox_inventory.zip,ox_target.zip(onglet Releases de chaque dépôt). - Télécharge, depuis https://github.com/Qbox-project : le ZIP de chaque
qbx_*du tableau ci-dessus, plusqbx_invimages. - Télécharge le ZIP de https://github.com/Qbox-project/txAdminRecipe : tu y prendras
items.luaetqbox.sql;server.cfg,ox.cfgetpermissions.cfgte serviront de modèles. - Télécharge
pma-voice(https://github.com/AvarianKnight/pma-voice, ZIP du dépôt) etillenium-appearance(page Releases du projet, à vérifier sur sa page). - Extrais tout dans un dossier de travail sur ton PC, et retire le suffixe
-mainou-masterde chaque dossier.
Vérifie que chaque dossier contient un fxmanifest.lua à sa racine. Si tu vois qbx_core/qbx_core-main/fxmanifest.lua, tu as un niveau de trop : remonte le contenu.
✅ À retenir : archive « Releases » pour ox, « Download ZIP » pour qbx. Un dossier = un
fxmanifest.luaà la racine, et un nom sans-main.
Déposer les fichiers par SFTP #
Le SFTP est décrit au chapitre 01 : hôte, port de ton instance, identifiants = ton compte AMP.
- Ouvre
server-data/resources/dans FileZilla ou WinSCP. Tu y vois déjà[system],[managers],[gameplay],[gamemodes],[local],[test]: n'y touche pas. - Crée les dossiers
[ox],[qbx],[voice],[standalone]. Les crochets font partie du nom : FXServer traite un dossier entre crochets comme une catégorie et regarde dedans. - Dépose
oxmysql,ox_lib,ox_inventory,ox_targetdans[ox]. - Dépose tous les
qbx_*dans[qbx]. - Dépose
pma-voicedans[voice]etillenium-appearancedans[standalone]. - Remplace
[ox]/ox_inventory/data/items.luapar leitems.luadu dépôttxAdminRecipe. - Copie le contenu du dossier
imagesdeqbx_invimagesdans[ox]/ox_inventory/web/images/.
Ton arborescence doit ressembler à ceci :
server-data/resources/
├── [system]/ [managers]/ [gameplay]/ … (déjà là, ne pas toucher)
├── [ox]/
│ ├── oxmysql/
│ ├── ox_lib/
│ ├── ox_inventory/
│ └── ox_target/
├── [qbx]/
│ ├── qbx_core/
│ ├── qbx_vehicles/
│ ├── qbx_spawn/
│ └── … (les autres qbx_*)
├── [voice]/pma-voice/
└── [standalone]/illenium-appearance/
Règle absolue : aucun fichier .bak ou .old dans un dossier de ressource. Beaucoup de manifestes chargent server/** et client/** : la copie serait exécutée comme un script. Tes sauvegardes vont ailleurs (chapitre 09).
✅ À retenir : un dossier par famille, les crochets dans le nom, et rien d'autre que la ressource dans son dossier.
Importer les tables SQL #
Plusieurs ressources livrent un fichier .sql que tu importes par l'interface web de ta base (lien sur le tableau de bord). Le chapitre 06 détaille l'import ; ici, l'ordre.
- Importe
[qbx]/qbx_core/qbx_core.sql(tablesplayers,bans,player_groups). - Importe
[qbx]/qbx_vehicles/vehicles.sql(tableplayer_vehicles, liée àplayers). - Importe
qbox.sqldu dépôttxAdminRecipe(tables deillenium-appearance, courrier, comptes bancaires…). - Importe
[qbx]/qbx_vehicleshop/vehshop.sqlsi tu installes la concession. - Note les autres
qbx_*qui contiennent un.sql(par exempleqbx_vehiclesales,qbx_weed,qbx_lapraces,qbx_drugs) : importe-les le jour où tu ajoutes la ressource.
L'ordre compte : player_vehicles pointe vers players par une clé étrangère. Si tu importes vehicles.sql avant qbx_core.sql, l'import échoue.
✅ À retenir :
qbx_core.sqld'abord, puisvehicles.sql, puisqbox.sql. Un.sqlpar ressource, importé quand tu installes la ressource.
Renseigner la chaîne oxmysql #
- Ouvre ton tableau de bord teamkit.fr, bloc base de données : hôte local, port, utilisateur, nom de base. Le mot de passe est celui de ton compte AMP.
- Ouvre
Configuration → FiveM → Additional Server Settingsdans AMP. - Ajoute cette ligne, avec tes valeurs :
set mysql_connection_string "mysql://UTILISATEUR:MOT_DE_PASSE@HOTE:PORT/BASE?charset=utf8mb4"
Le port n'est pas 3306 : c'est celui affiché par le tableau de bord. Si ton mot de passe contient un des caractères ; , / ? : @ & = + $ #, oxmysql ne saura pas le lire dans cette forme (source : https://overextended.dev/oxmysql). Utilise alors la forme à points-virgules, décrite au chapitre 06.
Écrire le bloc Starting Resources #
C'est l'étape qui fait tout marcher ou tout casser. Ouvre Configuration → FiveM → Starting Resources. Trois règles :
- Les ConVars (
set,setr) en tête, avant le premierensure. AMP écrit « Additional Server Settings » après les ressources, trop tard pourox_inventory,ox_libetillenium-appearance, qui lisent leur convar au démarrage. - L'ordre des
ensurecompte :oxmysql,ox_lib,qbx_core,ox_target,ox_inventory, puis le reste. C'est l'ordre imposé par la doc d'ox_inventory. - Retire
ensure basic-gamemodesi la liste actuelle le contient : c'est le spawn de démonstration de FiveM, en conflit avecqbx_spawn. La recette officielle l'arrête.
Remplace le contenu de Starting Resources par ce bloc, puis adapte les valeurs :
# ---------- ConVars : TOUJOURS en tête ----------
# qbx_core (liste complète : https://docs.qbox.re/resources/qbx_core/convars)
set qbx:acknowledge true
setr qbx:enableBridge "true"
set qbx:enableQueue "true"
set qbx:discordLink "discord.gg/TON-INVITATION"
set qbx:max_jobs_per_player 1
set qbx:max_gangs_per_player 1
setr qbx:enableVehiclePersistence "false"
set resources_useSystemChat true
# ox_lib (https://overextended.dev/ox_lib)
setr ox:locale fr
setr ox:primaryColor blue
setr ox:primaryShade 8
setr ox:userLocales 0
# ox_inventory (https://overextended.dev/ox_inventory)
setr inventory:framework "qbx"
setr inventory:slots 50
setr inventory:weight 30000
setr inventory:target true
setr inventory:police ["police"]
setr inventory:keys ["TAB", "K", "F1"]
set inventory:versioncheck true
set inventory:clearstashes "6 MONTH"
# ox_target (https://overextended.dev/ox_target)
setr ox_target:defaultHotkey LMENU
setr ox_target:drawSprite 1
setr ox_target:defaults 1
# Traductions des ressources qui lisent une convar de langue
setr qb_locale "fr"
setr illenium-appearance:locale "fr"
# pma-voice : reprendre les lignes de voice.cfg du dépôt txAdminRecipe
# ---------- Ressources de base FiveM (déjà présentes) ----------
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure hardcap
ensure baseevents
# ---------- Écosystème ox et cœur (ordre imposé) ----------
ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure ox_inventory
# ---------- Voix ----------
ensure pma-voice
# ---------- Socle qbx ----------
ensure qbx_vehicles
ensure qbx_spawn
ensure qbx_smallresources
ensure qbx_hud
ensure qbx_radialmenu
ensure qbx_adminmenu
ensure qbx_scoreboard
ensure qbx_vehiclekeys
ensure qbx_management
ensure qbx_idcard
# ---------- Personnage ----------
ensure illenium-appearance
# ---------- Métiers et véhicules ----------
ensure qbx_police
ensure qbx_ambulancejob
ensure qbx_medical
ensure qbx_garages
ensure qbx_vehicleshop
ensure qbx_customs
Les valeurs qui comptent :
set qbx:acknowledge true: coupe le message « Welcome to Qbox! » affiché à chaque démarrage. Rien de plus.setr qbx:enableBridge "true": active le pont de compatibilité avec les scriptsqb-*(voir plus bas).setr ox:locale fr: langue des ressources qui utilisent le module locale d'ox_lib, si elles livrent unlocales/fr.json. Sinon, anglais.setr inventory:framework "qbx": sans cette ligne,ox_inventoryne sait pas à quel framework parler.setr inventory:weight 30000: capacité en grammes. La recette officielle met 85000 ; à toi de choisir.setr inventory:police ["police"]: les métiers qui voient l'équipement de police. Garde ceux qui existent dansqbx_core/shared/jobs.lua.
✅ À retenir : convars en tête,
oxmysql → ox_lib → qbx_core → ox_target → ox_inventory, et jamaisbasic-gamemodeavec Qbox.
Créer le premier admin #
Les permissions Qbox reposent sur les ACE de FiveM. Tu les écris dans Configuration → FiveM → Access Control Commands.
- Reprends les lignes de
permissions.cfgdu dépôttxAdminRecipe:
add_ace group.admin command allow
add_ace resource.qbx_core command allow
add_ace resource.ox_lib command.add_ace allow
add_ace resource.ox_lib command.remove_ace allow
add_ace resource.ox_lib command.add_principal allow
add_ace resource.ox_lib command.remove_principal allow
add_ace group.admin admin allow
add_ace group.mod mod allow
add_ace group.support support allow
add_principal group.admin group.mod
add_principal group.mod group.support
- Récupère ta licence Cfx.re : connecte-toi une première fois au serveur et lis la console AMP, la ligne de connexion affiche
license:suivi d'une longue chaîne hexadécimale. - Ajoute une ligne avec ta licence :
add_principal identifier.license:REMPLACE_PAR_TA_LICENCE group.admin
- Redémarre l'instance (bouton Restart sur Status) : Access Control Commands est écrit dans
server.cfgau démarrage, unrefreshne suffit pas.
Les commandes d'administration de qbx_core (/tp, /car, /setjob, /givemoney…) demandent group.admin (source : https://docs.qbox.re/resources/qbx_core/commands).
✅ À retenir : un admin = une ligne
add_principal identifier.license:… group.admin, puis redémarrage.
Redémarrer et lire la console #
- Clique sur Restart dans
Status. - Ouvre
Consoleet attends la fin du chargement (une à deux minutes la première fois). - Cherche ces lignes, dans cet ordre :
[oxmysql] Database server connection established!
[ox_inventory] Inventory has loaded 500 items
Le nombre d'objets dépend de ton items.lua. Ces deux lignes signifient que la base répond et que l'inventaire a lu ses données.
- Cherche ensuite les lignes en rouge. Les plus fréquentes :
| Ligne | Cause |
|---|---|
Couldn't find resource ox_lib. |
Dossier absent, mal nommé, ou fxmanifest.lua pas à la racine |
Unable to establish a connection to the database (ER_ACCESS_DENIED_ERROR)! |
Utilisateur, mot de passe ou hôte faux dans la chaîne (chapitre 06) |
Unable to establish a connection to the database (ECONNREFUSED)! |
Hôte ou port faux ; si la ligne cite localhost:3306, ta chaîne n'a pas été lue du tout |
Could not find gameName value in vehicles.meta for vehicle model X |
Un modèle de qbx_core/shared/vehicles.lua n'existe pas dans le build : avertissement sans gravité |
Startup errors detected, shutting down server... |
qbx_core a trouvé une erreur bloquante juste au-dessus : lis les lignes précédentes |
- Lance ton jeu, F8, puis
connect IP:30120. Tu dois arriver sur l'écran de création de personnage deqbx_core, puis dansillenium-appearance. - Teste
/car adderen jeu : si la voiture apparaît, ton compte admin fonctionne.
✅ À retenir : deux lignes vertes à trouver (connexion base, inventaire chargé), puis les rouges à lire une par une, de haut en bas.
Les qbx_* essentiels, et ce qu'ils demandent #
| Ressource | Ce qu'elle apporte | À ne pas oublier |
|---|---|---|
qbx_police |
Métier police, menottes, fouilles, garage de service | Métier police dans qbx_core/shared/jobs.lua |
qbx_ambulancejob + qbx_medical |
Hôpital, réanimation, état de santé | Les deux vont ensemble |
qbx_garages |
Garages publics et de métier | qbx_vehicles installé et vehicles.sql importé |
qbx_vehicleshop |
Concession, achat de véhicules | vehshop.sql importé |
qbx_customs |
Customisation de véhicules (ox_lib) | Remplace un LS Customs, pas les deux |
qbx_management |
Gestion patron (embauche, grades) | qbox.sql importé |
Les véhicules sont listés dans qbx_core/shared/vehicles.lua. Un modèle listé mais absent du jeu déclenche l'avertissement Could not find gameName value : retire la ligne ou ajoute le véhicule en addon.
Compatibilité avec les scripts qb-* #
Qbox garde une compatibilité large avec les scripts écrits pour QBCore, grâce à un pont (bridge/qb dans qbx_core). Concrètement :
- Le manifeste de
qbx_coredéclareprovide 'qb-core'. Un script qui demandeqb-coreen dépendance est satisfait parqbx_core. exports['qb-core']:GetCoreObject()fonctionne à travers le pont (source : https://docs.qbox.re/faq).- Le pont s'active avec
setr qbx:enableBridge "true"(valeur par défaut). set qbx:acknowledge truene touche pas au pont : il coupe seulement le message de bienvenue en console. Ne compte pas dessus pour « activer » quoi que ce soit.
Ce qui ne passe pas le pont : les scripts qui lisent directement la base en SQL brut, ou qui utilisent des fonctions non documentées de QBCore. Autre différence : les grades de métier sont des nombres (2), plus des chaînes ('2') ; un script qui compare des chaînes peut produire « attempt to compare string with number ».
Piège classique : un script qb-* qui appelle exports['qb-inventory'] ne trouvera rien, car ton inventaire s'appelle ox_inventory. L'erreur « No such export X in resource Y » vient de là : l'export est appelé par le vrai nom de la ressource, pas par son provide. Cherche une version compatible ox_inventory.
✅ À retenir : le pont couvre la majorité des scripts
qb-*. Ce qui casse, c'est l'accès SQL direct, les exports d'inventaire, et les grades en chaîne.
✅ Checklist du chapitre #
❓ Si ça ne marche pas #
« Couldn't find resource qbx_core » : le dossier s'appelle encore qbx_core-main, ou il est hors de server-data/resources/. Renomme, puis tape refresh et ensure qbx_core dans la console.
qbx_core démarre puis s'arrête avec « Startup errors detected » : lis les lignes juste au-dessus. Le plus souvent : OneSync à Off, ou une table manquante parce qu'un .sql n'a pas été importé.
L'inventaire s'ouvre vide, ou pas du tout : setr inventory:framework "qbx" est absent ou placé après les ensure. Remonte les convars en tête de Starting Resources et redémarre l'instance.
Tout est en anglais : setr ox:locale fr est placé trop bas, ou la ressource n'a pas de locales/fr.json.
« Unable to establish a connection to the database » : chapitre 06, section « Les erreurs et leur cause exacte ».
Tu spawnes dans le mode de démonstration FiveM : basic-gamemode est encore dans Starting Resources. Retire-le et redémarre.
Pour tout le reste, chapitre 08 : Dépannage.