Skip to content

API de Desenvolvedor

Developer API

Como o BUPA Chat provide 'chat', ele implementa a API de chat padrão do FiveM. Qualquer recurso que já utilize chat:addMessage, chat:addSuggestion etc. continua funcionando sem alterações. O BUPA Chat expõe cada um deles tanto como um evento de rede (chat:<name>) quanto como um export (em formato lowercase e Capitalized).

A superfície da API é registrada em utils/chat.lua:

utils/chat.lua
registerEvent("addMessage", chatUtility.addMessage)
registerEvent("addSuggestion", chatUtility.addSuggestion)
registerEvent("addSuggestions", chatUtility.addSuggestions)
registerEvent("removeSuggestion", chatUtility.removeSuggestion)
registerEvent("removeSuggestions", chatUtility.removeSuggestions)
registerEvent("clear", chatUtility.clearMessages)

O registerEvent configura o evento chat:<name>, além de exports(name) e exports(Name), portanto, os três estilos de chamada abaixo são equivalentes.

Adding a chat message

No lado do cliente, envie uma mensagem diretamente para o chat:

client
-- Evento padrão (funciona a partir de qualquer recurso)
TriggerEvent("chat:addMessage", {
    color = { 255, 0, 0 },
    multiline = true,
    args = { "Dispatch", "A robbery is in progress downtown." },
})

-- Forma de export
exports.chat:addMessage({ args = { "System", "Server restarting soon." } })

Formato da mensagem:

Field Type Description
args table Partes da mensagem. Com config.defaultAddTag, se houver mais de um argumento e nenhum tags, o primeiro argumento vira uma tag e o restante é o corpo
color RGB Cor da mensagem / primeira tag { r, g, b }
tags table[] Tags explícitas { tag, bgColor, textColor }
multiline boolean Permitir que a mensagem quebre em várias linhas

O evento de cliente clássico chatMessage também é tratado (name, color, message), de modo que a saída legada de TriggerClientEvent('chatMessage', ...) ainda apareça.

Suggestions

As sugestões alimentam o painel de preenchimento automático de comandos. Elas podem ser adicionadas uma a uma ou em lote, e removidas da mesma forma.

client
TriggerEvent("chat:addSuggestion", "/revive", "Revive a nearby player", {
    { name = "id", help = "Server ID of the target" },
})

TriggerEvent("chat:addSuggestions", {
    { name = "/heal", help = "Heal yourself" },
    { name = "/car",  help = "Spawn a vehicle", params = {
        { name = "model", help = "Vehicle model", optional = true },
    } },
})

TriggerEvent("chat:removeSuggestion", "/car")
exports.chat:clear()   -- limpa todas as mensagens

O BUPA Chat preenche automaticamente as sugestões de cada comando registrado que o jogador possui acesso ACE (command.<name>), tanto ao carregar quanto sempre que um recurso iniciar/parar. Você só precisa de chat:addSuggestion(s) para comandos que necessitam de texto de ajuda personalizado ou parâmetros.

Notifications

O BUPA Chat expõe um evento de notificação chamado <resource>:notify — ou seja, bupa-chat:notify — alimentado pelo lib.notify do ox_lib. Ele funciona tanto no cliente quanto no servidor.

server
-- notifica um jogador (servidor -> cliente): source, seguido pelos argumentos de Notify
TriggerClientEvent("bupa-chat:notify", targetSrc, "MY_LOCALE_KEY", "success", 4000)
client
TriggerEvent("bupa-chat:notify", "MY_LOCALE_KEY", "error", 5000)

O manipulador é Notify(text, notifyType, duration, ...). O text é processado pelo wrapper de localização t(), então você pode passar uma chave de localidade (com argumentos de formatação) ou texto simples. O notifyType tem como padrão inform e o duration, 4000 ms.

Localization helpers

As seguintes variáveis globais estão disponíveis dentro do recurso (e nos arquivos carregados no contexto dele):

Symbol Description
t(key, ...) Um wrapper leve sobre locale() do ox_lib. Formata com argumentos %s/%d e retorna a própria chave caso a tradução esteja ausente
GetLang() Retorna o dicionário de localidade achatado atual
Notify(text, type, duration, ...) Dispara a notificação bupa-chat:notify

Runtime language switch — bupa:changeLanguage

Dispare este evento de cliente para alterar o idioma do chat de um jogador em tempo real, sem precisar reiniciar. Ele recarrega a localidade e a envia para a interface React:

client
TriggerEvent("bupa:changeLanguage", "fr")

Consulte Localization para obter detalhes.