En esta página
Documentación / Primeros pasos
Instalar el agente
El agente es un recurso de FiveM. Se conecta hacia fuera a FiveDock por un websocket cifrado y hace lo que pide el panel, siempre que el comando esté en la lista que acepta.
Nada escucha en tu máquina. No hay puerto que abrir y la contraseña de tu base de datos se queda donde está.
Añade el recurso
Descarga la release, ponla en resources/[fivedock] y arráncala antes que tu framework. fivedock_check en la consola imprime lo que 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_… es una clave de agente. La creas en el panel para un servidor, y solo va en server.cfg. No es un token de API: todo lo que llama a la API de subida por HTTP usa en su lugar un token fd_live_… de la página Tokens.
Sube algo
Hay dos formas de subir, y las dos guardan el mismo archivo: sin duplicados y cobrado una 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"Los exports pasan por el agente y su clave, así que tu script no guarda ningún secreto. La vía HTTP es la API de subida, que acepta un token de API (fd_live_…) y nunca la clave del agente.
Exports de servidor
El recurso fivedock da cinco exports a tus scripts de servidor. Llámalos desde Lua del lado del servidor: van por la conexión del propio agente, así que tu script no necesita ningún token. fivedock_upload_allow decide qué resources pueden llamar a los de subida.
screenshot
Hace una captura de pantalla de un jugador y la sube. screenshot-basic tiene que estar arrancado. folder es la carpeta de destino, fivedock_folder por defecto; encoding es jpg, png o webp, jpg por defecto; y quality va de 0 a 1, 0,85 por defecto.
-- 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
Sube un archivo desde la carpeta de un recurso. resource es el recurso que llama al export, salvo que nombres otro, path es relativo a la carpeta de ese recurso, name fija el nombre del archivo y folder la carpeta donde cae.
-- 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
La misma subida, con el recurso y la ruta como argumentos propios.
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)El callback
Cada export de subida llama a cb(err, file) una sola vez. Si sale bien, err es nil y file es una tabla con id, url, size y mimeType. Si falla, err es un texto que dice por qué, y file es 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
Envía un reporte de jugador que el staff de guardia ve en el panel. source es el jugador que reporta, message cuenta qué pasó y subjectSource, si lo pasas, es el jugador reportado. Devuelve true, o false y un motivo: empty si el mensaje tiene menos de 3 caracteres, too_soon si no han pasado 30 segundos desde el último reporte de ese jugador.
-- 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
Escribe un evento en la Black Box. source es el jugador del que trata, o 0 si no es de nadie; event es un nombre con puntos como money.transfer; meta es una tabla opcional de campos, y un amount numérico dentro cuenta para las alertas de economía. El agente ya registra por sí solo las entradas y salidas, las muertes, el chat, los cambios de dinero de ESX y QBCore, los movimientos de ox_inventory y los bans, kicks y avisos de txAdmin, así que este export es para lo que solo saben tus scripts.
-- 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…',
})Encontrar qué da lag
Las líneas add_ace dejan que el agente grabe el profiler de FXServer, para fivedock perf y para los tirones que atrapa por su cuenta. Encontrar qué da lag muestra cómo leer lo que encuentra.
Ajustes
| Convar | Por defecto | Qué hace |
|---|---|---|
| fivedock_key | Por defecto · - | Obligatoria. La clave del agente, fda_live_…, se crea en el panel, una por servidor. Sin ella el agente no arranca, y la API de subida no la acepta. |
| fivedock_gateway | Por defecto · el nuestro | A dónde se conecta el agente. Solo wss://, salvo contra localhost. |
| fivedock_folder | Por defecto · / | Carpeta por defecto para las subidas. |
| fivedock_upload_allow | Por defecto · todos | Qué resources pueden llamar a los exports de subida. Vacío significa todos. |
| fivedock_log | Por defecto · info | info o debug. debug nunca imprime una credencial. |