Qbox et ESX sont détectés automatiquement. Pour l'installation ESX et les limites des intégrations, consulter FRAMEWORK_BRIDGE.md. Les sections QBX ci-dessous décrivent le backend Qbox ; sous ESX, les mêmes grades CDT sont conservés dans users.metadata.cdt_admin.
Les droits sont lus uniquement dans PlayerData.metadata.cdt_admin :
{ grade = 'admin', level = 70 }
Grades : owner (100), superadmin (90), admin (70), moderator (50), support (30), trial (10), none (0).
Le nom du grade détermine le niveau selon config/server.lua. Un grade absent ou invalide ne donne aucun droit. Les permissions QBX et les groupes ACE habituels ne donnent pas accès à ce script. Exception : le droit cdt_admin.owner attribue automatiquement le grade owner.
Owner automatique depuis server.cfg
add_principal group.owner group.admin
add_principal identifier.fivem:VOTRE_IDENTIFIANT_FIVEM group.owner
add_ace group.cdt_owner cdt_admin.owner allow
add_principal identifier.fivem:VOTRE_IDENTIFIANT_FIVEM group.cdt_owner
Remplacer VOTRE_IDENTIFIANT_FIVEM par la partie numérique de votre identifiant fivem:. group.owner hérite des droits de group.admin ; group.cdt_owner fournit le droit spécial CDT. Voir INSTALLATION.md pour la variante Rockstar license: et l’ordre de démarrage. add_principal définit un héritage ; add_ace rend ce principal détectable par le script. Placer ces lignes avant ensure cdt_admin.
Lors du chargement du personnage et à chaque vérification des droits, un joueur connecté possédant cdt_admin.owner reçoit { grade = 'owner', level = 100 } dans metadata.cdt_admin, sauvegardé par le bridge du framework détecté. Le contrôle fonctionne aussi pour les joueurs déjà connectés après un redémarrage de la ressource. Une métadonnée déjà correcte ne déclenche pas de nouvelle sauvegarde.
Ce droit reste prioritaire : un grade inférieur sera remplacé par owner lors de la vérification suivante. Retirer le principal ne supprime pas le grade déjà sauvegardé ; pour révoquer les droits, retirer le principal puis attribuer none avec la console.
Attribution manuelle du premier owner
Dans la console serveur :
cdt_admin_setgrade 12 owner
cdt_admin_setgrade ABC12345 owner
Un nombre représente un server ID connecté ; une chaîne représente un citizenid (en ligne ou hors ligne). Cette commande est réservée à la console, sans permission ACE.
Ensuite, un owner peut gérer les grades depuis les actions du panneau (admin_add, admin_remove, admin_setlevel, setgrade). La cible de ces actions est son citizenid. Hors mode debug, il ne peut pas modifier son propre grade ni celui d’un autre owner depuis le panneau. Le mode debug lève ces protections de cible. Seuls les niveaux configurés dans config/server.lua sont acceptés ; none ou 0 retire les droits.
Persistance et récupération
Le framework conserve les données du personnage, mais cdt_admin décide lui-même de ses permissions. Sous Qbox, l'attribution utilise SetMetaData et demande immédiatement une sauvegarde QBX. Hors ligne, elle utilise SaveOffline. Les métadonnées sont restaurées avec le personnage à sa connexion ; aucune State Bag n'est utilisée comme stockage persistant.
-- Serveur
local player = exports.qbx_core:GetPlayer(source)
local permissions = player.PlayerData.metadata.cdt_admin
-- Client, après chargement des données QBX
local permissions = QBX.PlayerData.metadata.cdt_admin
Sous ESX, le bridge persiste uniquement metadata.cdt_admin dans la table users, en préservant les autres métadonnées. Une baisse du grade d’un personnage connecté termine sa session de service.
Les anciennes permissions ACE et les anciennes tables de grades ne sont pas importées automatiquement. Réattribuer les grades avec la commande console. Les droits restent attachés au personnage (citizenid).
Détails de la sauvegarde QBX
QBX enregistre toutes les métadonnées du personnage, y compris cdt_admin, en JSON dans la colonne metadata de la table players. À la connexion, ce JSON est décodé et restauré dans PlayerData.metadata. Aucune modification de qbx_core ni colonne SQL supplémentaire n'est nécessaire.
Selon la version Qbox installée, SetMetaData peut déjà déclencher une sauvegarde. L'appel explicite à Save actuellement présent dans cdt_admin peut alors être redondant pour un joueur connecté. Une modification directe de la table des métadonnées ne déclenche pas à elle seule une écriture immédiate ; pour un personnage hors ligne, cdt_admin modifie les données puis appelle SaveOffline.
L'écriture QBX est asynchrone : un arrêt brutal juste après une attribution peut survenir avant son enregistrement effectif en base.
