Dokumentation

Pepper Keys

Fahrzeugschlüssel als echte Items mit ox_inventory – wer den Schlüssel hat, fährt das Auto. Mit Schlüsseldienst, Schloss tauschen und Kurzschließen.

Überblick

Pepper Keys macht den Fahrzeugschlüssel zu einem echten Item. Wer den Schlüssel im Inventar hat, schließt auf und startet den Motor, auch wenn er ihn gestohlen hat. Der Besitzer ohne Schlüssel kommt dagegen nicht weiter. Gestohlen? Beim Schlüsseldienst das Schloss tauschen, dann sind alle alten Schlüssel wertlos. Ohne Schlüssel bleibt nur das Kurzschließen mit Mini-Spiel, Werkzeug und Alarm.

Gesperrt sind nur Spielerfahrzeuge. Fahrzeuge aus Job-Scripts bleiben frei fahrbar, du musst dort nichts anpassen.

  • Schlüssel als ox_inventory-Item mit Kennzeichen und Fahrzeugname
  • Schloss tauschen macht alte Schlüssel wertlos, Ersatzschlüssel beim Schlüsseldienst
  • Kurzschließen mit Mini-Spiel, Werkzeug, Alarm und Schwierigkeit je Fahrzeugklasse
  • Läuft mit jedem Garagen-Script, das die Fahrzeugtabelle des Frameworks nutzt
  • Team-Befehl /pkeys, vier Server-Exporte und ein Alarm-Event für dein Dispatch-Script

Voraussetzungen

Abhängigkeit Pflicht/optional Wofür Link
FiveM-Server ab Build 7290 Pflicht Laut fxmanifest.lua (/server:7290) https://runtime.fivem.net/artifacts/fivem/
OneSync Pflicht Fahrzeuge und Statebags auf dem Server https://docs.fivem.net/docs/scripting-reference/onesync/
ESX Legacy, QBCore oder Qbox Pflicht Besitzer, Geld, Polizei-Jobs (automatische Erkennung) https://github.com/esx-framework/esx_core · https://github.com/qbcore-framework/qb-core · https://github.com/Qbox-project/qbx_core
ox_inventory Pflicht Der Schlüssel ist ein ox_inventory-Item https://github.com/overextended/ox_inventory
ox_lib Pflicht Hilfsfunktionen, Tastenbelegung https://github.com/overextended/ox_lib
oxmysql Pflicht Tabelle pepper_keys_locks https://github.com/overextended/oxmysql
Garagen-Script optional Ausparken/Einparken, solange es die Fahrzeugtabelle des Frameworks nutzt –
Dispatch-Script optional Autoalarm an die Leitstelle melden (bridge/server/dispatch.lua) –

Ohne Framework oder ohne laufendes ox_inventory bleibt Pepper Keys inaktiv und meldet das in der Server-Konsole.

Installation

  1. Ordner nach resources/[pepper]/pepper_keys kopieren.

    Ordnernamen nicht umbenennen. Andere Scripts rufen exports.pepper_keys auf, das funktioniert nur mit dem Namen pepper_keys.

  2. Den Eintrag aus install/items/ox_inventory.txt in ox_inventory/data/items.lua einfügen.

  3. install/images/pepper_carkey.png nach ox_inventory/web/images kopieren.

  4. In der server.cfg nach Framework, oxmysql, ox_lib und ox_inventory:

ensure oxmysql
ensure ox_lib
ensure es_extended   # oder qb-core / qbx_core
ensure ox_inventory
ensure pepper_keys

add_ace group.admin pepper.keys.admin allow
  1. Server starten. In der Konsole steht „Pepper Keys 1.0.0 gestartet (esx)“ (bzw. dein Framework).

Datenbank: Die Tabelle pepper_keys_locks legt das Script beim Start selbst an (server/db.lua). Die Datei install/pepper_keys.sql mit demselben Inhalt brauchst du nur, wenn dein Datenbank-Benutzer keine Tabellen anlegen darf. Dann importierst du sie einmal per HeidiSQL oder phpMyAdmin.

Items je Inventar:

Inventar Item Datei Bild
ox_inventory pepper_carkey (Gewicht 50, nicht stapelbar) install/items/ox_inventory.txt → ox_inventory/data/items.lua install/images/pepper_carkey.png → ox_inventory/web/images

Andere Inventare werden nicht unterstützt. Der Item-Eintrag hat eine deutsche Bezeichnung. Auf englischen Servern label und description in items.lua anpassen.

