Przejdź do treści
Na tej stronie

Dokumentacja / Na start

Instalacja agenta

Agent to pojedynczy zasób FiveM. Sam łączy się z FiveDock szyfrowanym połączeniem WebSocket i robi to, o co prosi panel, o ile dana komenda jest na liście tych, które przyjmuje.

Nic nie nasłuchuje na Twojej maszynie. Nie ma portu do przekierowania, a hasło do bazy zostaje tam, gdzie jest.

Dodaj zasób

Pobierz paczkę z wydaniem, wrzuć ją do resources/[fivedock] i uruchom przed frameworkiem. Komenda fivedock_check w konsoli wypisuje, z czego agent korzysta.

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_… to klucz agenta. Tworzysz go w panelu dla jednego serwera i wpisujesz tylko w server.cfg. To nie jest token API: wszystko, co woła API wysyłania przez HTTP, używa zamiast niego tokenu fd_live_… ze strony Tokeny.

Wyślij coś

Są dwa sposoby wgrywania i oba zapisują ten sam plik: bez duplikatów i policzony raz.

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"

Eksporty idą przez agenta i jego klucz, więc Twój skrypt nie trzyma żadnego sekretu. Droga przez HTTP to API wysyłania, które przyjmuje token API (fd_live_…), a nigdy klucz agenta.

Eksporty serwerowe

Zasób fivedock daje Twoim skryptom serwerowym pięć eksportów. Wywołuj je z Lua po stronie serwera: idą przez połączenie samego agenta, więc skrypt nie potrzebuje żadnego tokenu. fivedock_upload_allow decyduje, które zasoby mogą wywoływać te do wysyłania.

screenshot

Robi zrzut ekranu gracza i go wysyła. screenshot-basic musi być uruchomiony. folder to miejsce docelowe, domyślnie fivedock_folder; encoding to jpg, png albo webp, domyślnie jpg; a quality przyjmuje wartości od 0 do 1, domyślnie 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

Wysyła plik z folderu zasobu. resource to zasób, który wywołuje eksport, chyba że podasz inny; path to ścieżka względem folderu tego zasobu, name ustawia nazwę pliku, a folder folder, do którego plik trafi.

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

To samo wysyłanie, tylko zasób i ścieżka są osobnymi argumentami.

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)

Callback

Każdy eksport do wysyłania wywołuje cb(err, file) dokładnie raz. Gdy się uda, err to nil, a file to tabela z polami id, url, size i mimeType. Gdy się nie uda, err to tekst z powodem, a file to 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

Zgłasza gracza, a zgłoszenie widzi w panelu administracja na dyżurze. source to gracz, który zgłasza, message opisuje, co się stało, a subjectSource, jeśli go podasz, to zgłaszany gracz. Zwraca true albo false i powód: empty, gdy wiadomość ma mniej niż 3 znaki, albo too_soon, gdy od poprzedniego zgłoszenia tego gracza minęło mniej niż 30 sekund.

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

Zapisuje event w Black Boksie. source to gracz, którego dotyczy, albo 0, gdy nikogo; event to nazwa z kropkami, np. money.transfer; meta to opcjonalna tabela pól, a liczbowe amount w niej liczy się do alertów ekonomii. Wejścia i wyjścia, śmierci, chat, zmiany pieniędzy w ESX i QBCore, ruchy w ox_inventory oraz bany, kicki i ostrzeżenia z txAdmina agent zapisuje już sam, więc ten eksport jest na to, co wiedzą tylko Twoje skrypty.

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

Znajdź, co laguje

Linijki add_ace pozwalają agentowi nagrywać profiler FXServera, dla fivedock perf i dla przycięć, które łapie sam. Znajdź, co laguje pokazuje, jak czytać to, co znajdzie.

Ustawienia

ConvarDomyślnieCo robi
fivedock_keyDomyślnie · -Wymagany. Klucz agenta, fda_live_…, tworzysz w panelu, jeden na serwer. Bez niego agent się nie uruchomi, a API wysyłania go nie przyjmuje.
fivedock_gatewayDomyślnie · naszAdres, z którym łączy się agent. Tylko wss://, z wyjątkiem localhosta.
fivedock_folderDomyślnie · /Domyślny folder dla wysyłanych plików.
fivedock_upload_allowDomyślnie · wszystkieKtóre zasoby mogą wywoływać eksporty wysyłania. Puste pole oznacza wszystkie.
fivedock_logDomyślnie · infoinfo albo debug. Tryb debug nigdy nie wypisuje poświadczeń.