Zum Inhalt springen
Auf dieser Seite

Dokumentation / Erste Schritte

Agent installieren

Der Agent ist eine FiveM-Resource. Er verbindet sich über einen verschlüsselten Websocket nach außen zu FiveDock und tut, was das Panel verlangt, solange der Befehl auf der Liste steht, die er annimmt.

Auf deiner Maschine lauscht nichts. Kein Port muss weitergeleitet werden, und dein Datenbank-Passwort bleibt, wo es ist.

Resource einlegen

Release herunterladen, in resources/[fivedock] ablegen und vor deinem Framework starten. fivedock_check in der Konsole zeigt, was er benutzt.

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_… ist ein Agent-Key. Du erstellst ihn im Panel für einen Server, und er gehört nur in die server.cfg. Er ist kein API-Token: Alles, was die Upload-API über HTTP aufruft, nutzt stattdessen ein fd_live_…-Token von der Seite Tokens.

Etwas hochladen

Es gibt zwei Wege zum Hochladen, und beide speichern dieselbe Datei: dedupliziert und einmal berechnet.

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"

Die Exports laufen über den Agent und seinen Key, dein Skript hält also kein Secret. Der HTTP-Weg ist die Upload-API, und die nimmt ein API-Token (fd_live_…), nie den Agent-Key.

Server-Exports

Die Resource fivedock gibt deinen Server-Skripten fünf Exports. Ruf sie aus serverseitigem Lua auf: Sie laufen über die Verbindung des Agents, dein Skript braucht also kein Token. fivedock_upload_allow legt fest, welche Resources die Upload-Exports aufrufen dürfen.

screenshot

Macht einen Screenshot von einem Spieler und lädt ihn hoch. screenshot-basic muss gestartet sein. folder ist der Zielordner, standardmäßig fivedock_folder; encoding ist jpg, png oder webp, standardmäßig jpg; und quality reicht von 0 bis 1, standardmäßig 0,85.

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

Lädt eine Datei aus dem Ordner einer Resource hoch. resource ist die Resource, die den Export aufruft, sofern du keine andere nennst, path ist relativ zum Ordner dieser Resource, name setzt den Dateinamen und folder den Zielordner.

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

Derselbe Upload, nur mit Resource und Pfad als eigenen Argumenten.

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)

Der Callback

Jeder Upload-Export ruft cb(err, file) genau einmal auf. Bei Erfolg ist err nil und file eine Tabelle mit id, url, size und mimeType. Bei einem Fehler ist err ein String mit dem Grund und file 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

Reicht eine Spielermeldung ein, die das diensthabende Team im Panel sieht. source ist der meldende Spieler, message sagt, was passiert ist, und subjectSource ist, falls angegeben, der gemeldete Spieler. Gibt true zurück oder false und einen Grund: empty, wenn die Nachricht kürzer als 3 Zeichen ist, too_soon innerhalb von 30 Sekunden nach der letzten Meldung dieses Spielers.

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

Schreibt ein Event in die Black Box. source ist der Spieler, um den es geht, oder 0 für keinen; event ist ein Name mit Punkten wie money.transfer; meta ist eine optionale Tabelle mit Feldern, und ein numerisches amount darin zählt für die Wirtschaftsalarme. Joins und Drops, Tode, Chat, Geldänderungen in ESX und QBCore, Bewegungen in ox_inventory sowie Bans, Kicks und Verwarnungen aus txAdmin zeichnet der Agent schon von selbst auf. Dieser Export ist für das, was nur deine Skripte wissen.

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…',
})

Finden, was laggt

Die add_ace-Zeilen erlauben dem Agent, den Profiler von FXServer aufzunehmen, für fivedock perf und für die Hänger, die er selbst erwischt. Finden, was laggt zeigt, wie du liest, was er findet.

Einstellungen

ConvarStandardWas es tut
fivedock_keyStandard · -Pflicht. Der Agent-Key, fda_live_…, im Panel erstellt, einer pro Server. Ohne ihn startet der Agent nicht, und die Upload-API nimmt ihn nicht an.
fivedock_gatewayStandard · unserWohin der Agent sich verbindet. Nur wss://, außer gegen localhost.
fivedock_folderStandard · /Standardordner für Uploads.
fivedock_upload_allowStandard · alleWelche Resources die Upload-Exports aufrufen dürfen. Leer heißt alle.
fivedock_logStandard · infoinfo oder debug. debug gibt niemals Zugangsdaten aus.