Exemplos Práticos
🎮 Sistema de Notificações de Player
-- Notificar quando players conectam/desconectam
addEventHandler("onPlayerJoin", root, function()
local playerName = getPlayerName(source)
local playerSerial = getPlayerSerial(source)
local playerIP = getPlayerIP(source)
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/YOUR_WEBHOOK",
"👋 Player Conectado",
"**" .. playerName .. "** entrou no servidor", {
color = 65280, -- Verde
fields = {
{name = "Serial", value = playerSerial, inline = true},
{name = "IP", value = playerIP, inline = true},
{name = "Hora", value = os.date("%H:%M:%S"), inline = true},
{name = "Players Online", value = tostring(#getElementsByType("player")), inline = true}
},
footer = {text = "Sistema de Monitoramento"},
timestamp = true
})
end)
addEventHandler("onPlayerQuit", root, function(quitType, reason, responsibleElement)
local playerName = getPlayerName(source)
local timeOnline = math.floor((getTickCount() - (getElementData(source, "joinTime") or 0)) / 60000)
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/YOUR_WEBHOOK",
"👋 Player Desconectado",
"**" .. playerName .. "** saiu do servidor", {
color = 16776960, -- Amarelo
fields = {
{name = "Tempo Online", value = timeOnline .. " minutos", inline = true},
{name = "Motivo", value = reason or "Desconhecido", inline = true},
{name = "Tipo", value = quitType, inline = true}
},
footer = {text = "Sistema de Monitoramento"},
timestamp = true
})
end)
🔨 Log de Ações Administrativas
-- Monitorar comandos administrativos
local adminCommands = {"ban", "kick", "mute", "warn", "tp", "givemoney"}
for _, cmd in ipairs(adminCommands) do
addCommandHandler(cmd, function(player, command, target, ...)
if not hasObjectPermissionTo(player, "general.administrator") then
return
end
local adminName = getPlayerName(player)
local args = table.concat({...}, " ")
-- Executar comando normal primeiro
-- ... código do comando ...
-- Depois notificar via webhook
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/ADMIN_WEBHOOK",
"🔨 Ação Administrativa",
"**" .. adminName .. "** executou: `/" .. command .. "`", {
color = 15158332, -- Vermelho
fields = {
{name = "Alvo", value = target or "N/A", inline = true},
{name = "Argumentos", value = args ~= "" and args or "Nenhum", inline = true},
{name = "Servidor", value = getServerName(), inline = true}
},
footer = {text = "Log Administrativo"},
timestamp = true
})
end)
end
💰 Sistema de Alertas Financeiros
-- Alertar sobre transações suspeitas
function onMoneyTransaction(player, amount, reason)
local playerName = getPlayerName(player)
local playerMoney = getPlayerMoney(player)
-- Alertar se transação muito alta
if amount > 1000000 then
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/FINANCIAL_WEBHOOK",
"💰 Transação Suspeita",
"Transação de alto valor detectada", {
color = 16776960, -- Amarelo
fields = {
{name = "Player", value = playerName, inline = true},
{name = "Valor", value = "$" .. formatMoney(amount), inline = true},
{name = "Saldo Atual", value = "$" .. formatMoney(playerMoney), inline = true},
{name = "Motivo", value = reason, inline = false}
},
footer = {text = "Sistema Anti-Fraude"},
timestamp = true
})
end
-- Log de todas as transações importantes
if amount > 100000 then
LockSystem.Webhook.sendLog("info", "Transação financeira registrada", {
player = playerName,
amount = amount,
reason = reason,
balance_after = playerMoney
})
end
end
🚨 Sistema de Alertas de Segurança
-- Alertar sobre tentativas de hack
addEventHandler("onElementDataChange", root, function(dataName, oldValue, newValue)
if getElementType(source) == "player" and dataName == "money" then
local expectedMoney = getElementData(source, "expected_money") or 0
-- Se money foi alterado sem ser pelo sistema oficial
if math.abs(newValue - expectedMoney) > 1000 then
local playerName = getPlayerName(source)
local playerSerial = getPlayerSerial(source)
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/SECURITY_WEBHOOK",
"🚨 Possível Hack Detectado",
"Alteração suspeita de dinheiro detectada", {
color = 15158332, -- Vermelho
fields = {
{name = "Player", value = playerName, inline = true},
{name = "Serial", value = playerSerial, inline = true},
{name = "Valor Anterior", value = "$" .. formatMoney(oldValue), inline = true},
{name = "Valor Atual", value = "$" .. formatMoney(newValue), inline = true},
{name = "Diferença", value = "$" .. formatMoney(newValue - oldValue), inline = true},
{name = "Ação", value = "Player foi kickado", inline = true}
},
footer = {text = "Sistema Anti-Hack"},
timestamp = true
})
-- Kick automático
kickPlayer(source, "Alteração não autorizada de dinheiro")
end
end
end)
📊 Relatórios Automáticos de Status
-- Relatório de status a cada 30 minutos
setTimer(function()
local stats = {
players_online = #getElementsByType("player"),
vehicles_spawned = #getElementsByType("vehicle"),
uptime = getTickCount(),
memory_usage = collectgarbage("count"),
resources_running = #getResources()
}
-- Usar cache para comparar com relatório anterior
local lastStats = LockSystem.Cache.get("last_server_stats") or {}
LockSystem.Cache.set("last_server_stats", stats, 1800)
local uptimeHours = math.floor(stats.uptime / 3600000)
local uptimeMinutes = math.floor((stats.uptime % 3600000) / 60000)
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/STATUS_WEBHOOK",
"📊 Relatório de Status",
"Relatório automático do servidor", {
color = 3447003, -- Azul
fields = {
{name = "👥 Players Online", value = tostring(stats.players_online), inline = true},
{name = "🚗 Veículos", value = tostring(stats.vehicles_spawned), inline = true},
{name = "⏱️ Uptime", value = uptimeHours .. "h " .. uptimeMinutes .. "m", inline = true},
{name = "🧠 Memória", value = math.floor(stats.memory_usage) .. "KB", inline = true},
{name = "📦 Resources", value = tostring(stats.resources_running), inline = true},
{name = "🔄 Status", value = "🟢 Online", inline = true}
},
footer = {text = "Relatório Automático - " .. getServerName()},
timestamp = true
})
end, 1800000, 0) -- A cada 30 minutos
🎯 Templates Pré-definidos
-- Usar templates para padronizar notificações
local template = LockSystem.Webhook.template("player_join", {
player_name = "João123",
player_serial = "ABC123456789",
player_ip = "192.168.1.100",
timestamp = os.date("%H:%M:%S")
})
-- Template já formatado, só enviar
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/YOUR_WEBHOOK",
template.title, template.description, {
color = template.color,
fields = template.fields
})
-- Templates disponíveis:
-- "player_join" - Player conectando
-- "player_leave" - Player desconectando
-- "admin_action" - Ação administrativa
-- "error" - Erro do sistema
Atualizado