Catégories de chat
Chat Categories
Les catégories correspondent aux onglets dans la zone de saisie du chat. Chacune représente un canal distinct doté de ses propres couleurs, tags, permissions, règles de diffusion et badges d'identité. Elles sont configurées dans shared/config/categories.lua via config.chatCategories.
L'onglet Commandes intégré
Une catégorie de type command est toujours injectée comme premier onglet au démarrage (depuis shared/main.lua) — vous n'avez pas besoin de la définir vous-même :
table.insert(config.chatCategories, 1, {
label = "CATEGORY_COMMANDS_LABEL",
type = "command",
icon = "terminal",
placeholder = "CATEGORY_COMMANDS_PLACEHOLDER",
})Tout ce qui est saisi dans cet onglet est exécuté en tant que commande. Avec config.allowNoSlashCommands = true, le nom d'une commande connue fonctionne avec ou sans slash au début (saisir me bonjour exécute /me bonjour).
Ce qui est activé par défaut
Par défaut, seule la catégorie Admin est active dans config.chatCategories. Des exemples prêts à l'emploi pour OOC (Global), OOC (Local/le plus proche), Police, EMS et Gang sont inclus dans le fichier mais mis en commentaire — il vous suffit de les décommenter et de les ajuster selon vos besoins.
| Catégorie | type |
Comment l'accès est restreint |
|---|---|---|
| Commandes | command |
Toujours présent (auto-injecté) |
| Admin | admin |
Permissions ACE command / admin / adminchat |
| OOC (Global) | ooc |
Ouvert à tout le monde (exemple) |
| OOC (Local) | oocclosest |
Proximité — distance en mètres (exemple) |
| Police | pdchat |
jobs = { police = {...grades} } (exemple) |
| EMS | emschat |
jobs = { ambulance = true } (exemple) |
| Gang | gang |
gangs = { ... } (exemple) |
Catégorie par défaut
config.defaultChatCategory détermine quel onglet est sélectionné par défaut à l'ouverture du chat :
config.defaultChatCategory = "command"Commandes avec ou sans slash
--- true = les commandes fonctionnent AVEC et SANS slash au début ("me bonjour" exécute /me)
--- false = les commandes ne s'activent qu'avec un slash au début ("/me bonjour")
config.allowNoSlashCommands = trueParamètres des catégories
Chaque catégorie prend en charge un ensemble complet de champs. Voici un exemple épuré :
{
label = "CATEGORY_ADMIN_LABEL", -- clé de traduction pour le nom de l'onglet
type = "admin", -- identifiant unique pour cette catégorie
icon = "shield-alt", -- icône FontAwesome
webhookKey = "chatMessage", -- webhook de journalisation Discord (voir Journalisation Discord)
placeholder = "CATEGORY_ADMIN_PLACEHOLDER",
permissions = { "command", "admin", "adminchat" }, -- permissions ACE requises
maxLength = 500, -- longueur maximale du message
tags = { -- tag(s) fixe(s) affiché(s) avant le message
{ tag = "Admin", textColor = { 51, 51, 51 }, bgColor = { 255, 105, 97 } },
},
color = { 255, 105, 97 }, -- couleur par défaut du texte du message
showPlayerName = { active = true, censored = false, showWearingMask = true },
showPlayerId = { active = false, type = "serverId" },
showPlayerJob = { active = false, showLabel = true, showGrade = false },
discordTag = { active = false, maxShow = 1, roles = { ... } },
showHour = { active = true },
}Référence complète des champs (tous optionnels sauf indication contraire) :
| Champ | Type | Description |
|---|---|---|
label |
string | Clé de traduction pour le nom affiché de l'onglet |
type |
string | Requis. Identifiant unique de la catégorie |
icon |
string | Nom de l'icône FontAwesome |
webhookKey |
string | Clé du webhook Discord pour consigner les messages de cette catégorie |
command |
string / string[] | Commande(s) de chat redirigée(s) vers cette catégorie |
placeholder |
string | Clé de traduction pour le texte indicatif de la zone de saisie |
distance |
number | Distance maximale de diffusion en mètres ; à omettre pour une portée globale |
maxLength |
number | Nombre maximal de caractères par message |
permissions |
string[] | Permissions ACE requises pour voir/utiliser la catégorie |
jobs |
table | Métiers requis — true = tous les grades, number[] = grades spécifiques |
gangs |
table | Gangs requis — même structure que jobs |
tags |
table[] | Tags fixes affichés avant les messages (tag, textColor, bgColor) |
color |
RGB | Couleur par défaut du texte du message { r, g, b } |
showPlayerName |
table | active, censored, bgColor, textColor, showWearingMask |
showPlayerId |
table | active, type = "serverId", couleurs |
showPlayerJob |
table | active, showLabel, showGrade, couleurs, surcharges par métier |
discordTag |
table | active, maxShow, roles[] (rôle Discord → tag) |
showHour |
table | active, couleurs — ajoute l'horodatage du message |
La censure des noms affiche un nom masqué (ex. : J*** D**). Si un joueur porte un masque, son nom est masqué en tant qu'Inconnu sauf si showWearingMask = true — la vérification du masque est gérée par config.noneMask dans general.lua.