Categorías de chat
Categorías de chat
Las categorías son las pestañas en la entrada del chat. Cada una es un canal separado con sus propios colores, etiquetas, permisos, reglas de entrega e insignias de identidad. Se definen en shared/config/categories.lua como config.chatCategories.
La pestaña de Comandos integrada
Una categoría de tipo command se inyecta siempre como la primera pestaña al ejecutarse (desde shared/main.lua) — no necesitas definirla tú mismo:
table.insert(config.chatCategories, 1, {
label = "CATEGORY_COMMANDS_LABEL",
type = "command",
icon = "terminal",
placeholder = "CATEGORY_COMMANDS_PLACEHOLDER",
})Cualquier cosa escrita en esta pestaña se ejecuta como un comando. Con config.allowNoSlashCommands = true, un nombre de comando conocido funciona con o sin una barra diagonal al principio (escribir me hi ejecuta /me hi).
Qué viene activado por defecto
De serie, solo la categoría de Admin está activa en config.chatCategories. Se incluyen en el archivo ejemplos listos para usar para OOC (Global), OOC (Local/más cercano), Policía, EMS y Banda, pero están comentados; descoméntalos y ajústalos según necesites.
| Categoría | type |
Cómo se restringe el acceso |
|---|---|---|
| Comandos | command |
Siempre presente (auto-inyectada) |
| Admin | admin |
Permisos ACE command / admin / adminchat |
| OOC (Global) | ooc |
Abierto a todo el mundo (ejemplo) |
| OOC (Local) | oocclosest |
Proximidad — distance en metros (ejemplo) |
| Policía | pdchat |
jobs = { police = {...grades} } (ejemplo) |
| EMS | emschat |
jobs = { ambulance = true } (ejemplo) |
| Banda | gang |
gangs = { ... } (ejemplo) |
Categoría predeterminada
config.defaultChatCategory decide qué pestaña está enfocada cuando se abre el chat:
config.defaultChatCategory = "command"Comandos con barra vs. sin barra
--- true = los comandos funcionan CON y SIN barra diagonal al principio ("me hi" ejecuta /me)
--- false = los comandos solo se activan con una barra diagonal al principio ("/me hi")
config.allowNoSlashCommands = trueParámetros de categoría
Cada categoría admite una gran variedad de campos. Un ejemplo resumido:
{
label = "CATEGORY_ADMIN_LABEL", -- clave de traducción para el nombre de la pestaña
type = "admin", -- identificador único para esta categoría
icon = "shield-alt", -- icono de FontAwesome
webhookKey = "chatMessage", -- webhook de registros de Discord (ver Registro en Discord)
placeholder = "CATEGORY_ADMIN_PLACEHOLDER",
permissions = { "command", "admin", "adminchat" }, -- perms ACE requeridos
maxLength = 500, -- longitud máxima del mensaje
tags = { -- etiqueta(s) fija(s) mostrada(s) antes del mensaje
{ tag = "Admin", textColor = { 51, 51, 51 }, bgColor = { 255, 105, 97 } },
},
color = { 255, 105, 97 }, -- color de texto predeterminado del mensaje
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 },
}Referencia completa de campos (todos opcionales a menos que se indique lo contrario):
| Campo | Tipo | Descripción |
|---|---|---|
label |
string | Clave de traducción para el nombre visible de la pestaña |
type |
string | Requerido. Identificador único para la categoría |
icon |
string | Nombre del icono de FontAwesome |
webhookKey |
string | Clave del webhook de Discord para registrar los mensajes de esta categoría |
command |
string / string[] | Comando(s) de chat que se enrutan a esta categoría |
placeholder |
string | Clave de traducción para el texto de marcador de posición (placeholder) |
distance |
number | Distancia máxima de entrega en metros; omitir para global |
maxLength |
number | Longitud máxima en caracteres del mensaje |
permissions |
string[] | Permisos ACE requeridos para ver/usar la categoría |
jobs |
table | Trabajos requeridos — true = todos los rangos, number[] = rangos específicos |
gangs |
table | Bandas requeridas — misma estructura que jobs |
tags |
table[] | Etiquetas fijas mostradas antes de los mensajes (tag, textColor, bgColor) |
color |
RGB | Color de texto predeterminado del mensaje { r, g, b } |
showPlayerName |
table | active, censored, bgColor, textColor, showWearingMask |
showPlayerId |
table | active, type = "serverId", colores |
showPlayerJob |
table | active, showLabel, showGrade, colores, anulaciones por trabajo |
discordTag |
table | active, maxShow, roles[] (Rol de Discord → etiqueta) |
showHour |
table | active, colores — añade la hora del mensaje al final |
La censura de nombres muestra un nombre enmascarado (p. ej., J*** D**). Si un jugador lleva una máscara, su nombre se oculta como Desconocido a menos que showWearingMask = true — la comprobación de la máscara la gestiona config.noneMask en general.lua.