FiveM-Fahrzeugschlüssel: Kannst du dein eigenes Auto nicht fahren oder sperren? Behebe es

Wie FiveM-Fahrzeugschlüsselsysteme funktionieren: Plattenlisten, Schlüssel nach einem Spawn oder Kauf geben, mit SetVehicleDoorsLocked sperren und warum du den Zugriff auf dein eigenes Auto verlierst.

Typische Symptome:

text
You get in your own car: "Vehicle is locked", the engine will not start,
or the key script says you do not have the keys.

Ein Auto, das gestern funktioniert hat und jetzt für seinen Besitzer gesperrt ist, ist fast immer ein Schlüssellisten-Problem, kein Spiel-Bug. Dieser Artikel erklärt, wie Schlüsselsysteme funktionieren, wie man Schlüssel nach einem Spawn oder einem Kauf gibt und was man überprüft, wenn man sein eigenes Fahrzeug nicht fahren kann.

Wie ein Schlüsselsystem funktioniert

Das Spiel selbst hat keine Schlüssel. Es hat nur einen Sperrzustand auf jedem Fahrzeug. Eine Schlüsselressource fügt den Rest oben drauf:

  1. Es speichert, welche Platten jeder Spieler einen Schlüssel für hat. Die Platte ist die Identität des Autos, da sich das Entity-Handle jedes Mal ändert, wenn das Auto gespawnt wird.
  2. Es sperrt oder entsperrt das Fahrzeug mit Natives.
  3. Es blockiert den Motor, oder die Tür, für Spieler, die nicht auf der Liste sind.

Das Lock-Native ist Client-Seite:

lua
-- 1 = unlocked, 2 = locked
SetVehicleDoorsLocked(vehicle, 2)

local status = GetVehicleDoorLockStatus(vehicle)
print(status)

SetVehicleDoorsLocked setzt den Zustand und GetVehicleDoorLockStatus liest ihn zurück. Neben 1 und 2 gibt es andere Zustände, wie einen, der das Auto nur für den Spieler sperrt. Für eine einfache Sperrung und Entsperrung brauchst du nur diese zwei.

Tipp: Das Sperren eines Autos hindert einen Spieler nicht daran, ein Fenster zu zerbrechen oder den Fahrer aus einem unverschlossenen NPC-Auto zu ziehen. Alles über den Sperrzustand hinaus ist Sache des Schlüsselskripts.

Wem gehört die Liste

Wo die Liste lebt, entscheidet, was nach einem Neustart bricht:

  • Nur Speicher. Die Liste wird neu aufgebaut, wenn ein Spieler beitritt, von den Fahrzeugen, die er in der Datenbank besitzt. Wenn das Skript neu startet, während du spielst, ist die Liste leer, bis du dich erneut verbindest.
  • Datenbank- oder elementbasiert. Schlüssel sind Gegenstände im Inventar, mit der Platte in den Gegenstandsmetadaten. Der Schlüssel überlebt einen Neustart, aber eine geänderte Platte bricht ihn.
  • Besitzer-Überprüfung. Das Skript vergleicht den Spieler-Identifier mit dem Besitzer der Platte in owned_vehicles (ESX) oder player_vehicles (QBCore und QBox). Es existiert keine separate Liste.

Finde heraus, welche deine Ressource verwendet, bevor du debuggst. Der Artikel zum Speichern eigener Fahrzeuge in der Datenbank behandelt die Tabellen, die die meisten Schlüsselskripte lesen.

Gebe Schlüssel nach einem Spawn oder einem Kauf

Wann immer dein eigenes Skript ein Fahrzeug für einen Spieler erstellt, weiß die Schlüsselressource nicht davon. Du musst es mitteilen, in dieser Reihenfolge:

  1. Erstelle das Fahrzeug.
  2. Setze die Platte mit SetVehicleNumberPlateText.
  3. Rufe den Export oder das Event der Schlüsselressource mit dieser Platte auf.
lua
local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
SetVehicleNumberPlateText(vehicle, plate)

-- the name of this call depends on your key resource: check its documentation
exports['your_key_resource']:GiveKeys(plate)

your_key_resource und GiveKeys sind Platzhalter. Der echte Name ist in der Dokumentation der Ressource, die du verwendest. Wenn es ein Event ist, gilt die gleiche Regel: Gib die Platte, nicht das Entity-Handle.

Für einen Kauf muss die Platte mit der neuen Reihe in der Datenbank gespeichert werden, und Schlüssel zum gleichen Zeitpunkt gegeben werden, oder der Käufer fährt aus dem Autohaus mit einem Auto, das nicht mehr mit irgendetwas übereinstimmt. Siehe Fahrzeuge spawnen für die Platten-Handhabung.

Knacken und Hot-Wiring

Das sind Funktionen des Schlüsselskripts, nicht des Spiels. Die übliche Logik ist:

  • Ein Spieler, der nicht auf der Schlüsselliste ist, versucht, ein gesperrtes Auto zu betreten. Das Skript führt eine Geschicklichkeitsprüfung oder eine Fortschrittsleiste aus.
  • Bei Erfolg entsperrt es das Auto mit SetVehicleDoorsLocked(vehicle, 1). Zum Hot-Wiring lässt es auch den Motor für diese Sitzung starten, normalerweise indem es sich die Platte in einer temporären Liste merkt.
  • Bei Fehler kann es die Polizei alarmieren oder das Werkzeug brechen.

