Uploady w fn_phone: zdjęcia, filmy i notatki głosowe na FiveDock
Wysyłaj zdjęcia, filmy i notatki głosowe z fn_phone do FiveDock zamiast do bazy danych. Wystarczy linijka w configu i agent fivedock albo token API.
Autor: Termi
- fn_phone
- Uploads
- Lua
Na tej stronie
- Gdzie fn_phone trzyma media
- Upload przez agenta fivedock
- Upload z tokenem API
- Zmiana z poziomu gry
- Sprawdź, czy działa
- Co wgrywa fn_phone
- Zdjęcia, które są jeszcze na Fivemanage
- Gdy upload nie działa
- Częste pytania
- Czy fn_phone działa z FiveDock?
- Czy fn_phone potrzebuje tokenu API?
- Czy fn_phone może dalej wgrywać na Fivemanage?
- Czy gracze mogą ustawić link z FiveDock jako dzwonek?
- Czy Config.Fivedock to to samo ustawienie?
fn_phone to nasz własny telefon do FiveM. Domyślnie trzyma każde zdjęcie, film i notatkę głosową w twojej bazie danych. Jedna linijka w configu wysyła je do FiveDock, a w bazie zostaje sam link. Upload odbywa się na serwerze przez fn_bridge, więc nie zmieniasz żadnych plików fn_phone, a token nigdy nie trafia do gracza.
Gdzie fn_phone trzyma media
Każdy plik nagrany telefonem to wiersz w fn_phone_media. Przy Config.Media.provider = 'local', czyli domyślnie, kolumna url trzyma cały plik jako data URI, do 3 MiB na zdjęcie i 12 MiB na film. Serwer przypomina o tym przy każdym starcie:
[fn_phone] photos are stored in the database (Config.Media.provider = local); use fivedock for a CDNPrzy provider = 'fivedock' serwer przekazuje każdy plik do FN_BRIDGE.MEDIA.Upload w fn_bridge, a ten wgrywa go i zwraca link z CDN. fn_bridge łączy się z FiveDock na jeden z dwóch sposobów. Gdy jest token, wysyła plik na https://api.fivedock.dev/api/v3/file/base64, ten sam adres base64, który ma API v3 Fivemanage. Gdy tokenu nie ma, a zasób agenta fivedock działa, zapisuje plik w swoim folderze cache, przekazuje go do exports.fivedock:upload, a potem go usuwa.
Gracze nigdy nie dostają linku do uploadu. Film nagrany telefonem najpierw idzie na serwer jako latent event, a serwer wgrywa go tak samo jak zdjęcie.
Upload przez agenta fivedock
Jeśli na serwerze działa już agent fivedock, nie musisz tworzyć żadnego tokenu. Agent loguje się kluczem fda_live_ z server.cfg, a fn_bridge wysyła przez niego uploady zawsze, gdy token nie jest ustawiony. Agent potrzebuje dwóch linijek w server.cfg, opisanych w poradniku agenta. Wpisz je nad ensure fn_phone:
set fivedock_key "fda_live_…"
ensure fivedockPotem zmień providera w fn_phone/config.lua, a token zostaw pusty:
Media = { provider = 'fivedock', token = '', encoding = 'webp', quality = 0.85, limit = 2000 },Zrestartuj fn_phone. Uploady trafiają do folderu fn_phone w twoim środowisku.
Upload z tokenem API
Bez agenta fn_bridge potrzebuje tokenu API. W panelu FiveDock otwórz Tokeny, utwórz token ze scope’em files:write i przypisz go do swojego serwera. Zaczyna się od fd_live_. To nie jest klucz agenta fda_live_, którego API do wgrywania nie przyjmuje.
fn_phone najpierw czyta token z Config.Media.token. Jeśli to pole zostawisz puste, fn_bridge sięga po convar z server.cfg, z którego może korzystać każdy skrypt na fn_bridge:
set fn_bridge:upload_token "fd_live_…"Użyj tu set. setr wysyła convar do gry każdego gracza. config.lua też jest bezpiecznym miejscem, bo fn_phone ładuje go tylko jako skrypt serwerowy. Ustaw provider = 'fivedock' tak jak w sekcji o agencie. Jeśli jest i token, i agent, fn_bridge używa tokenu.
Dla każdego pliku fn_bridge wysyła takie zapytanie:
POST https://api.fivedock.dev/api/v3/file/base64
Authorization: fd_live_…
Content-Type: application/json
{"base64":"UklGR…","filename":"fn_phone_1792756800_482913.webp","path":"fn_phone"}Nazwa pliku to fn_phone_, czas uploadu w sekundach Unix i losowa liczba. FiveDock odpowiada linkiem z CDN w data.url i stamtąd fn_bridge go odczytuje.
Zmiana z poziomu gry
Admin → Konfiguracja serwera ma oba ustawienia w kroku Uploady i sieć: Magazyn to Media.provider, a Token fivedock to Media.token. Panel nigdy nie pokazuje zapisanego tokenu, tylko to, czy jest ustawiony. Zapisane wartości trafiają do pamięci KVP serwera i po restarcie fn_phone nakładają się na config.lua, więc Magazyn zapisany w grze wygrywa z plikiem.
Sprawdź, czy działa
Po restarcie konsola nie wypisuje już linijki o zdjęciach w bazie. Zrób zdjęcie aparatem i otwórz Pliki w panelu FiveDock: zdjęcie jest w folderze fn_phone, pod nazwą w rodzaju fn_phone_1792756800_482913.webp. W bazie najnowsze wiersze powinny mieć linki do FiveDock:
SELECT id, kind, LEFT(url, 40) AS url
FROM fn_phone_media
ORDER BY id DESC
LIMIT 10;url zaczynający się od https://cdn.fivedock.dev/ jest na FiveDock. Ten, który zaczyna się od data:, jest w bazie: upload się nie udał i fn_phone zapisał plik tam. Jeśli wolisz wtedy błąd na telefonie, dopisz fallback = false do Config.Media. Zdjęcie albo film, którego nie udało się wgrać, nie zostanie wtedy w ogóle zapisany. Notatki głosowe w takiej sytuacji zawsze trafiają do bazy.
Co wgrywa fn_phone
FiveDock przyjmuje wszystkie te pliki. Wyjątkiem po stronie telefonu są nagrania ekranu: fn_phone trzyma je w bazie we własnym formacie, niezależnie od providera.
Notatki głosowe widać jako wideo
Notatki głosowe to pliki WebM, czyli ten sam kontener, w którym fn_phone zapisuje filmy. FiveDock rozpoznaje typ pliku po bajtach, więc w panelu notatki głosowe trafiają do wideo.
Zdjęcia, które są jeszcze na Fivemanage
fn_phone usunął opcję Fivemanage w wersji 1.1.11. Jeśli w twoim config.lua dalej jest provider = 'fivemanage', zmień to na 'fivedock' jak wyżej. Zdjęcia sprzed zmiany mają linki do Fivemanage. Tak samo zdjęcia, które fn_phone_migrate przeniósł z lb-phone albo innego telefonu, bo import kopiuje każdy link bez zmian. Ładują się tak długo, jak pliki leżą na Fivemanage. Od 1.1.11 linki z r2.fivemanage.com nie działają już jako własne dzwonki.
Linki siedzą w kolumnie url tabeli fn_phone_media, a Wiadomości, ogłoszenia i relacje wskazują te wiersze 16-znakowym kluczem. Migracja kopiuje pliki z Fivemanage na klucz tylko do odczytu i daje listę stary link → nowy link. Z każdego wiersza tej listy robisz jedno zapytanie:
UPDATE fn_phone_media
SET url = 'https://cdn.fivedock.dev/f/8Kq2nR4t.webp'
WHERE url = 'https://r2.fivemanage.com/…/IMG_0412.webp';Na Fivemanage nic nie jest zmieniane ani usuwane, więc zapytania możesz puścić, kiedy będziesz gotowy.
Gdy upload nie działa
Częste pytania
Czy fn_phone działa z FiveDock?
Tak, bez zmian w jego plikach. Ustaw Config.Media.provider = 'fivedock', a potem uruchom agenta fivedock albo daj fn_phone token fd_live_ ze scope’em files:write, w Config.Media.token albo w convarze fn_bridge:upload_token. fn_bridge wgrywa z serwera każde zdjęcie, film i notatkę głosową i zapisuje link z CDN.
Czy fn_phone potrzebuje tokenu API?
Nie, jeśli na serwerze działa agent fivedock. Bez ustawionego tokenu fn_bridge przekazuje każdy upload agentowi, który loguje się własnym kluczem fda_live_. Token fd_live_ jest potrzebny tylko na serwerze bez agenta.
Czy fn_phone może dalej wgrywać na Fivemanage?
Nie. Wersja 1.1.11 usunęła opcję Fivemanage i Config.Media.provider przyjmuje teraz local albo fivedock. Stare linki do Fivemanage w fn_phone_media ładują się, dopóki pliki istnieją, a migracja FiveDock kopiuje pliki i wypisuje nowe linki.
Czy gracze mogą ustawić link z FiveDock jako dzwonek?
Tak. fivedock.dev jest pierwszym hostem w Config.Ringtones.hosts, a subdomeny też się liczą, więc link z cdn.fivedock.dev przechodzi. Link musi kończyć się rozszerzeniem pliku dźwiękowego, na przykład .mp3 albo .ogg. Wgraj plik w Pliki, a potem wklej jego link w telefonie w Ustawienia → Dźwięki → Dzwonek.
Czy Config.Fivedock to to samo ustawienie?
Nie. Config.Fivedock wysyła zdarzenia Black Box, czyli logi telefonu, do twojego panelu FiveDock. Zdjęcia, filmy i notatki głosowe słuchają tylko Config.Media. Gdy działa agent, oba działają bez tokenu.