Garaż FiveM: owned_vehicles i player_vehicles, brakujące auta naprawione
Pojazdy brakujące z garażu? Jak działają tabele ESX owned_vehicles i QBCore player_vehicles, kolumny stored i state oraz SQL do naprawy aut utknięty na zewnątrz.
Typowe objawy:
You bought a car, and the garage says "No vehicles". Or the car was parked at the street, the server restarted, and it is gone.Prawie każdy skrypt garażu czyta to samo: jedną tabelę z wierszem na własniony pojazd. Gdy samochód brakuje, wiersz jest zły, a nie skrypt. Ten artykuł wyjaśnia dwie standardowe tabele, co oznaczają kolumny stored i state oraz SQL, który naprawia zwykłe przypadki.
Dwie tabele
ESX używa owned_vehicles. QBCore i QBox używają player_vehicles. Nazwy są takie same na wszystkich serwerach, dokładne kolumny zależą od twojej wersji i skryptu garażu, więc najpierw spójrz na swoją:
DESCRIBE owned_vehicles;
DESCRIBE player_vehicles;ESX: owned_vehicles
Główne kolumny w ESX Legacy:
| Kolumna | Zawartość |
|---|---|
owner |
Identyfikator ESX gracza |
plate |
Tablica, unikalna na samochód |
vehicle |
Tekst JSON z właściwościami pojazdu |
type |
car, boat, aircraft... |
stored |
1 w garażu, 0 na świecie |
job |
Ustawiona dla pojazdów pracy, inaczej pusta |
Skrypty garażu dodają swoje kolumny, na przykład dla nazwy garażu lub stanu zajęcia.
QBCore i QBox: player_vehicles
| Kolumna | Zawartość |
|---|---|
citizenid |
Postać, która posiada samochód |
license |
Identyfikator licencji gracza |
vehicle |
Nazwa modelu |
hash |
Skrót modelu |
mods |
Tekst JSON z właściwościami pojazdu |
plate |
Tablica |
garage |
Id garażu, do którego należy samochód |
state |
0 na zewnątrz, 1 w garażu, 2 zajęty |
fuel, engine, body |
Ostatnie zapisane wartości |
QBox używa tej samej tabeli z tymi samymi ideami. Inne kolumny, takie jak dane finansowe, różnią się.
Właściwości jako JSON
Kolumna vehicle na ESX i kolumna mods na QBCore przechowują wygląd i tunowanie samochodu jako JSON: kolory, modyfikacje, koła, tablicę, dodatki, neon i tak dalej. Garaż czyta je, gdy wysyłasz samochód, i zapisuje go ponownie, gdy go przechowujesz.
-- when storing, on the client
local props = lib.getVehicleProperties(vehicle)
TriggerServerEvent('my_garage:store', plate, json.encode(props))JSON musi być ważny. Jeśli skrypt napisał zepsuty ciąg, samochód nie można przywrócić i spawnie stock lub w ogóle. Artykuł na temat vehicle properties pokazuje, jak je budować i stosować.
Pojazdy brakujące z garażu
Uruchom to w kolejności.
1. Wiersz istnieje, ale należy do kogoś innego
Lista garażu filtruje po właścicielu. Jeśli wartość właściciela nie jest tą, którą serwer używa dla twojej postaci, wiersz jest niewidoczny:
SELECT owner, plate, stored FROM owned_vehicles WHERE plate = 'MIC 001';SELECT citizenid, license, plate, state FROM player_vehicles WHERE plate = 'MIC 001';Porównaj właściciela z twoją rzeczywistą postacią:
- ESX: identyfikator w
users.identifierdla tej postaci. Za pomocą skryptu multicharacter może nosić prefiks, taki jakchar1:, a pojazd kupiony przed zainstalowaniem multicharacter ma starą wartość bez niego. - QBCore i QBox:
citizenidw tabeliplayers.
Po zmianie frameworku, imporcie z innego serwera lub ręcznym wstawieniu, to jest najbardziej częsta przyczyna. Napraw to, wskazując wiersz na prawidłową wartość:
UPDATE owned_vehicles SET owner = 'char1:abcdef...' WHERE plate = 'MIC 001';
UPDATE player_vehicles SET citizenid = 'ABC12345' WHERE plate = 'MIC 001';Zamień wartości na rzeczywiste ze swoich tabel.
2. Stan utknął « na zewnątrz »
Samochód, który wysyłeś i który nigdy się nie wrócił, na przykład po awarii lub restarcie, pozostaje oznaczony jako na zewnątrz. Garaż wyświetla tylko przechowywane samochody.
ESX, ustaw flagę przechowywania z powrotem:
UPDATE owned_vehicles SET `stored` = 1 WHERE `stored` = 0;QBCore i QBox, ustaw stan na garaged:
UPDATE player_vehicles SET state = 1 WHERE state = 0;Ostrzeżenie: na żywym serwerze to również przechowuje samochody, które gracze prowadzą w tym momencie. Uruchom to przy starcie, lub ogranicz go za
WHEREna jedną tablicę lub jednego właściciela.
Wiele serwerów automatycznie uruchamia czyszczenie takie jak to, gdy zasób się uruchamia, ponieważ po restarcie żaden pojazd nie może być na zewnątrz. Jeśli twój nie, możesz to robić sam:
-- server side, runs when the garage resource starts
AddEventHandler('onResourceStart', function(resource)
if resource ~= GetCurrentResourceName() then return end
MySQL.update('UPDATE player_vehicles SET state = 1 WHERE state = 0')
end)Zwróć uwagę na backticki wokół stored w zapytaniu ESX: stored to zarezerwowane słowo w MySQL i zawodzi bez nich. Niektóre skrypty wysyłają te samochody do stanu zajęcia zamiast do garażu, więc sprawdzić, czego oczekuje twój garaż.
3. Id garażu nie pasuje
W QBCore kolumna garage mówi, który garaż samochód w nim mieszka. Garaż nazwany w twojej konfiguracji, który nie jest w wierszu, lub zmieniony garaż, nic nie wyświetla. Wyświetl wartości w użyciu:
SELECT garage, COUNT(*) FROM player_vehicles GROUP BY garage;Ustaw samochody do garażu, który istnieje w twojej konfiguracji.
4. Typ samochodu nie pasuje
Skrypty garażu oddzielają samochody, łodzie i samoloty wg kolumny type lub klasy pojazdu. Łódź zapisana jako car nigdy się nie pojawia w garażu łodzi.
Tablice
Tablica łączy świat, bazę danych i klucze. Trzymaj te reguły:
- Tablica jest unikalna na wiersz. Duplikat powoduje załadowanie złego samochodu.
- Tablica ma co najwyżej 8 znaków w grze, kolumna może być dłuższa na ESX.
- Spacje się liczą.
MIC 001iMIC001to dwie tablice, więc używaj jednego formatu.
Dla kluczy, patrz vehicle keys.
Dodaj samochód do gracza przez SQL
Możesz dać pojazd poprzez wstawienie wiersza. Weź listę kolumn z twojego własnego DESCRIBE, ponieważ brakująca wymagana kolumna powoduje niewprowadzenie:
INSERT INTO owned_vehicles (owner, plate, vehicle, type, `stored`)
VALUES ('identifier-here', 'MIC 001', '{"model":-1130810103,"plate":"MIC 001"}', 'car', 1);model w JSON to skrót modelu, a nie nazwa. Twój framework lub twój garaż zwykle ma polecenie lub funkcję, która robi to prawidłowo, co jest bezpieczniejszą ścieżką, gdy istnieje.
Lista kontrolna
| Objaw | Naprawa |
|---|---|
| Garaż mówi brak pojazdów | Sprawdzić, że owner lub citizenid pasuje twojej postaci |
| Samochód utknął na zewnątrz po awarii lub restarcie | UPDATE przechowuwanej flagi lub state wstecz do garaged, idealnie przy starcie |
| Kupiony samochód się nie pojawia | Sprawdzić wiersz istnieje, właściciela i garaż lub typ |
stored zapytanie daje błąd składni |
Umieść backticki wokół stored |
| Samochód ładuje się bez modów | Sprawdzić JSON vehicle lub mods jest ważny i nie pusty |
| Załadowuje się zły samochód | Szukaj duplikatów tablic |
| Łódź lub samolot brakuje | Sprawdzić kolumna type pasuje garażu |
Szybkie odpowiedzi
Dlaczego mój samochód nie jest w garażu?
Albo wiersz nie jest połączony z twoją postacią (zły właściciel lub citizenid), albo samochód jest oznaczony jako na zewnątrz. Sprawdzić kolumnę właściciela i przechowuwaną lub kolumnę stanu w bazie danych.
Co oznacza state w player_vehicles?
W QBCore i QBox, state to liczba: 0 oznacza, że samochód jest na świecie, 1 oznacza, że jest w garażu, 2 oznacza, że jest zajęty. Samochód utknięty na 0 nie pojawia się na liście garażu.
Jak włożyć każdy samochód z powrotem do garażu?
Uruchom jedno UPDATE, które ustawia przechowaną flagę lub stan na wartość w garażu dla wierszy, które są na zewnątrz. Najlepiej uruchomić to przy starcie serwera, ponieważ żaden samochód nie może być naprawdę na zewnątrz po restarcie.
Skrypty bez tego problemu
Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →
Chameleon Paints82 lakiery kameleon zmieniające kolor, w jednym menu — klik i gotowe.Zobacz skrypt →
Car BombPodkładaj, wykrywaj i rozbrajaj bomby w autach — z telefonem-detonatorem i minigrą C4.Zobacz skrypt →