Erster Test

  1. Als Admin /pkeys give <Kennzeichen> für ein eigenes Fahrzeug eingeben. Der Schlüssel liegt im Inventar.
  2. Am Fahrzeug U drücken: Es schließt ab oder auf, mit Lichtsignal.
  3. Einsteigen: Mit Schlüssel springt der Motor an. Schlüssel ablegen, aussteigen und wieder einsteigen: Der Motor bleibt aus.
  4. Ohne Schlüssel und mit einem lockpick im Inventar K drücken und das Mini-Spiel spielen.
  5. Zum Schlüsseldienst (Standard bei -205.5, -1313.3) fahren und mit E einen Ersatzschlüssel holen.

Konfiguration

Datei Steuert
config/config.lua Sprache, Framework, Admin-Gruppen, Item, Tasten, Reichweite, Konten, Kurzschließen, Schlüsseldienst
config/server.lua Admin-ACE, Discord-Webhook für Team-Aktionen (wird nicht an Clients gesendet)
locales/de.json, locales/en.json Alle Texte im Spiel
bridge/server/dispatch.lua Anbindung an dein Dispatch-Script

Grundeinstellungen

Config.Locale = 'de'
Config.Framework = 'auto'
Config.Item = 'pepper_carkey'
Config.Range = 15.0
Config.PayAccounts = { 'bank', 'money' }
Option Standard Beschreibung
Config.Locale 'de' 'de' oder 'en'
Config.Framework 'auto' auto, esx, qbcore, qbox
Config.Debug false Zusätzliche Ausgaben in der Konsole
Config.AdminGroups { 'admin', 'superadmin', 'god' } Framework-Gruppen mit Adminrecht (zusätzlich zur ACE)
Config.AdminCommand 'pkeys' Name des Team-Befehls
Config.Item 'pepper_carkey' Item-Name des Schlüssels
Config.Range 15.0 Reichweite beim Abschließen in Metern
Config.LockKey / HotwireKey / InteractKey U / K / E Standardtasten
Config.PayAccounts { 'bank', 'money' } Reihenfolge der Konten beim Bezahlen

Kurzschließen

Config.Hotwire = {
    Enabled = true,
    Item = 'lockpick',
    ItemBreakChance = 40,
    AlarmChance = 70,
    Cooldown = 30,
    MinPolice = 0,
    PoliceJobs = { 'police', 'sheriff' },
}
Option Standard Beschreibung
Enabled true Kurzschließen an/aus
Item 'lockpick' Werkzeug, false = keines nötig
ItemBreakChance 40 Prozent, dass das Werkzeug bei Misserfolg bricht
AlarmChance 70 Prozent für den Autoalarm
Cooldown 30 Sekunden Wartezeit nach einem Fehlversuch
MinPolice 0 So viele Personen aus PoliceJobs müssen im Dienst sein
Range 3.0 Abstand zum Fahrzeug
AlarmSeconds 30 Dauer der Sirene
Levels easy 3/22, medium 4/16, hard 5/11 Treffer (rounds) und Größe der Trefferzone in Prozent (width)
Classes Klassen 2–5 medium, 6–7 hard GTA-Fahrzeugklasse → Stufe, sonst easy

Schlüsseldienst

Config.Locksmith = {
    CopyFee = 500,
    LockFee = 2500,
    FirstFree = true,
    Places = {
        { label = 'Schlüsseldienst', coords = vec3(-205.5, -1313.3, 31.3), radius = 3.0, blip = true },
    },
}
Option Standard Beschreibung
CopyFee 500 Ersatzschlüssel
LockFee 2500 Schloss tauschen inkl. neuem Schlüssel
FirstFree true Erster Schlüssel für Bestandsfahrzeuge kostenlos
Places 1 Ort Orte mit Bezeichnung, Koordinaten, Radius und Blip

Server

Option Standard Beschreibung
ServerConfig.AdminAce 'pepper.keys.admin' ACE für den Team-Befehl
ServerConfig.Webhook '' Discord-Webhook für Team-Aktionen ('' = aus)
ServerConfig.WebhookName 'Pepper Keys' Absendername im Webhook

So funktioniert es

Eingabe Zweck
U Nächstes Fahrzeug ab- oder aufschließen (Reichweite Config.Range)
K Kurzschließen, am Fahrersitz oder an der Tür
E Schlüsseldienst öffnen
  • Einsteigen: Als Fahrer fragt das Script einmal beim Server nach. Mit passendem Schlüssel springt der Motor an, sonst bleibt er aus.
  • Schlüssel weitergeben: Einfach das Item übergeben. Wer es hält, darf fahren.
  • Läuft der Motor schon, läuft er weiter, auch wenn der Schlüssel abgenommen wird.
  • Ein Schlüssel zeigt im Inventar Kennzeichen und Fahrzeugname.

Schlüsseldienst

