Saltar al contenido
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.

shell
curl -fLO https://dl.fivedock.dev/agent/latest/fivedock.zip
unzip fivedock.zip -d resources/[fivedock]
server.cfg
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.

Lua
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)
HTTP
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.

Lua
-- 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.

Lua
-- 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.

Lua
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.

Lua
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
end

report

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.

Lua
-- 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'
end

log

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.

Lua
-- 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

ConvarPor defectoQué hace
fivedock_keyPor 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_gatewayPor defecto · el nuestroA dónde se conecta el agente. Solo wss://, salvo contra localhost.
fivedock_folderPor defecto · /Carpeta por defecto para las subidas.
fivedock_upload_allowPor defecto · todosQué resources pueden llamar a los exports de subida. Vacío significa todos.
fivedock_logPor defecto · infoinfo o debug. debug nunca imprime una credencial.