Przejdź do treści
Blog

Jak przywrócić ekwipunek jednego gracza FiveM po dupie albo bugu

Oddaj jednemu graczowi przedmioty, pieniądze i auta na ESX, QBCore albo ox_inventory z kopii zapasowej, bez cofania całego serwera. Z gotowym SQL.

Autor: Termi

4 min czytania
  • Backups
  • Rollback
  • ox_inventory
  • Dupes
Na tej stronie

Bug zjada graczowi ekwipunek albo dup zostawia jednego gracza z czterdziestoma pistoletami o tym samym numerze seryjnym. Cofnięcie całego serwera do wczorajszej nocy karze wszystkich, którzy grali od tamtej pory. Lepiej przywrócić tylko wiersze, które należą do jednej postaci. Ten poradnik pokazuje, gdzie ESX, QBCore i ox_inventory trzymają te wiersze, jak ręcznie wyciągnąć je z kopii zapasowej i jak w ogóle znaleźć zdublowane przedmioty.

Gdzie postać siedzi w bazie

  • ESX trzyma postać w users, po kluczu identifier, pieniądze w kolumnie JSON accounts, a z ox_inventory przedmioty w inventory. Auta są w owned_vehicles, po kluczu owner.
  • QBCore i Qbox trzymają ją w players, po kluczu citizenid, z kolumnami JSON money i inventory. Auta są w player_vehicles.
  • ox_inventory dodaje tabelę ox_inventory na schowki, po kluczu owner i name, a bagażnik i schowek auta trzyma w kolumnach trunk i glovebox tabeli z pojazdami.
  • Cała reszta ma własne tabele: user_licenses na ESX oraz playerskins, player_outfits i apartments na QBCore.

Przywracanie jednej postaci ręcznie

Potrzebujesz kopii sprzed szkody, wczytanej do osobnej bazy. Nigdy nie wczytuj jej na żywą bazę. Najpierw upewnij się, że gracz jest offline i zostanie offline do końca: framework zapisuje ekwipunek, który trzyma w pamięci, przy następnym zapisie albo przy rozłączeniu, i ten zapis nadpisze twoje przywrócenie.

Wczytaj kopię do bazy roboczej obok żywej:

terminal
mysql -u root -p -e "CREATE DATABASE restore_scratch"
mysql -u root -p restore_scratch < fivem-2026-10-22.sql

Potem skopiuj kolumny postaci z bazy roboczej. fivem to tutaj żywa baza, wstaw swoją nazwę:

QBCore · Qbox
UPDATE fivem.players AS live
JOIN restore_scratch.players AS old ON old.citizenid = live.citizenid
SET live.inventory = old.inventory, live.money = old.money
WHERE live.citizenid = 'ABC12345';
ESX · ox_inventory
UPDATE fivem.users AS live
JOIN restore_scratch.users AS old ON old.identifier = live.identifier
SET live.inventory = old.inventory, live.accounts = old.accounts
WHERE live.identifier = 'char1:9a4f00ab12cd34ef';

Auta i schowki przywracasz tak samo, po citizenid albo owner. Zanim skopiujesz wiersze, sprawdź, czy gracz nie sprzedał auta i czy ktoś inny nie ma teraz tej tablicy, a na koniec usuń bazę roboczą.

Przywracanie na poziomie wierszy wstawia cały ekwipunek taki, jaki był w chwili kopii, więc wszystko, co gracz zdobył od tamtej pory, znika. Powiedz mu, do której godziny przywróciłeś.

Najpierw znajdź zdublowane przedmioty

Jeśli szkodę zrobił dup, samo przywrócenie dupera nie wystarczy, bo kopie mogły już zostać sprzedane albo rozdane. Bronie i inne unikalne przedmioty mają numer seryjny: metadata.serial w ox_inventory i info.serie w qb-inventory. Ten sam numer w dwóch miejscach to kopia. Na MySQL 8 albo MariaDB 10.6 i nowszych to zapytanie pokaże każdy numer, który występuje więcej niż raz u graczy QBCore z ox_inventory:

duplicate serials
SELECT j.serial, COUNT(*) AS copies, GROUP_CONCAT(p.citizenid) AS holders
FROM players AS p,
  JSON_TABLE(p.inventory, '$[*]' COLUMNS (serial VARCHAR(64) PATH '$.metadata.serial')) AS j
WHERE j.serial IS NOT NULL
GROUP BY j.serial
HAVING copies > 1;

Na ESX zamień players i citizenid na users i identifier, a przy qb-inventory użyj ścieżki $.info.serie. Schowki, bagażniki i schowki w autach też trzymają przedmioty, więc zanim uznasz, kto dupował, puść to samo zapytanie po ox_inventory.data i tabeli z pojazdami.

Przywracanie jednego gracza w FiveDock

FiveDock robi całą robotę z bazą roboczą za ciebie. Na Metro wybierasz w panelu kopię i gracza, a FiveDock przywraca tylko wiersze powiązane z identyfikatorami tego gracza we wszystkich tabelach frameworka: postać z pieniędzmi i ekwipunkiem, auta, licencje, skiny, stroje, mieszkania i schowki ox_inventory. Zanim cokolwiek zmieni, pokazuje, ile wierszy ruszy.

Alerty o duplikatach przedmiotów na Metro pilnują, czy ten sam numer seryjny nie pojawia się w dwóch ekwipunkach i czy jakiś stos nie rośnie bez powodu. Każde znalezisko zapamiętuje, kto miał przedmiot, i kopię zapasową z tej chwili, więc punkt przywracania już czeka, kiedy tam zajrzysz. Alerty pieniężne, w każdym planie, piszą na Discorda, gdy przelew przekroczy próg albo gracz zarabia za szybko.

Same kopie zapasowe są w każdym planie: codziennie na Free i City, co godzinę na Metro, szyfrowane na twojej maszynie kluczem, którego FiveDock nigdy nie widzi. Na Free i City przywracasz cały serwer, a jedną tabelę albo jednego gracza na Metro.

Częste pytania

Czy da się przywrócić jednego gracza w FiveM bez cofania serwera?

Tak. Wczytaj kopię sprzed problemu do osobnej bazy i skopiuj wiersze tej postaci: players na QBCore albo users na ESX, plus jej auta i schowki. FiveDock Metro robi to z panelu, po jednym graczu, i najpierw pokazuje, ile wierszy zmieni.

Jak znaleźć zdublowane przedmioty na serwerze FiveM?

Szukaj unikalnych numerów seryjnych, które ktoś ma więcej niż raz. ox_inventory trzyma numer broni w metadata.serial, więc zapytanie z JSON_TABLE po kolumnie z ekwipunkiem pokaże każdy numer z więcej niż jedną kopią. Alerty o duplikatach przedmiotów w FiveDock robią to sprawdzenie za ciebie i piszą na Discorda.

Czy przywrócenie gracza usunie przedmioty zdobyte po kopii?

Tak. Przywracanie na poziomie wierszy wstawia całą kolumnę taką, jaka była w chwili kopii. Wybierz najnowszą kopię sprzed problemu i powiedz graczowi, do której godziny przywróciłeś.

Co, jeśli gracz jest online w trakcie przywracania?

Framework zapisze to, co trzyma w pamięci, przy następnym zapisie albo przy rozłączeniu, i nadpisze przywrócenie. Wyrzuć gracza z serwera albo poczekaj, aż wyjdzie.

Wszystkie artykuły