Après installation, redémarrer une fois la ressource cdt_admin. La commande en jeu /admincdt_config ouvre une interface distincte, réservée au grade owner. Le service staff n’est pas nécessaire pour la configuration ; chaque lecture et écriture est contrôlée côté serveur.
Le mode debug (server.debug = true) autorise les actions sur soi-même et sur les autres staffs, y compris les grades égaux, supérieurs et les owners. L’interface Staff permet aussi de modifier ces grades pendant les tests. Les permissions de chaque action et le service staff restent requis. Désactiver le debug rétablit les protections. Un droit ACE cdt_admin.owner réattribue toujours le grade owner lors de la vérification suivante.
L’interface reprend les styles existants du panneau admin. Elle propose une recherche, des catégories, un compteur de modifications, l’enregistrement groupé, l’actualisation et la restauration des valeurs par défaut d’une catégorie. Les modifications ne deviennent actives qu’après une sauvegarde SQL réussie.
| Catégorie | Réglages |
|---|---|
| Jail administratif | Positions, rayon, instance, retour, durée maximale, sauvegarde, travail et tenues |
| Délais et limites | Délais des commandes, durées des sanctions, pagination, logs et protection des requêtes |
| Options générales | Mode de test, annonces, rétention des logs, langue |
| Notifications et interface | Fournisseur, son, durée, titre et couleurs |
| Raccourcis et noclip | Touches, libellés, vitesses et accélération |
| Permissions | Grade minimum des actions et visibilité des catégories |
| Webhooks et données | Webhooks privés, ressources d’audit et champs sensibles |
Les paramètres structurels, les droits d’attribution des grades, l’accès owner à la configuration, les fonctions hors périmètre et les commandes permettant de sortir du spectate restent protégés. Les fonctions hors périmètre sont indiquées en lecture seule. Les actions sans permission sont masquées, y compris dans les menus déroulants ; le serveur vérifie également les droits. Une modification des seuils de permission arrête immédiatement les modes devenus interdits et ferme les inspections devenues interdites, sans retirer le staff du service. Une baisse du grade d’un personnage connecté termine en revanche sa session de service.
Les positions sont en coordonnées GTA. Les délais, vitesses et durées indiquent leur unité dans les champs. Les tenues sont des listes JSON de composants { "component": 11, "drawable": 5, "texture": 0 }. Les webhooks personnalisés sont un objet JSON associant un nom à une URL HTTPS. Les vitesses du noclip forment une liste croissante de nombres positifs.
Persistance et cache
La table cdt_admin_settings est créée automatiquement avec une ligne de configuration et une révision. Les fichiers config/server.lua, config/client.lua et config/shared.lua fournissent les valeurs initiales. Ensuite, la configuration SQL est prioritaire : modifier un fichier ne remplace pas les valeurs déjà sauvegardées. Les nouveaux paramètres absents de la configuration persistante sont injectés au démarrage sans écraser les réglages existants.
Le serveur lit la configuration une fois au démarrage, puis sert les lectures depuis son cache mémoire. Une sauvegarde effectue une écriture conditionnelle selon la révision, met à jour le cache et diffuse les réglages clients à tous les joueurs. Les nouveaux clients récupèrent la même version depuis le cache. Une modification concurrente est refusée et invite à actualiser ; un échec SQL conserve la configuration active.
Les webhooks et réglages serveur ne sont jamais inclus dans la configuration publique envoyée aux joueurs. Le journal des modifications contient les chemins modifiés et la révision, sans les valeurs des secrets.
Les changements ordinaires s’appliquent sans redémarrage. Les délais déjà commencés et les échéances de sanctions existantes conservent leur durée ; les nouveaux réglages s’appliquent aux prochaines actions. La rétention est exécutée au prochain passage du nettoyage automatique.
Vérification
L’accueil de /admincdt_config affiche uniquement Config et Staff. Config ouvre les réglages existants ; Staff permet de rechercher, ajouter, retirer ou changer le grade des personnages connectés et hors ligne. Hors mode debug, les owners restent protégés, y compris le personnage qui effectue la modification. En mode debug, ces protections de cible sont levées ; l’accès owner reste requis.
Le bilan Staff propose aujourd’hui, semaine, mois, 7/30/90 derniers jours, année et une période personnalisée de 366 jours maximum. Il présente les actions enregistrées, les refus, le temps en service (sessions terminées et en cours), les signalements résolus/rejetés, une évolution quotidienne et une répartition par action. La sélection d’un membre filtre les résultats déjà chargés sans nouvelle requête SQL. Un rapport texte est disponible à copier. Les anciens membres ayant un historique restent visibles. Les données dépendent de la rétention des journaux ; les dates suivent le fuseau de la base SQL. Les dernières actions affichent les 100 dernières entrées de la période, puis le filtre du membre est appliqué.
Les statistiques sont chargées à l’ouverture du bilan ou à son actualisation, sans interrogation périodique de la base. Toutes les opérations Staff vérifient le grade owner côté serveur.
Dans le dépôt de développement, node tests/run-lua.cjs exécute la suite Lua ; node tests/script-configuration-ui.cjs et node tests/access-policy-ui.cjs vérifient les formulaires et les droits de l’interface. Les tests et outils ne sont pas inclus dans le ZIP. Le lanceur historique tests/permission-checks.cjs référence encore un ancien test météo supprimé et ne doit pas servir de validation globale de cette version. Une vérification en jeu reste nécessaire pour les touches FiveM, le rendu NUI et les intégrations du serveur réel.
Langues
Les interfaces et notifications sont fournies en français et en anglais via les catalogues de traduction. Choisissez la langue dans les paramètres généraux de l’interface de configuration. Voir TRANSLATIONS.md pour modifier les textes et ajouter une langue.
Script ambulance
Le choix du fournisseur EMS, le nom de ressource et les appels personnalisés Heal/Revive sont centralisés dans config/medical.lua. Pour les scripts connus, choisissez le fournisseur ; pour un script personnalisé, renseignez le côté serveur/client, l'export ou l'événement et ses paramètres. Consultez MEDICAL_CONFIGURATION.md pour les exemples et la lecture de l'état médical. Ces réglages nécessitent un redémarrage de cdt_admin et ne sont pas enregistrés dans la configuration SQL. Les anciens fichiers d'adaptation restent disponibles pour les intégrations avancées.
Inventaire
Le fournisseur, la ressource, les images, les capacités de secours et les opérations personnalisées sont regroupés dans config/inventory.lua. Les lectures et dons/retraits utilisent des exports serveur ; l'ouverture personnelle peut utiliser un export ou un événement client avec confirmation de l'état réel de l'interface. Consultez INVENTORY_CONFIGURATION.md pour les exemples. Ces réglages nécessitent un redémarrage de cdt_admin et ne sont pas enregistrés dans la configuration SQL. Les adaptateurs avancés et le contrôle serveur des transferts restent en place.
Garages et véhicules
config/garages.lua regroupe les deux fournisseurs, les exports serveur personnalisés, les correspondances de champs et d'états et les adaptateurs avancés. Les mutations exigent une confirmation explicite, avec les contrôles de propriétaire et d'occupants conservés. Consultez GARAGE_CONFIGURATION.md. Redémarrez cdt_admin après modification ; ces réglages ne sont pas enregistrés en SQL.
Notifications personnalisées
config/notifications.lua permet de forcer CDT ou ox_lib, ou de raccorder un export/événement client personnalisé, avec types, paramètres et affichage de secours. Le mode inherit conserve les réglages de notifications du menu ; un autre mode dans ce fichier est prioritaire. Voir NOTIFICATIONS_CONFIGURATION.md. Redémarrez cdt_admin après modification de ce fichier. Les réglages du menu continuent de s'appliquer sans redémarrage lorsqu'ils ne sont pas remplacés par le fichier.
