Chat
Substitui o chat padrão do FiveM. Tem abas por grupo, fala local, mensagem anônima, /me, post-it no mapa, sugestão de comandos, emojis e filtro de palavras. O servidor decide quem recebe cada mensagem, o nome que aparece, o tamanho do texto e o anti-spam.
Precisa de: ox_lib, krs_helper
Instalação
- Apague a pasta
resources/[cfx-default]/[gameplay]/chat. Duas pastas com o nomechatdão conflito. - Copie a pasta
chatpararesources/. - No
server.cfg, deixe uma linha só, depois dokrs_helper:
ensure chatO server.cfg padrão do FiveM já traz ensure chat. Mova essa linha em vez de repetir. Veja a ordem de instalação.
O script não cria tabela no banco.
Como usar
| Tecla | O que faz |
|---|---|
T | Abre o chat. Cada jogador troca em Configurações > Teclas > FiveM |
Esc | Fecha |
Enter | Envia |
| Setas para cima e para baixo | Mensagens que você já mandou |
Tab | Completa o comando sugerido |
O chat não abre com o menu de pausa aberto, com o telefone aberto ou durante a recarga da arma. No krs, também não abre antes de o personagem carregar nem com os estados de BlockedStates.
| Aba | O que faz |
|---|---|
| GERAL | Mostra todas as mensagens. O que você escreve aqui sai como OOC |
| OOC | Fala local. Chega a quem está até LocalDistance metros, na mesma dimensão |
| Ação | Mensagem anônima para o servidor inteiro. O autor real vai só para o log |
| Importante | Avisos enviados por scripts do servidor. Só leitura |
| Abas de grupo | Aparecem só para quem está em serviço no grupo |
O sino liga ou desliga a abertura do chat quando chega mensagem nova. O rosto abre os emojis.
/me
/me confere o pulso da pessoa caídaMostra o texto em cima da cabeça para quem está até Me.Distance metros. Dura de 5 a 15 segundos, conforme o tamanho do texto. O limite é de 100 letras. /me sem texto abre uma janela para escolher humor e cor do ícone.
Post-it
- Use o item do post-it no inventário.
- Mire com a câmera e aperte
E.Backspacecancela. - Escreva o recado, até 100 letras, e escolha de quantos metros ele aparece.
O item só é gasto ao colar. Para apagar, chegue a até 2 m e aperte G. Só o dono do post-it ou o grupo de Postit.Admin apagam. Os post-its somem quando o servidor reinicia.
| Framework | Item |
|---|---|
| krs | Já funciona, pelo inventory |
| QBCore | Funciona ao criar o item (abaixo) |
| Creative, vRP | O item só funciona se o seu inventário chamar o uso do krs_helper. Veja a página do krs_helper |
| Sem framework | Não funciona, porque não há inventário |
Em QBCore, cole em qb-core/shared/items.lua:
postit = { name = 'postit', label = 'Post-it', weight = 10, type = 'item', image = 'postit.png', unique = false, useable = true, shouldClose = true, description = 'Use para colar um recado.' },Abas de grupo
Channels lista os grupos com aba. A aba aparece, manda e recebe só para quem está em serviço.
| Framework | Nome na lista | Em serviço |
|---|---|---|
| krs, Creative | Grupo do framework, como LSPD | Serviço do framework |
| QBCore | Job ou gangue, como police. Admin é a permissão admin | Job com serviço ligado. Gangue e Admin contam sempre |
| vRP | Grupo do vRP | Basta ter o grupo |
| Sem framework | Permissão no server.cfg | Basta ter a permissão |
Os nomes que vêm na config são de exemplo para o krs. Em QBCore, troque pelos seus:
Config.Channels = { "Admin","police","ambulance" }Sem framework, coloque o jogador no grupo pelo server.cfg:
add_principal identifier.license:LICENSE_DO_JOGADOR group.police
add_ace group.police group.police allowPermissão
O grupo Admin apaga post-it de qualquer um e vê a aba de staff quando em serviço.
| Framework | Como liberar |
|---|---|
| krs, Creative | Grupo Admin do framework |
| vRP | Grupos god, admin ou mod |
| QBCore, sem framework | As linhas abaixo no server.cfg |
add_principal identifier.license:SUA_LICENSE group.admin
add_ace group.admin admin allow
add_ace group.admin group.Admin allowLog no Discord
As mensagens da aba Ação vão para o log com o número do jogador, o identificador do personagem e o texto. Para enviar ao Discord:
set krs_helper_webhook "URL_DO_SEU_WEBHOOK"Use set, nunca setr. Assim o link fica só no servidor.
Configuração
Tudo fica em config.lua. Só precisa ter o que você mudou. Os textos ficam em locales/*.json, inclusive o nome no topo do chat, ui.brand.
| Opção | Padrão | O que muda |
|---|---|---|
Key | "T" | Tecla de abrir |
MaxLength | 200 | Tamanho máximo da mensagem, em letras |
Flood | Messages = 4, Seconds = 5 | Limite de mensagens por jogador. Chat e /me contam juntos |
LocalDistance | 10.0 | Alcance da aba OOC, em metros |
Anonymous | true | false desliga a aba Ação |
Channels | Admin, LSPD, BCSO, SAPR, Paramedico, Policia | Abas de grupo |
Colors | Vazio. O config.lua traz cores de exemplo | Cor de cada aba, em "#RRGGBB". A chave é o nome da aba |
BlockedWords | Vazio. O config.lua traz uma lista | Palavras recusadas no chat, no /me e no post-it |
BlockedStates | Handcuff, Carry | Estados que impedem abrir o chat. Só têm efeito no krs |
Me.Enabled | true | false desliga o /me |
Me.Distance | 5.0 | Até quantos metros os outros veem |
Postit.Item | "postit" | Nome do item |
Postit.Admin | "Admin" | Grupo que apaga post-it de qualquer um |
Postit.MinDistance | 3 | Menor alcance que o jogador pode escolher |
Postit.MaxDistance | 15 | Maior alcance que o jogador pode escolher |
Postit.HiddenStates | Creation, Spawning | Estados que escondem os post-its. Só têm efeito no krs |
Suggest | Vazio. O config.lua traz listas de exemplo | Comandos sugeridos ao digitar / |
A lista de BlockedWords que vem no config.lua barra palavras comuns e recusa frases como "carro preto". Revise antes de abrir o servidor. A palavra é bloqueada em qualquer parte da frase quando termina ali. Lista vazia desliga o filtro.
Suggest só muda a lista de sugestões. Quem pode usar cada comando é o script dono dele.
| Campo | Formato |
|---|---|
Hide | Comandos que nunca aparecem: nome exato, "@resource" ou padrão Lua iniciado por ^, como "^keys%-" |
Groups | Comando ou "@resource" que só aparece para quem tem um dos grupos. "Admin-2" é o grupo Admin, cargo 2 ou mais alto |
Help | nome = { "descrição", { "parametro", "opcional?" } }. Aceita texto ou chave de locales/*.json. ? no fim marca opcional |
Para programadores
-- servidor: mensagem para um jogador, ou -1 para todos
TriggerClientEvent("chat:ClientMessage", source, "Autor", "Texto", "OOC", Html, Highlight)
-- servidor: formato do chat padrão do FiveM. Sempre texto, na aba OOC
TriggerClientEvent("chat:addMessage", source, { args = { "Autor", "Texto" } })
-- servidor: post-it na dimensão 0 por N segundos. Devolve o id ou false
local id = exports.chat:Postit(CharId, vector3(x, y, z), "texto", 30)
-- servidor: abre a mira do post-it. Admin = true só copia a coordenada
TriggerClientEvent("chat:postit_new", source, Admin)Html = true aceita só <b>, <i>, <u>, <small>, <br>, <strong>, <yellow>, <green>, <red> e <blue>, sem atributos. Use apenas com texto do seu script. Highlight = true destaca a mensagem. A aba Importante só recebe mensagem de script do servidor.
Eventos de cliente no formato do chat padrão: chat:addSuggestion, chat:addSuggestions e chat:removeSuggestion.
Problemas comuns
| Mensagem | Causa |
|---|---|
Você está mandando mensagens rápido demais. Aguarde alguns segundos. | O jogador passou do limite de Flood |
Essa mensagem tem uma palavra proibida. | O texto bate com BlockedWords |
Você não tem um post-it. | O item não estava no inventário ao colar |
item usável não disponível neste framework | O framework não tem uso de item pelo krs_helper. O post-it não funciona, o resto do chat sim |