Wenn du deins baust, halte die Ergebnisentscheidung auf dem Server. Ein Client, der allein entscheidet, ob er ein beliebiges Auto entsperren darf, kann mit einem Mod-Menü missbräuchlich verwendet werden.

Kann dein eigenes Auto nicht fahren

Gehe diese Ursachen in Ordnung durch:

Die Schlüsselliste wurde verloren. Ein Skript-Neustart, ein Absturz oder ein refresh; restart der Schlüsselressource leert eine speichergestützte Liste. Verbinde dich erneut, oder löse die eigene Aktualisierung des Skripts aus.

Die Platte änderte sich. Eine Platte wird an drei Orten gespeichert: das Fahrzeug im Spiel, die Schlüsselliste oder das Schlüsselelement und die Datenbankzeile. Wenn ein Skript eine von ihnen ändert (ein Plattenänderungsgerät, ein gefälschtes Plattenelement, ein Tuning-Skript) stimmen die anderen nicht mehr überein. Vergleiche die Platte auf dem Bildschirm mit der in deiner Tabelle:

sql
SELECT owner, plate FROM owned_vehicles WHERE plate LIKE '%MIC%';

Platten unterscheiden sich auch in Leerzeichen. MIC 001 und MIC001 sind zwei verschiedene Platten für die meisten Skripte, daher trimme und vergleiche im gleichen Format überall.

Der falsche Besitzer. Die Zeile hat einen alten Identifier oder citizenid, daher schlägt die Besitzerprüfung fehl. Das ist die gleiche Ursache wie ein fehlendes Auto aus der Garage.

Das Auto wurde von einem anderen Skript gespawnt. Alles, das ohne einen Schlüsselaufruf erstellt wurde, ist für alle gesperrt. Füge den Schlüsselaufruf hinzu, wo es gespawnt wird.

Zwei Schlüsselressourcen. Das Ausführen von zwei Schlüsselskripten, die beide das Auto sperren, lässt es zwischen Zuständen flippen. Halte einen.

Teste schnell im Spiel

Wenn du am Sperrzustand selbst zweifelst, liest ihn vom Client:

lua
RegisterCommand('lockstate', function()
    local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
    if vehicle == 0 then return end
    print('lock status', GetVehicleDoorLockStatus(vehicle), GetVehicleNumberPlateText(vehicle))
end, false)

Es druckt den Zustand und die Platte. Wenn der Zustand 1 ist und du immer noch nicht fahren kannst, blockiert das Schlüsselskript den Motor, nicht die Sperre.

Checkliste

Symptom Behebung
Nach einem Neustart gesperrt Die Schlüsselliste ist im Speicher: Verbinde dich erneut oder lass das Skript sie von eigenen Fahrzeugen neu aufbauen
Gespawntes Auto ist für dich gesperrt Rufe den Export oder das Event der Schlüsselressource mit der Platte nach SetVehicleNumberPlateText auf
Auto gekauft, aber keine Schlüssel Gib Schlüssel zum Kaufzeitpunkt und speichere die gleiche Platte in der Datenbank
Schlüssel funktionieren nicht mehr nach Plattenänderung Aktualisiere die Platte im Spiel, der Schlüsselliste und der Datenbank zusammen
Platte sieht richtig aus, aber stimmt nicht überein Überprüfe Leerzeichen und Großbuchstaben, verwende überall ein Format
Türzustand ist 1, aber der Motor bleibt aus Das Schlüsselskript blockiert den Motor: Überprüfe seine Liste, nicht die Sperre
Auto flippt zwischen gesperrt und entsperrt Zwei Schlüsselskripte laufen: Entferne eines

Kurze Antworten

Warum kann ich mein Auto nach einem Neustart nicht fahren?

Die meisten Schlüsselskripte halten die Liste der Schlüssel im Speicher. Nach einem Neustart oder einem Skript-Neustart ist die Liste leer, daher ist das Auto gesperrt oder der Motor weigert sich zu starten. Das Skript muss die Liste von deinen eigenen Fahrzeugen neu aufbauen, wenn du dich anmeldest.

Wie gebe ich Schlüssel für ein Auto, das ich mit meinem eigenen Skript gespawnt habe?

Rufe den Export oder das Event deiner Schlüsselressource mit der Platte auf, nachdem du die Platte gesetzt hast. Jedes Schlüsselskript nennt diesen Aufruf anders, daher lies stattdessen seine Dokumentation, anstatt einen Aufruf von einem anderen Server zu kopieren.

Bricht das Ändern der Platte meine Schlüssel?

Ja, auf jedem System, das Schlüssel nach Platte abgleicht. Wenn sich die Platte im Spiel ändert, aber nicht in der Schlüsselliste und der Datenbank, stimmt das Fahrzeug nicht mehr mit einem Schlüssel überein. Ändere alle drei zusammen.

Scripts ohne dieses Problem

Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →Car BombPlatziere, finde und entschärfe Autobomben — mit Zünder-Handy und C4-Minispiel.Script ansehen →Chameleon Paints82 schillernde Chamäleon-Lacke in einem Menü, per Klick aufgetragen.Script ansehen →

Weiterlesen