FiveM Garage: owned_vehicles und player_vehicles, fehlende Autos behoben
Fahrzeuge fehlen in der Garage? Wie die ESX owned_vehicles und QBCore player_vehicles Tabellen funktionieren, die stored und state Spalten, und das SQL, um Autos außer Kontrolle zu beheben.
Typische Symptome:
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.Fast jedes Garage-Skript liest das Gleiche: eine Tabelle mit einer Zeile pro eigenem Fahrzeug. Wenn ein Auto fehlt, ist die Zeile falsch, nicht das Skript. Dieser Artikel erklärt die zwei Standard-Tabellen, was die stored- und state-Spalten bedeuten, und das SQL, das die üblichen Fälle behebt.
Die zwei Tabellen
ESX verwendet owned_vehicles. QBCore und QBox verwenden player_vehicles. Die Namen sind auf allen Servern gleich, die genauen Spalten hängen von deiner Version und deinem Garage-Skript ab, also schau zuerst auf deine:
DESCRIBE owned_vehicles;
DESCRIBE player_vehicles;ESX: owned_vehicles
Die Haupt-Spalten in ESX Legacy:
| Spalte | Inhalt |
|---|---|
owner |
Der ESX-Identifier des Spielers |
plate |
Das Kennzeichen, eindeutig pro Auto |
vehicle |
Ein JSON-Text mit den Fahrzeug-Eigenschaften |
type |
car, boat, aircraft... |
stored |
1 in der Garage, 0 draußen in der Welt |
job |
Gesetzt für Job-Fahrzeuge, ansonsten leer |
Garage-Skripte fügen ihre eigenen Spalten hinzu, zum Beispiel für den Garage-Namen oder einen Pfand-Zustand.
QBCore und QBox: player_vehicles
| Spalte | Inhalt |
|---|---|
citizenid |
Der Charakter, der das Auto besitzt |
license |
Der Spieler-License-Identifier |
vehicle |
Der Modell-Name |
hash |
Der Modell-Hash |
mods |
Ein JSON-Text mit den Fahrzeug-Eigenschaften |
plate |
Das Kennzeichen |
garage |
Die Garage-ID, zu der das Auto gehört |
state |
0 draußen, 1 garaged, 2 gepfändet |
fuel, engine, body |
Zuletzt gespeicherte Werte |
QBox verwendet die gleiche Tabelle mit den gleichen Ideen. Andere Spalten, wie Finanz-Daten, variieren.
Eigenschaften als JSON
Die vehicle-Spalte auf ESX und die mods-Spalte auf QBCore halten das Aussehen und Tuning des Autos als JSON: Farben, Mods, Räder, Kennzeichen, Extras, Neon und so weiter. Eine Garage liest es, wenn du das Auto herausnimmst, und schreibt es erneut, wenn du es lagerst.
-- when storing, on the client
local props = lib.getVehicleProperties(vehicle)
TriggerServerEvent('my_garage:store', plate, json.encode(props))Das JSON muss gültig sein. Wenn ein Skript einen gebrochenen String schrieb, kann das Auto nicht restauriert und spawnt Stock oder gar nicht. Der Artikel über vehicle properties zeigt, wie man sie baut und anwendet.
Fahrzeuge fehlen in der Garage
Führe diese der Reihe nach aus.
1. Die Zeile existiert, gehört aber zu jemand anderem
Die Garage-Liste filtert nach Besitzer. Wenn der Besitzer-Wert nicht der ist, den der Server für deinen Charakter verwendet, ist die Zeile unsichtbar:
SELECT owner, plate, stored FROM owned_vehicles WHERE plate = 'MIC 001';SELECT citizenid, license, plate, state FROM player_vehicles WHERE plate = 'MIC 001';Vergleiche den Besitzer mit deinem echten Charakter:
- ESX: der Identifier in
users.identifierfür diesen Charakter. Mit einem Mehrfach-Charakter-Skript kann es einen Präfix wiechar1:haben, und ein Auto, das gekauft wurde, bevor du Mehrfach-Charakter installiert hast, hat den alten Wert ohne es. - QBCore und QBox: die
citizenidin derplayers-Tabelle.
Nach einer Framework-Änderung, einem Import von einem anderen Server oder einem manuellen Insert ist dies die häufigste Ursache. Behebe es, indem du die Zeile auf den richtigen Wert hinweist:
UPDATE owned_vehicles SET owner = 'char1:abcdef...' WHERE plate = 'MIC 001';
UPDATE player_vehicles SET citizenid = 'ABC12345' WHERE plate = 'MIC 001';Ersetze die Werte mit den echten aus deinen Tabellen.
2. Der state ist außer Kontrolle „raus"
Ein Auto, das du herausnommen hast und das nie zurückkam, zum Beispiel nach einem Absturz oder einem Neustart, bleibt als raus markiert. Die Garage listet nur gelagerte Autos auf.
ESX, setze das stored-Flag zurück:
UPDATE owned_vehicles SET `stored` = 1 WHERE `stored` = 0;QBCore und QBox, setze den state auf garaged:
UPDATE player_vehicles SET state = 1 WHERE state = 0;Achtung: auf einem Live-Server lagert dies auch Autos, die Spieler gerade fahren. Führe es beim Start aus, oder begrenzen Sie es mit einem
WHEREauf ein Kennzeichen oder einen Besitzer.
Viele Server führen eine automatische Bereinigung wie diese durch, wenn die Ressource startet, da nach einem Neustart kein Fahrzeug noch draußen sein kann. Wenn deiner das nicht tut, kannst du es selbst tun:
-- 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)Beachte die Backticks um stored in der ESX-Abfrage: stored ist ein reserviertes Wort in MySQL und schlägt ohne sie fehl. Einige Skripte senden diese Autos dann in einen Pfand-Zustand anstelle der Garage, also überprüfe, was deine Garage erwartet.
3. Die Garage-ID passt nicht
Auf QBCore sagt die garage-Spalte, in welcher Garage das Auto lebt. Eine Garage, die in deiner Konfiguration benannt ist, aber nicht in der Zeile, oder eine umbenannte Garage, zeigt nichts. Auflisten der verwendeten Werte:
SELECT garage, COUNT(*) FROM player_vehicles GROUP BY garage;Setze die Autos auf eine Garage, die in deiner Konfiguration existiert.
4. Der Auto-Typ passt nicht
Garage-Skripte trennen Autos, Boote und Flugzeuge nach der type-Spalte oder der Fahrzeug-Klasse. Ein Boot, das als car gespeichert ist, zeigt sich nie in der Boots-Garage.
Kennzeichen
Das Kennzeichen verbindet die Welt, die Datenbank und die Schlüssel. Halte diese Regeln ein:
- Das Kennzeichen ist eindeutig pro Zeile. Ein Duplikat führt dazu, dass das falsche Auto geladen wird.
- Das Kennzeichen ist höchstens 8 Zeichen im Spiel, die Spalte kann auf ESX länger sein.
- Leerzeichen zählen.
MIC 001undMIC001sind zwei Kennzeichen, also verwende ein Format.
Für Schlüssel, siehe vehicle keys.
Füge ein Auto einem Spieler per SQL hinzu
Du kannst ein Fahrzeug durch das Einfügen einer Zeile geben. Nimm die Spaltenliste von deiner eigenen DESCRIBE, da eine fehlende erforderliche Spalte das Insert fehlschlagen lässt:
INSERT INTO owned_vehicles (owner, plate, vehicle, type, `stored`)
VALUES ('identifier-here', 'MIC 001', '{"model":-1130810103,"plate":"MIC 001"}', 'car', 1);Das model im JSON ist der Modell-Hash, nicht der Name. Dein Framework oder deine Garage hat normalerweise einen Befehl oder eine Funktion, die das ordnungsgemäß macht, was der sicherere Weg ist, wenn er existiert.
Checkliste
| Symptom | Lösung |
|---|---|
| Garage sagt keine Fahrzeuge | Überprüfe, dass owner oder citizenid deinem Charakter entspricht |
| Auto außer Kontrolle nach Absturz oder Neustart | UPDATE das stored-Flag oder state zurück zu garaged, idealerweise beim Start |
| Gekauftes Auto wird nicht angezeigt | Überprüfe, dass die Zeile existiert, der Besitzer und die Garage oder Typ |
stored-Abfrage gibt einen Syntax-Fehler |
Lege Backticks um stored |
| Auto lädt ohne Mods | Überprüfe, dass das vehicle oder mods JSON gültig und nicht leer ist |
| Falsches Auto lädt | Suche nach doppelten Kennzeichen |
| Boot oder Flugzeug fehlt | Überprüfe, dass die type-Spalte der Garage entspricht |
Kurze Antworten
Warum ist mein Auto nicht in der Garage?
Entweder ist die Reihe nicht mit deinem Charakter verknüpft (falscher Besitzer oder citizenid), oder das Auto wird als raus markiert. Überprüfe die Eigentümer-Spalte und die stored- oder state-Spalte in der Datenbank.
Was bedeutet state in player_vehicles?
Auf QBCore und QBox ist state eine Zahl: 0 bedeutet, das Auto ist in der Welt, 1 bedeutet, es ist in einer Garage, 2 bedeutet, es ist gepfändet. Ein Auto, das bei 0 steckt, wird nicht in der Garage-Liste angezeigt.
Wie bringe ich jedes Auto zurück in die Garage?
Führe ein UPDATE aus, das die stored-Flag oder state auf den garaged-Wert für die Reihen setzt, die draußen sind. Es ist am besten, es beim Server-Start auszuführen, da kein Auto wirklich draußen sein kann, nachdem es neu gestartet wurde.
Scripts ohne dieses Problem
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →
Chameleon Paints82 schillernde Chamäleon-Lacke in einem Menü, per Klick aufgetragen.Script ansehen →
Car BombPlatziere, finde und entschärfe Autobomben — mit Zünder-Handy und C4-Minispiel.Script ansehen →