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
Ordner nach
resources/[pepper]/pepper_keyskopieren.Ordnernamen nicht umbenennen. Andere Scripts rufen
exports.pepper_keysauf, das funktioniert nur mit dem Namenpepper_keys.Den Eintrag aus
install/items/ox_inventory.txtinox_inventory/data/items.luaeinfügen.install/images/pepper_carkey.pngnachox_inventory/web/imageskopieren.In der
server.cfgnach Framework,oxmysql,ox_libundox_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
- 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
- Als Admin
/pkeys give <Kennzeichen>für ein eigenes Fahrzeug eingeben. Der Schlüssel liegt im Inventar. - Am Fahrzeug U drücken: Es schließt ab oder auf, mit Lichtsignal.
- Einsteigen: Mit Schlüssel springt der Motor an. Schlüssel ablegen, aussteigen und wieder einsteigen: Der Motor bleibt aus.
- Ohne Schlüssel und mit einem
lockpickim Inventar K drücken und das Mini-Spiel spielen. - 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(Standardlockpick,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-Eventpepper_keys:alarm. - Mindestzahl Polizei im Dienst:
MinPolicemit den Jobs ausPoliceJobs.
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.