Der Schlüsseldienst hilft nur dem Besitzer laut Fahrzeugtabelle des Frameworks.

  • Ersatzschlüssel: gegen Gebühr (Config.Locksmith.CopyFee), passt zum aktuellen Schloss.
  • Schloss tauschen: gegen Gebühr (Config.Locksmith.LockFee), du bekommst einen neuen Schlüssel. Alle alten Schlüssel passen nicht mehr.
  • Bestandsfahrzeuge: Fahrzeuge aus der Zeit vor Pepper Keys haben noch keinen Schlüssel. Der erste ist kostenlos (Config.Locksmith.FirstFree).

Passt der Schlüssel nicht mehr ins Inventar, bekommt der Spieler sein Geld zurück.

Kurzschließen

  • Nur ohne passenden Schlüssel, mit Werkzeug Config.Hotwire.Item (Standard lockpick, false = keines nötig).
  • Mini-Spiel: Leertaste drücken, wenn die Nadel in der Zone ist. Die Schwierigkeit hängt von der Fahrzeugklasse ab (Config.Hotwire.Levels, Classes).
  • Erfolg: Fahrzeug offen, Motor startet, bis es eingeparkt oder gelöscht wird.
  • Misserfolg: Wartezeit (Cooldown) und Chance, dass das Werkzeug bricht (ItemBreakChance).
  • Alarm mit Chance AlarmChance: Sirene am Fahrzeug und Server-Event pepper_keys:alarm.
  • Mindestzahl Polizei im Dienst: MinPolice mit den Jobs aus PoliceJobs.

Garagen-Scripts

Pepper Keys liest nur die Fahrzeugtabelle des Frameworks (owned_vehicles bei ESX, player_vehicles bei QBCore und Qbox) und schreibt dort nichts. Damit läuft es mit jedem Garagen-Script, das diese Tabelle nutzt. Beim Ausparken entsteht kein neuer Schlüssel, der Spieler nimmt seinen vorhandenen Schlüssel mit.

Garagen-Script Framework Tabelle
esx_garage ESX owned_vehicles
qb-garages QBCore player_vehicles
qbx_garages Qbox player_vehicles
JG Advanced Garages ESX, QBCore, Qbox Fahrzeugtabelle des Frameworks
cd_garage ESX, QBCore Fahrzeugtabelle des Frameworks
okokGarage ESX, QBCore Fahrzeugtabelle des Frameworks
loaf_garage, renzu_garage ESX owned_vehicles
OP Garages v3 (OTHERPLANET) ESX, QBCore, Qbox Fahrzeugtabelle des Frameworks (laut Doku)

Die Liste folgt aus der genutzten Tabelle. Mit den fremden Scripts haben wir Pepper Keys nicht einzeln getestet. Nutzt dein Garagen-Script eine eigene Tabelle, sind seine Fahrzeuge nicht gesperrt.

Nur ein Schlüssel-Script: Entferne andere Schlüssel-Scripts (z. B. qb-vehiclekeys, qbx_vehiclekeys, wasabi_carlock). Hat dein Garagen-Script eine Einstellung für das Schlüssel-System, stell sie auf „keins“ oder trag dort die Exporte von Pepper Keys ein.

OP Garages v3: Ausparken und Einparken laufen ohne Anpassung, OP Garages vergibt dabei keinen Schlüssel (Config.KeysDependency fällt auf none). Kaufverträge, Fake-Kennzeichen sowie Job- und Gang-Fahrzeuge brauchen eine eigene Anbindung in den „editable“-Dateien von OP Garages: Nach einem Vertrag ChangeLock + CreateKey für den neuen Besitzer aufrufen, damit der alte Schlüssel nicht mehr passt.

Andere Scripts, die selbst Schlüssel vergeben sollen (Autohaus, Vermietung, Fuhrpark), rufen die Exporte unten auf.

Befehle und Rechte

Befehl Wer Was
/pkeys give <Kennzeichen> Admin Schlüssel erzeugen
/pkeys lock <Kennzeichen> Admin Schloss tauschen (alte Schlüssel wertlos)
/pkeys open <Kennzeichen> Admin Fahrzeug aufschließen

Rechte: Admin = ACE pepper.keys.admin (ServerConfig.AdminAce) oder eine Gruppe aus Config.AdminGroups. Der Befehl funktioniert nur im Spiel, nicht in der Server-Konsole. Jede Aktion geht ins Log, auf Wunsch auch an einen Discord-Webhook (ServerConfig.Webhook). Der Befehlsname steht in Config.AdminCommand.

Tasten: U abschließen, K kurzschließen, E Schlüsseldienst. Spieler können sie in den FiveM-Einstellungen (Tastenbelegung → FiveM) ändern, die Standardwerte stehen in Config.LockKey, HotwireKey und InteractKey.

Exports und Events

Server-Exporte:

