Categorias de Chat
Chat Categories
As categorias são as abas no input do chat. Cada uma é um canal separado com suas próprias cores, tags, permissões, regras de entrega e distintivos de identidade. Elas são definidas em shared/config/categories.lua como config.chatCategories.
A aba de Comandos integrada
Uma categoria command é sempre injetada como a primeira aba em tempo de execução (a partir de shared/main.lua) — você não precisa defini-la manualmente:
table.insert(config.chatCategories, 1, {
label = "CATEGORY_COMMANDS_LABEL",
type = "command",
icon = "terminal",
placeholder = "CATEGORY_COMMANDS_PLACEHOLDER",
})Qualquer coisa digitada nesta aba é executada como um comando. Com config.allowNoSlashCommands = true, um nome de comando conhecido funciona com ou sem a barra inicial (digitar me hi executa /me hi).
O que vem ativado por padrão
Por padrão, apenas a categoria Admin está ativa em config.chatCategories. Exemplos prontos para uso em OOC (Global), OOC (Local/mais próximo), Polícia, EMS e Facção estão incluídos no arquivo, mas comentados — basta descomentá-los e ajustá-los conforme necessário.
| Categoria | type |
Como o acesso é controlado |
|---|---|---|
| Comandos | command |
Sempre presente (auto-injetado) |
| Admin | admin |
Permissões ACE command / admin / adminchat |
| OOC (Global) | ooc |
Aberto para todos (exemplo) |
| OOC (Local) | oocclosest |
Proximidade — distance em metros (exemplo) |
| Polícia | pdchat |
jobs = { police = {...grades} } (exemplo) |
| EMS | emschat |
jobs = { ambulance = true } (exemplo) |
| Facção | gang |
gangs = { ... } (exemplo) |
Categoria padrão
config.defaultChatCategory define qual aba fica em foco quando o chat é aberto:
config.defaultChatCategory = "command"Comandos com vs. sem barra
--- true = comandos funcionam COM e SEM a barra inicial ("me hi" executa /me)
--- false = comandos são acionados apenas com a barra inicial ("/me hi")
config.allowNoSlashCommands = trueParâmetros da categoria
Cada categoria suporta um conjunto rico de campos. Um exemplo resumido:
{
label = "CATEGORY_ADMIN_LABEL", -- chave de tradução para o nome da aba
type = "admin", -- id único para esta categoria
icon = "shield-alt", -- Ícone FontAwesome
webhookKey = "chatMessage", -- Webhook de log do Discord (consulte Discord Logging)
placeholder = "CATEGORY_ADMIN_PLACEHOLDER",
permissions = { "command", "admin", "adminchat" }, -- perms ACE necessárias
maxLength = 500, -- comprimento máximo da mensagem
tags = { -- tag(s) fixa(s) exibida(s) antes da mensagem
{ tag = "Admin", textColor = { 51, 51, 51 }, bgColor = { 255, 105, 97 } },
},
color = { 255, 105, 97 }, -- cor padrão do texto da mensagem
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 },
}Referência completa de campos (todos opcionais, a menos que indicado o contrário):
| Campo | Tipo | Descrição |
|---|---|---|
label |
string | Chave de tradução para o nome de exibição da aba |
type |
string | Obrigatório. Identificador único para a categoria |
icon |
string | Nome do ícone FontAwesome |
webhookKey |
string | Chave do webhook do Discord para registrar as mensagens desta categoria |
command |
string / string[] | Comando(s) de chat que direcionam para esta categoria |
placeholder |
string | Chave de tradução para o placeholder de entrada |
distance |
number | Distância máxima de entrega em metros; omita para global |
maxLength |
number | Comprimento máximo de caracteres da mensagem |
permissions |
string[] | Permissões ACE necessárias para ver/usar a categoria |
jobs |
table | Empregos necessários — true = todos os cargos, number[] = cargos específicos |
gangs |
table | Facções necessárias — mesma estrutura que jobs |
tags |
table[] | Tags fixas exibidas antes das mensagens (tag, textColor, bgColor) |
color |
RGB | Cor padrão do texto da mensagem { r, g, b } |
showPlayerName |
table | active, censored, bgColor, textColor, showWearingMask |
showPlayerId |
table | active, type = "serverId", cores |
showPlayerJob |
table | active, showLabel, showGrade, cores, substituições por emprego |
discordTag |
table | active, maxShow, roles[] (Cargo do Discord → tag) |
showHour |
table | active, cores — adiciona o horário da mensagem |
A censura de nomes exibe um nome mascarado (ex: J*** D**). Se um jogador estiver usando uma máscara, o nome dele será ocultado como Desconhecido, a menos que showWearingMask = true — a verificação de máscara é controlada por config.noneMask em general.lua.