Pepper Racing
Racing-Tablet mit legalem Club und Underground-Szene – Startaufstellung mit Startampel, Rennleitung, Protestverfahren, Ghosts, Crews, Saisons und Strecken-Editor für ESX, QBCore und Qbox.
Überblick
Pepper Racing bringt Motorsport-Roleplay auf deinen Server: Spieler öffnen das Racing-Tablet (Item racing_tablet)
und fahren entweder im hellen Pepper Racing Club (legal, Bankkonto, Rennleitung, Protestverfahren) oder im dunklen
Underground (Alias, Schwarzgeld, geheimer Treffpunkt, Polizei-Alarm). Jedes Rennen beginnt mit einer echten
Startaufstellung und einer Startampel, ein automatischer Rennkommissar ahndet Abkürzungen, und eine Rennleitung kann als
RP-Rolle Strafen verhängen, Durchsagen machen und die rote Flagge zeigen. Strecken bauen Spieler im Editor selbst –
Strecken von Nicht-Admins gehen vorher durch die Streckenabnahme.
Features
- 6 Modi: Sprint, Rundstrecke (1–50 Runden), Ausscheidung, Drag, Drift, Zeitfahren
- Zwei Welten im Tablet: heller Club ↔ dunkles Neon-Underground, Umschalter oben im Tablet
- Startaufstellung mit bis zu 16 Grid-Plätzen (nach Rating, Anmeldung oder ausgelost), Marker + GPS, 90 s Frist
- Startampel: 5 rote Lichter mit zufälliger Haltezeit (F1) bzw. Christmas Tree mit Frühstart-Erkennung (Drag)
- Rennkommissar: Korridor-Erkennung (Warnung → 5 s Zeitstrafe), Checkpoint-Reihenfolge, Plausibilität am Server
- Rennleitung als RP-Rolle: Live-Karte, Zeitnahme, Zeitstrafen, Disqualifikation, rote Flagge, Durchsagen, Vorfall-Protokoll
- Protestverfahren (Club): 120 s Protestfrist, vorläufiges → offizielles Ergebnis, erst dann Preisgeld und Rating
- Live-HUD: Zeitnahme-Turm, Delta zur Bestzeit, Sektorzeiten lila/grün/gelb, Mini-Karte, Reifen, Drift-Meter – frei verschiebbar
- Ghost (eigene Bestzeit oder Streckenrekord) und Ideallinie der Rekordrunde
- Reifenverschleiß + Boxenstopp auf Rundkursen ab 3 Runden: Reifenmischungen, Reifenplatzer, Timing-Stopp, Tempolimit, Crew als Boxenteam, Pflichtstopp – alles einstellbar und je Rennen abschaltbar (Boxenstopp 2.0 ab der nächsten Version, im Code schon enthalten), Fotofinish unter 0,1 s
- Leistungsklassen D/C/B/A/S/X automatisch aus den Fahrzeugwerten inkl. Tuning (PI 100–999)
- Underground: Bezirk + Uhrzeit statt Ort, Treffpunkt 2 min vor dem Start per GPS, Szene-Heat je Bezirk, Polizei-Alarm, Szene-Ruf
- Underground-Karriere: Aufträge (Kurierfahrt, Blitzer-Jagd, Drift-Spur, Abhängen, Rivalen-Duell) und 6 Street-Rep-Stufen, die Wetten, Pink Slips und schwere Aufträge freischalten (
config/missions.lua,Config.StreetRep) - Wetten (Totalisator mit Live-Quoten) und Pink Slips (vom Server-Betreiber einschaltbar, Standard: aus)
- Crews/Teams, Racer-Rating (Elo) mit 6 Rängen, Saisons mit Belohnungen, K.-o.-Turniere und Meisterschaften
- Strecken-Editor im Spiel mit Aufnahme-Modus, Boxengasse, Vorschau-Kamerafahrt und Streckenabnahme
- Broadcast-Overlay für Streamer und Kommentatoren, Discord-Webhooks, 3 Server-Exports
- Deutsch & Englisch mit deutschen Motorsport-Begriffen, Config, Sprachdateien und Bridges offen
Voraussetzungen
| Abhängigkeit | Pflicht/optional | Wofür | Link |
|---|---|---|---|
| FiveM-Server-Build ≥ 7290 | Pflicht | in fxmanifest.lua als /server:7290 hinterlegt |
https://runtime.fivem.net/artifacts/fivem/build_server_windows/master/ |
| OneSync | Pflicht | Startaufstellung, Rennkommissar, Zuschauer | https://docs.fivem.net/docs/scripting-reference/onesync/ |
| ESX Legacy, QBCore oder Qbox | Pflicht (eins davon) | Geld, Jobs, Identifier, Fahrzeugbesitz – Config.Framework = 'auto' erkennt es |
https://github.com/esx-framework/esx_core |
| ox_lib | Pflicht | UI-Bausteine, Callbacks | https://github.com/overextended/ox_lib |
| oxmysql | Pflicht | Datenbank (MySQL/MariaDB) | https://github.com/overextended/oxmysql |
| Inventar: ox_inventory, qb-inventory (auch ps-/lj-inventory) oder ESX-Standardinventar | Pflicht (eins davon) | Items racing_tablet, race_license, race_usb |
https://github.com/overextended/ox_inventory |
| Dispatch (ps-dispatch, cd_dispatch, qs-dispatch, rcore_dispatch, core_dispatch) | optional | Polizei-Alarm bei Underground-Rennen – ohne läuft der eingebaute Alarm | – |
| Fahrzeugschlüssel (qbx_vehiclekeys, qb-vehiclekeys, wasabi_carlock, MrNewbVehicleKeys) | optional | Schlüsselübergabe bei Pink Slips (bridge/server/vehicles.lua) |
– |
Installation
- Ressource im Cfx.re-Portal (Granted Assets) herunterladen
- Nach
resources/[pepper]/pepper_racingentpacken – nicht umbenennen - Items eintragen (siehe unten)
- Datenbank: Die Tabellen entstehen beim ersten Start automatisch. Ohne CREATE-Recht vorher
install/pepper_racing.sqlimportieren config/config.luaprüfen (Sprache, Rechte, Geld),config/server.luafür Webhooks und Pink Slips- In der
server.cfgnach den Abhängigkeiten eintragen:
ensure oxmysql
ensure ox_lib
ensure es_extended # bzw. qb-core oder qbx_core
ensure ox_inventory # bzw. dein Inventar
ensure pepper_racing
- Server starten – in der Konsole steht
Pepper Racing … gestartet (Framework: …, Strecken: 4, Saison: …)– beim ersten Start spielt das Script 4 Standardstrecken ein - Eigene Strecken baust du im Spiel im Editor (Tablet → Strecken → Neue Strecke)
Items
| Item | Zweck |
|---|---|
racing_tablet |
öffnet das Racing-Tablet (benutzbar) |
race_license |
„Rennleiter-Lizenz“ – Standard-Recht zum Ausschreiben von Rennen |
race_usb |
„Underground-Stick“ – optionaler Underground-Zugang (Config.Illegal.AccessItem) |
| Inventar | Datei | Wohin |
|---|---|---|
| ox_inventory (ESX, QBCore, Qbox) | install/ox_items.lua (DE) bzw. install/ox_items_en.lua (EN) |
Einträge in ox_inventory/data/items.lua vor die letzte } |
| qb-inventory / ps- / lj-inventory | install/qb_items.lua |
Einträge in qb-core/shared/items.lua (QBShared.Items) |
| ESX-Standardinventar | install/esx_items.sql |
in die Datenbank importieren |
Bei ox_inventory braucht das Tablet die Zeile server = { export = 'pepper_racing.racing_tablet' } – sie steht bereits in
install/ox_items.lua. Die Itembilder liegen in install/images/ (racing_tablet.png, race_license.png, race_usb.png) – kopiere sie in den Bilderordner deines Inventars.
Erster Test
- Als Admin das Item
racing_tabletgeben (z. B. über dein Inventar-Admin-Menü) und benutzen - Unter Strecken prüfen, ob die 4 Standardstrecken eingespielt sind (Sandy Shores Short Loop, Grand Senora Loop, zwei Drag-Strecken)
- Unter Erstellen ein Sprint- oder Rundstreckenrennen mit Startzeit „sofort“ ausschreiben und mit dem Fahrzeug anmelden, in dem du sitzt
- Zum markierten Startplatz fahren, Startampel abwarten, Rennen beenden – das Ergebnis erscheint im Tablet
Konfiguration
| Datei | Inhalt |
|---|---|
config/config.lua |
Sprache, Framework, Item, Rechte, Rennen, Startaufstellung, Ampel, Rennkommissar, Protest, Geld, Wetten, Underground, Polizei, Rating, Saison, Crews, Events, Ghost, Reifen, Drift, Editor, HUD |
config/vehicles.lua |
feste Klassen pro Modell, gesperrte Modelle und GTA-Fahrzeugklassen |
config/server.lua |
Webhooks, Pink Slips, Sponsor-Bonus, Admin-ACE (wird nie an Clients gesendet) |
Wichtige Werte:
| Option | Standard | Bedeutung |
|---|---|---|
Config.Locale |
'de' |
Sprache (de / en) |
Config.Framework |
'auto' |
auto, esx, qbcore, qbox, standalone |
Config.Item |
'racing_tablet' |
Item, das das Tablet öffnet |
Config.Command |
false |
optionaler Befehl (z. B. 'racing') – öffnet das Tablet ohne Item |
Config.Races.MaxRacers |
16 |
Obergrenze Fahrer pro Rennen (2–16) |
Config.Grid.Order |
'rating' |
Aufstellung: rating, signup, random |
Config.Grid.Teleport |
false |
Fahrer direkt auf den Startplatz setzen |
Config.Steward.CutPenalty |
5 |
Zeitstrafe (s) für eine Abkürzung |
Config.Protest.Window |
120 |
Protestfrist (s) nach Rennende |
Config.Economy.HouseCut |
0.05 |
Anteil des Preistopfs, der einbehalten wird |
Config.DirtyMoney |
ESX black_money, QB/Qbox cash |
Konto für Underground-Geld je Framework |
Config.Illegal.HiddenForJobs |
police, sheriff, state |
diese Jobs sehen den Underground nicht |
Config.Police.Dispatch |
'auto' |
Polizei-Alarm: auto, builtin, Integration oder false |
Config.Season.Days |
30 |
Länge einer Saison |
Config.Hud.Units |
'kmh' |
kmh oder mph |
Ablauf eines Rennens
- Ausschreiben: Tablet → Erstellen: Modus, Strecke, Runden, Klassen-Limit, max. Fahrer, Startgeld, Preisverteilung, Optionen (Kollisionen/Phasing, Ghost, Ideallinie, Reifen, Wetten, privat mit Code), Startzeit (sofort oder in 2–30 min)
- Anmelden: Spieler melden sich mit dem Fahrzeug an, in dem sie sitzen – Klasse und Sperrliste prüft der Server
- Underground: Treffpunkt wird 120 s vor dem Start per GPS freigegeben
- Startaufstellung: Startgeld wird abgebucht, jeder bekommt seinen Grid-Platz (90 s Frist) – wer fehlt, ist DNS und bekommt sein Startgeld zurück
- Startampel: 5 rote Lichter, dann „Lichter aus“ (Drag: Christmas Tree, Losrollen vor Grün = Rotlicht)
- Rennen: Checkpoints in Reihenfolge, Rennkommissar überwacht Abkürzungen, Rennleitung kann eingreifen; Fahrzeug länger als 15 s verlassen = DNF
- Ziel: Nach dem ersten Fahrer bleiben 120 s, Fotofinish-Markierung unter 0,1 s Abstand
- Ergebnis: Club – vorläufig, Protestfrist 120 s, dann offiziell; Underground – sofort offiziell. Erst mit dem offiziellen Ergebnis gibt es Preisgeld, Wettgewinne, Rating, Saisonpunkte und Szene-Ruf
Bei roter Flagge, zu wenigen Fahrern oder einem Neustart der Ressource werden Startgelder und Wetten sofort erstattet.
Strecken-Editor
| Taste | Funktion |
|---|---|
E |
Checkpoint setzen |
Backspace |
letzten Checkpoint löschen |
Mausrad / ← → |
Breite ändern (6–40 m) |
G |
Startplatz an der aktuellen Fahrzeugposition setzen (max. 16) |
H |
Boxengasse: Einfahrt → Box → Ausfahrt (nur Rundkurse) |
R |
Aufnahme-Modus an/aus (alle 60 m ein Checkpoint) |
F |
Vorschau-Kamerafahrt |
Enter |
Speichern |
X |
Abbrechen |
Tasten ändern: Config.Keys (GTA-Control-IDs). Streckentypen: Rundkurs, Sprintstrecke, Drag-Strecke (genau 2 Checkpoints,
2 Startplätze, max. 1000 m), Driftstrecke. Bereich: Club, Underground oder beide.
Underground
- Zugang: Job nicht in
Config.Illegal.HiddenForJobs, optional Itemrace_usb - Rennen erscheinen nur mit Bezirk und Uhrzeit, gefahren wird unter dem Racer-Alias, bezahlt mit
Config.DirtyMoney - Szene-Heat je Bezirk (0–100): jedes Rennen +18, Abbau 1 pro Minute, ab 60 Warnung „Szene beobachtet“
- Polizei-Alarm beim Start: 15 % + Heat × 0,6 % (max. 85 %), Blip 90 s
- Aufträge (Reiter im Underground-Tablet): 3 Angebote mit Schwierigkeit, Prämie in Schwarzgeld + Szene-Ruf, Tageslimit; Werte in
config/missions.lua - Street-Rep-Stufen (6 Stufen,
Config.StreetRep) begrenzen Wetten (BetLimit) und schalten Pink Slips ab Stufe 3 frei – Admins ausgenommen
Pink Slips
Standard: aus. Bei Pink Slips setzen beide Fahrer ihr eigenes Fahrzeug – der Sieger bekommt das Fahrzeug des Verlierers endgültig (Besitzwechsel in der Datenbank). Schalte die Funktion nur ein, wenn das zu deinen Server-Regeln passt.
Einschalten in config/server.lua: ServerConfig.PinkSlips = { Enabled = true, Table = 'auto' } (owned_vehicles bei ESX,
player_vehicles bei QBCore/Qbox). Nur Underground, genau 2 Fahrer, kein Startgeld, Besitz und Kennzeichen prüft der
Server, beide bestätigen doppelt. Schlüssel werden über qbx_vehiclekeys, qb-vehiclekeys, wasabi_carlock oder
MrNewbVehicleKeys übergeben – eigene Systeme in bridge/server/vehicles.lua.
Dispatch und Webhooks
Dispatch
Config.Police.Dispatch = 'auto' nimmt die erste laufende Integration: ps-dispatch, cd_dispatch, qs-dispatch,
rcore_dispatch, core_dispatch. Ohne Integration bekommen alle Spieler mit Job aus Config.Police.Jobs eine Meldung und
einen Blip. false schaltet den Alarm ab. Anpassbar in bridge/server/dispatch.lua.
Webhooks
In config/server.lua ('' = aus):
| Schlüssel | Inhalt |
|---|---|
results |
offizielle Ergebnisse (Club), Streckenrekorde, Events, Saisonende |
tracks |
eingereichte und abgenommene Strecken |
illegal |
Underground-Ergebnisse, Polizei-Alarme, Pink Slips |
security |
Verdachtsfälle des Rennkommissars |
Befehle und Rechte
Befehle
| Befehl | Wer | Was |
|---|---|---|
Config.Command (Standard aus, z. B. 'racing') |
alle | öffnet das Tablet ohne Item |
/racingrep <ID> <+/-Menge> · /racingrep <ID> set <Wert> |
Admin | Szene-Ruf vergeben oder setzen (Config.StreetRep.AdminCommand) |
Standardmäßig öffnet sich das Tablet über das Item racing_tablet.
Admin-Aufgaben (Streckenabnahme, Saison beenden/starten, Strecken sperren) laufen im Admin-Bereich des Tablets.
Rechte
Rechte werden bei jedem Server-Aufruf neu geprüft. Admin = ACE pepper_racing.admin oder eine Gruppe aus
Config.AdminGroups (admin, superadmin, god) – Admins haben alle Rechte.
| Recht | Wofür | Standard |
|---|---|---|
createRace |
Rennen und Events ausschreiben | Admin-Gruppe oder Item race_license |
createTrack |
Strecken im Editor bauen | Admin-Gruppe |
approveTrack |
Streckenabnahme | Admin-Gruppe |
control |
Rennleitung für alle Rennen | Admin-Gruppe (Organisatoren leiten ihr eigenes Rennen immer) |
Jedes Recht kann über ace, groups, jobs (Job + Mindest-Dienstgrad), items oder everyone = true vergeben werden:
add_ace group.admin pepper_racing.admin allow
add_ace group.mod pepper_racing.control allow
add_ace group.mod pepper_racing.approveTrack allow
Exports und Framework-Anbindung
Exports (Server)
-- server, nur lesend
exports.pepper_racing:getProfile(src) -- öffentliches Fahrerprofil oder nil
exports.pepper_racing:isRacing(src) -- true in Startaufstellung, Ampelphase oder Rennen
exports.pepper_racing:getActiveRaces() -- Liste der aktiven Rennen
Framework-Anbindung
bridge/server/{esx,qbcore,qbox,standalone}.lua liefern Geld, Job und Identifier, bridge/server/inventory.lua Items
(ox_inventory, qb-/ps-/lj-inventory, ESX), bridge/server/vehicles.lua Fahrzeugbesitz und Schlüssel,
bridge/server/dispatch.lua den Polizei-Alarm. Alle Bridges sind offen.
Fehlerbehebung
| Problem | Lösung |
|---|---|
| Tablet öffnet sich nicht | Item eingetragen? Bei ox_inventory server = { export = 'pepper_racing.racing_tablet' }; Ordner nicht umbenennen |
| „Die Zeitnahme startet noch“ | Datenbank nicht erreichbar – oxmysql vor pepper_racing starten, Konsole prüfen |
| „Keine passende Strecke“ | Für den Modus gibt es noch keine freigegebene Strecke – im Editor bauen oder abnehmen |
| Underground fehlt | Job steht in HiddenForJobs oder AccessItem ist gesetzt und fehlt |
| Fahrer „nicht gestartet (DNS)“ | Nicht innerhalb von 90 s auf dem Startplatz – Config.Grid.Time erhöhen oder Teleport = true |
| Fahrzeug gesperrt / falsche Klasse | config/vehicles.lua: BlockedModels, VehicleClasses |
| Pink Slips lassen sich nicht wählen | ServerConfig.PinkSlips.Enabled; Konsole meldet, wenn die Fahrzeugtabelle fehlt |
| Polizei bekommt keinen Alarm | Config.Police.Jobs, Config.Police.Dispatch; Alarm kommt nur mit Wahrscheinlichkeit |
FAQ
Sind Strecken dabei?
Ja, 4 Strecken: Sandy Shores Short Loop, Grand Senora Loop (Rundkurse), Sandy Shores Airfield Drag und LSIA Runway Drag. Sie werden beim ersten Start eingespielt, solange noch keine Strecke existiert (install/default_tracks.json, abschaltbar mit Config.Tracks.InstallDefaults = false). Weitere Strecken baust du im Editor an jedem Ort der Karte.
Brauche ich Addon-Fahrzeuge?
Nein. Jedes Fahrzeug – auch Addon-Fahrzeuge – bekommt seine Klasse automatisch aus den eigenen Werten inkl. Tuning. Feste Klassen trägst du in Config.VehicleClasses (config/vehicles.lua) ein.
Das Tablet öffnet sich nicht.
Das Item muss in deinem Inventar eingetragen sein – bei ox_inventory mit server = { export = 'pepper_racing.racing_tablet' }. Ordner nicht umbenennen, Framework und Inventar vor pepper_racing starten. Alternativ öffnet Config.Command = 'racing' das Tablet ohne Item.
Die Meldung „Die Zeitnahme startet noch“ bleibt stehen.
Die Datenbank ist nicht erreichbar: oxmysql vor pepper_racing starten und die Konsole prüfen. Ohne CREATE-Recht importierst du vorher install/pepper_racing.sql.
Wer darf Rennen ausschreiben?
Standardmäßig Admins und alle mit dem Item Rennleiter-Lizenz (race_license). Das änderst du in Config.Permissions.createRace – z. B. für einen Job oder mit everyone = true für alle.
Muss eine Rennleitung online sein?
Nein. Der Rennkommissar arbeitet automatisch, und ohne Entscheidung wird das Ergebnis nach der Protestfrist (Config.Protest.Window, 120 s) offiziell.
Was passiert bei einem Server-Neustart mitten im Rennen?
Laufende Rennen werden abgebrochen, Startgelder und Wetteinsätze erstattet. Profile, Strecken, Bestzeiten, Ghosts, Crews und Saisons liegen in der Datenbank.
Sind Pink Slips gefährlich für meine Server-Wirtschaft?
Pink Slips sind standardmäßig aus. Eingeschaltet wechseln Fahrzeuge endgültig den Besitzer – der Server prüft vorher Besitz und Kennzeichen, beide Fahrer bestätigen doppelt, und es gibt sie nur im Underground 1 gegen 1 ab Street-Rep-Stufe 3.
Kann die Polizei den Underground sehen?
Nein. Jobs aus Config.Illegal.HiddenForJobs (police, sheriff, state) sehen den Underground gar nicht. Die Polizei erfährt von Rennen nur über den Polizei-Alarm.
Im Underground fehlt das Startgeld (QBCore/Qbox).
Dort nutzt Config.DirtyMoney normales Bargeld (cash). Trag ein eigenes Konto ein oder nutze Schwarzgeld als Item (Config.DirtyMoney.Item, z. B. markedbills).
Wie funktioniert das Rating?
Elo-Rating mit Startwert 1000: Wer stärkere Gegner schlägt, gewinnt mehr Punkte. Gewertet werden Rennen mit mindestens 2 Fahrern, Zeitfahren zählt nicht. Am Saisonende wird der Abstand zu 1000 halbiert.
Kann ich mph statt km/h anzeigen oder Texte ändern?
Config.Hud.Units = 'mph' stellt die Einheit um, Config.Locale = 'en' die Sprache (Items dann aus install/ox_items_en.lua). Alle Texte stehen offen in locales/de/*.json und locales/en/*.json.
Wie zeige ich ein Rennen im Stream?
Während ein Rennen läuft, in der Rennansicht Zuschauen wählen – das Broadcast-Overlay zeigt einen großen Zeitnahme-Turm und die Rundenanzeige, ohne Tablet.
Wie spiele ich ein Update ein?
Ordner pepper_racing ersetzen und deine Änderungen an config/ und locales/ vorher sichern. Neue Tabellen (z. B. pepper_racing_missions) legt der Server beim Start selbst an; was sich geändert hat, steht im CHANGELOG.md.
Support
Ticket im Discord öffnen: https://discord.gg/6NaFJWKDYu (Kategorie „Script Support“) – den Kauf vorher mit /verify verknüpfen.
Permanent auf dem Dev-Server von Pepper Scripts getestet.
Changelog
Aktuelle Version: 1.2.0 (2026-10-25). Alle Änderungen stehen auf der Updates-Seite und in CHANGELOG.md in der Ressource.
Fehler gefunden? Melde ihn im Discord.