exports.pepper_keys:CreateKey(src, plate, label) -- Schlüssel ins Inventar legen
exports.pepper_keys:HasKey(src, plate)           -- hat der Spieler einen passenden Schlüssel?
exports.pepper_keys:ChangeLock(plate)            -- neues Schloss, alte Schlüssel wertlos
exports.pepper_keys:RemoveKeys(src, plate)       -- Schlüssel zu diesem Kennzeichen abnehmen

Events:

Event Seite Daten Zweck
pepper_keys:alarm Server { plate, coords } Autoalarm beim Kurzschließen, z. B. für dein Dispatch-Script
AddEventHandler('pepper_keys:alarm', function(data)
    print(('Autoalarm: %s bei %.1f, %.1f'):format(data.plate, data.coords.x, data.coords.y))
end)

Eine eigene Dispatch-Anbindung trägst du alternativ in bridge/server/dispatch.lua ein (offene Datei).

FAQ

Pepper Keys startet nicht oder bleibt inaktiv – was tun?

ox_inventory, ox_lib, oxmysql und dein Framework müssen vor pepper_keys starten. Ohne ESX, QBCore oder Qbox oder ohne laufendes ox_inventory meldet das Script „bleibt inaktiv“ in der Konsole.

Der Schlüssel hat kein Bild im Inventar.

install/images/pepper_carkey.png nach ox_inventory/web/images kopieren und den Server neu starten.

Mein eigenes Auto lässt sich nicht starten.

Fahrzeuge aus der Zeit vor Pepper Keys haben noch keinen Schlüssel. Hol ihn beim Schlüsseldienst, der erste ist kostenlos (Config.Locksmith.FirstFree).

Ein Job-Fahrzeug ist gesperrt.

Gesperrt ist nur, was in der Fahrzeugtabelle des Frameworks oder in pepper_keys_locks steht. Prüfe, ob das Kennzeichen dort eingetragen ist.

„Dir fehlt das passende Werkzeug“ beim Kurzschließen.

Das Item aus Config.Hotwire.Item (Standard lockpick) muss im Inventar liegen. Mit Item = false geht es ohne Werkzeug.

/pkeys tut nichts.

Setze die ACE aus der Installation (add_ace group.admin pepper.keys.admin allow) oder trag deine Gruppe in Config.AdminGroups ein. In der Server-Konsole ist der Befehl ohne Wirkung.

Muss ich die SQL-Datei importieren?

Nein. Die Tabelle pepper_keys_locks entsteht beim Start automatisch. install/pepper_keys.sql ist nur für Datenbank-Benutzer ohne Recht zum Anlegen von Tabellen.

Läuft Pepper Keys mit qs-inventory oder qb-inventory?

Nein, der Schlüssel ist ein ox_inventory-Item mit Metadaten. Ohne ox_inventory bleibt das Script inaktiv.

Kann ich Pepper Keys zusammen mit qb-vehiclekeys nutzen?

Nein, nutze nur ein Schlüssel-Script. Entferne andere (qb-vehiclekeys, qbx_vehiclekeys, wasabi_carlock), sonst sperren oder entsperren sie sich gegenseitig.

Wie gibt mein Autohaus- oder Vermietungs-Script einen Schlüssel aus?

Über den Server-Export exports.pepper_keys:CreateKey(src, plate, label). Beim Weiterverkauf erst ChangeLock(plate), dann CreateKey für den neuen Besitzer.

Wie ändere ich Texte oder die Sprache?

Sprache über Config.Locale ('de' oder 'en'), Texte in locales/de.json bzw. locales/en.json. Den Namen des Items änderst du in ox_inventory/data/items.lua.

Wie verschiebe ich den Schlüsseldienst oder lege weitere an?

In Config.Locksmith.Places die coords ändern oder weitere Einträge mit label, coords, radius und blip ergänzen.

Können Cheater die Motorsperre umgehen?

Die Motorsperre läuft im Client und ist für Cheater umgehbar. Abschließen, Besitz, Item-Prüfung, Gebühren und Kurzschließen prüft der Server.

Wie melde ich den Autoalarm an mein Dispatch-Script?

Hör auf das Server-Event pepper_keys:alarm oder trag den Aufruf deines Dispatch-Scripts in bridge/server/dispatch.lua ein.

Support

Discord → Ticket (Kategorie „Script Support“) unter https://discord.gg/6NaFJWKDYu, Kauf vorher mit /verify verknüpfen.

Permanent auf dem Dev-Server von Pepper Scripts getestet.

Changelog

Aktuell: 1.0.0 (08.11.2026), erste Veröffentlichung. Alle Änderungen stehen in CHANGELOG.md in der Ressource.


Fehler gefunden? Melde ihn im Discord.