Nesta página
Documentação / Primeiros passos
Instalar o agente
O agente é um resource do FiveM. Ele conecta para fora até o FiveDock por um websocket criptografado e faz o que o painel pede, desde que o comando esteja na lista que ele aceita.
Nada fica escutando na sua máquina. Não há porta para liberar, e a senha do seu banco fica onde está.
Adicione o resource
Baixe a release, coloque em resources/[fivedock] e inicie antes do seu framework. fivedock_check no console mostra o que ele está usando.
curl -fLO https://dl.fivedock.dev/agent/latest/fivedock.zip
unzip fivedock.zip -d resources/[fivedock]ensure fivedock
set fivedock_key "fda_live_…"
# lets fivedock perf record FXServer’s profiler
add_ace resource.fivedock command.profiler allow
add_ace resource.fivedock command.record allow
add_ace resource.fivedock command.saveJSON allow
# optional: where uploads land, and how loud the log is
set fivedock_folder "/screenshots"
set fivedock_log "info"fda_live_… é uma chave de agente. Você cria no painel para um servidor, e ela só vai no server.cfg. Não é um token de API: tudo que chama a API de upload por HTTP usa, em vez dela, um token fd_live_… da página Tokens.
Suba alguma coisa
Há duas formas de fazer upload, e as duas guardam o mesmo arquivo: deduplicado e cobrado uma vez.
exports.fivedock:upload({
resource = 'my-script',
path = 'cache/shot.jpg',
folder = '/screenshots',
}, function(err, file)
if not err then print(file.url) end
end)
-- take the screenshot and upload it in one call
exports.fivedock:screenshot(source, { folder = '/screenshots', quality = 0.9 }, cb)curl -X POST https://api.fivedock.dev/api/v3/file \
-H "Authorization: Bearer fd_live_…" \
-F "[email protected]" \
-F "path=/screenshots"Os exports passam pelo agente e pela chave dele, então seu script não guarda nenhum segredo. O caminho HTTP é a API de upload, que aceita um token de API (fd_live_…) e nunca a chave do agente.
Exports de servidor
O resource fivedock dá cinco exports aos seus scripts de servidor. Chame-os de Lua no lado do servidor: eles passam pela conexão do próprio agente, então seu script não precisa de token. fivedock_upload_allow decide quais resources podem chamar os de upload.
screenshot
Tira um print da tela de um jogador e envia. O screenshot-basic precisa estar iniciado. folder é a pasta de destino, fivedock_folder por padrão; encoding é jpg, png ou webp, jpg por padrão; e quality vai de 0 a 1, 0,85 por padrão.
-- server.lua: /evidence <player id> screenshots that player, for staff only
RegisterCommand('evidence', function(source, args)
local target = tonumber(args[1])
if not target then return end
exports.fivedock:screenshot(target, {
folder = '/evidence',
encoding = 'webp', -- 'jpg' (default), 'png' or 'webp'
quality = 0.85, -- 0 to 1
}, function(err, file)
if err then
print(('screenshot failed: %s'):format(err))
return
end
print(('%s, %d bytes, %s'):format(file.url, file.size, file.mimeType))
end)
end, true)upload
Envia um arquivo da pasta de um resource. resource é o resource que chama o export, a menos que você indique outro, path é relativo à pasta desse resource, name define o nome do arquivo e folder a pasta onde ele cai.
-- a file your resource wrote to resources/my-script/cache/shot.jpg
exports.fivedock:upload({
resource = 'my-script', -- defaults to the resource calling the export
path = 'cache/shot.jpg', -- relative to that resource's folder
name = 'shot.jpg',
folder = '/screenshots',
}, function(err, file)
if not err then print(file.url) end
end)uploadFile
O mesmo upload, com o resource e o caminho como argumentos próprios.
exports.fivedock:uploadFile('my-script', 'cache/shot.jpg', {
name = 'shot.jpg',
folder = '/screenshots',
}, function(err, file)
if not err then print(file.id, file.url) end
end)O callback
Cada export de upload chama cb(err, file) uma única vez. Quando dá certo, err é nil e file é uma tabela com id, url, size e mimeType. Quando falha, err é um texto dizendo o motivo, e file é nil.
function(err, file)
-- on success: err = nil
-- file = { id = '8Kq2nR4t', url = 'https://cdn.fivedock.dev/f/8Kq2nR4t.jpg',
-- size = 48213, mimeType = 'image/jpeg' }
-- on failure: err = 'screenshot-basic is not started' (or another reason), file = nil
endreport
Registra uma denúncia de jogador que a staff de plantão vê no painel. source é o jogador que denuncia, message diz o que aconteceu e subjectSource, se você passar, é o jogador denunciado. Retorna true, ou false e um motivo: empty quando a mensagem tem menos de 3 caracteres, too_soon dentro de 30 segundos da última denúncia desse jogador.
-- source reports subjectSource; subjectSource is optional
local ok, reason = exports.fivedock:report(source, 'He rammed my car at Legion Square', 12)
if not ok then
print(('report refused: %s'):format(reason)) -- 'empty' or 'too_soon'
endlog
Grava um evento na Black Box. source é o jogador de quem se trata, ou 0 para nenhum; event é um nome com pontos como money.transfer; meta é uma tabela opcional de campos, e um amount numérico nela conta para os alertas de economia. O agente já registra sozinho entradas e saídas, mortes, chat, mudanças de dinheiro do ESX e do QBCore, movimentações do ox_inventory e bans, kicks e avisos do txAdmin, então este export é para o que só os seus scripts sabem.
-- source is the player it is about, or 0; meta is optional
exports.fivedock:log(source, 'money.transfer', 'Paid 500 to Bo for the car', {
amount = 500, to = 'license:9a4f…',
})Descobrir o que causa lag
As linhas add_ace deixam o agente gravar o profiler do FXServer, para o fivedock perf e para as travadas que ele pega sozinho. Descobrir o que causa lag mostra como ler o que ele encontra.
Configurações
| Convar | Padrão | O que faz |
|---|---|---|
| fivedock_key | Padrão · - | Obrigatória. A chave do agente, fda_live_…, criada no painel, uma por servidor. Sem ela o agente não sobe, e a API de upload não a aceita. |
| fivedock_gateway | Padrão · o nosso | Para onde o agente conecta. Só wss://, exceto contra localhost. |
| fivedock_folder | Padrão · / | Pasta padrão dos uploads. |
| fivedock_upload_allow | Padrão · todos | Quais resources podem chamar os exports de upload. Vazio significa todos. |
| fivedock_log | Padrão · info | info ou debug. debug nunca imprime uma credencial. |