Events hooks — empurrar eventos custom
Como hooks customizados alimentam o Live Feed do painel.
Onde adicionar hooks
O arquivo server/events_buffer.lua já hookeia playerConnecting, playerJoining e playerDropped. Para qualquer evento custom (economia, gangs, craft, missões…) basta chamar EliteSaaSEvents.push() de qualquer parte do seu servidor.
O resource não precisa ser dependência
O global
EliteSaaSEvents fica disponível assim que o resource sobe. Em outros resources, basta um check if EliteSaaSEvents then ... end antes do push pra evitar crash quando o resource não está carregado.push() — assinatura completa
lua
EliteSaaSEvents.push({
type = "string", -- categoria (connect, ban, economy, gang, ...)
title = "string", -- linha principal mostrada no painel
detail = "string", -- subtítulo opcional
severity = "info", -- "info" | "warn" | "danger"
actor = "@lucas", -- quem disparou (staff, sistema, automação)
target = "Carlos", -- alvo humano-legível
userId = 9012, -- userId interno se aplicável (vira link no painel)
serverId = 7, -- source do FX se aplicável
meta = { ... } -- payload livre (não renderizado direto, vai no JSON)
})Helpers prontos
lua
-- Punições (chame depois de aplicar a ação)
EliteSaaSEvents.punishment("perm_ban", "Carlos", 9012, "cheating", "@lucas")
-- Economia
EliteSaaSEvents.economy("Maria", 12450, "salário")
-- Inventário (delta positivo = ganhou, negativo = perdeu)
EliteSaaSEvents.inventoryChange("@staff", "ak47", 1)Hook nativo de exemplo — sistema de gangs
Imagine seu resource elite_gangs dispara "elite_gangs:territoryClaimed" quando uma gang toma território. Capture e empurre:
elite_gangs/server.lua·lua
AddEventHandler("elite_gangs:territoryClaimed", function(gangName, zoneLabel, contestedFrom)
if EliteSaaSEvents then
EliteSaaSEvents.push({
type = "gang",
title = ("%s tomou %s"):format(gangName, zoneLabel),
detail = contestedFrom and ("Disputado de "..contestedFrom) or "Sem oposição",
severity = "warn",
actor = gangName,
target = zoneLabel
})
end
end)Como o painel renderiza
- O
typeescolhe ícone + cor (lista completa emcomponents/dashboard/live-feed.tsx:TYPE_VISUAL). severityinfluencia o destaque (danger = vermelho, warn = âmbar).- Se houver
userId, a linha vira link clicável para o perfil do jogador.
Quanto é demais?
O buffer tem capacidade de 500 eventos. Em servidores muito ativos eventos antigos somem rápido. Boas práticas:
- Não empurre transação de cada compra de loja (ruido); agregue por minuto.
- Para auditoria de longo prazo, persista em DB própria — o buffer é live feed, não histórico.
- Para subir a capacidade, edite
CAPACITYemserver/events_buffer.lua.