Pepper Taxi
Taxi-Karriere mit 50 Leveln, NPC-Missionen, Spielerfirma und Adminpanel – ESX Legacy.
Überblick
Pepper Taxi ist eine langfristige Taxi-Karriere für ESX Legacy: 50 Level, Reputation, 15 Kundentypen und 12 Missionstypen bis zur Limousinen-Karriere, dazu Bewertungen, Challenges, Fahrten mit echten Spielern und ein optional von Spielern geführtes Taxi-Unternehmen. Gesteuert wird alles über das Dispatch-Tablet (F6) an der Taxi-Zentrale Downtown Cab Co.
- NPC-Aufträge mit Countdown, Annehmen/Ablehnen per
Y/Nohne Maus - 12 Missionstypen: Stadt, Flughafen, Hotel, Nacht, Langstrecke, abgelegen, Business, Zwischenstopps, Event, VIP, Chauffeur, Limousine
- 13 Taxis in 6 Fahrzeugklassen, freigeschaltet über Level, Reputation, Bewertung oder Challenges
- 1–5 Sterne aus serverseitig gemessenen Werten, Reputation von Bronze bis Legende, tägliche und wöchentliche Challenges
/taxi-Anfragen von Spielern und Modus „Spieler als Fahrgast“- Taxi-Unternehmen (öffentlich oder Spielerfirma) mit Rängen, Gehältern und Firmenkonto
- Adminpanel mit Offline-Bearbeitung und Audit-Log, Deutsch und Englisch
Voraussetzungen
| Abhängigkeit | Pflicht/optional | Wofür | Link |
|---|---|---|---|
| FiveM-Server-Build 7290+ mit OneSync (Legacy oder Infinity) | Pflicht | in fxmanifest.lua als /server:7290 und /onesync hinterlegt |
https://docs.fivem.net/docs/server-manual/setting-up-a-server/ |
ESX Legacy 1.9+ (es_extended) |
Pflicht | Spieler, Geld, Admin-Gruppen, Charaktere | https://github.com/esx-framework/esx_core |
| oxmysql | Pflicht | Datenbank (Karriere, Statistiken, Unternehmen, Logs) | https://github.com/overextended/oxmysql |
| Tank-Script | optional | Taxis bekommen beim Ausparken den Statebag fuel gesetzt (Config.VehicleRules.Fuel) |
– |
ox_lib, ox_target und ox_inventory werden nicht benötigt. Ein ESX-Job ist nicht nötig. Pepper Taxi läuft nur mit ESX Legacy (kein QBCore/Qbox).
Installation
- Ressource im Cfx.re-Portal → Granted Assets herunterladen.
- Nach
resources/[pepper]/pepper_taxientpacken. Den Ordnernamenpepper_taxinicht umbenennen – andere Ressourcen rufen die Exports überexports.pepper_taxiauf, und die Server-Events tragen den Ressourcennamen als Präfix. - In der
server.cfgnach den Abhängigkeiten eintragen:
ensure oxmysql
ensure es_extended
ensure pepper_taxi
- Datenbank: Mit
Config.Database.AutoInstall = true(Standard) legt die Ressource fehlende Tabellen beim Start selbst an (13 Tabellen mit Präfixtaxi_). Manuell importierst dusql/install.sql– die Datei kann gefahrlos mehrfach importiert werden. - Adminrechte vergeben (Details unter „Befehle und Rechte“), z. B.:
add_ace group.admin pepper_taxi.admin allow
Pepper Taxi nutzt keine Inventar-Items – es müssen keine Items oder Bilder angelegt werden.
Erster Test
- Server starten und in der Konsole prüfen, dass
pepper_taxiohne Fehler startet. - Zur Taxi-Zentrale fahren (gelbes Taxi-Symbol, Downtown Cab Co.) und am Terminal
Edrücken. - Das Standard-Taxi wählen und einsteigen – der erste Auftrag kommt nach 15–45 Sekunden.
- Mit
Yannehmen, den Fahrgast abholen und am Ziel anhalten – danach erscheinen Sterne, Vergütung und XP. - Mit
F6das Tablet öffnen; als Admin siehst du dort den Reiter Admin.
Konfiguration
Alle Einstellungen liegen offen in config/ (per Asset Escrow lesbar und editierbar):
| Datei | Steuert |
|---|---|
config/config.lua |
Sprache, Zentrale, Tablet, Dispatch, AFK, Sicherheit, Vergütung, Schäden, Bewertung, Reputation, Dienstbonus, Fahrzeugregeln, NPCs, Spielerfahrten, Unternehmen, Admin, Sounds/UI |
config/vehicles.lua |
Fahrzeugklassen und Taxis mit Voraussetzungen |
config/levels.lua |
XP-Kurve, Titel, Karrierebonus, Level-Belohnungen |
config/customers.lua |
15 Kundentypen |
config/missions.lua |
12 Missionstypen |
config/locations.lua |
81 Abhol- und Zielorte auf der ganzen Karte |
config/challenges.lua |
Pools für tägliche und wöchentliche Challenges |
config/server.lua |
optionaler Discord-Webhook für Logs (nur serverseitig geladen) |
locales/de.lua, locales/en.lua |
alle Texte im Spiel und im Tablet |
Allgemein
Config.Locale = 'de'
Config.TimeSource = 'game'
Config.Database = { AutoInstall = true, SaveInterval = 300 }
| Option | Standard | Beschreibung |
|---|---|---|
Config.Locale |
'de' |
Sprache (de oder en) |
Config.Debug |
false |
ausführliche Logs zur Fehlersuche |
Config.Currency |
'$' |
Währungssymbol in der Oberfläche |
Config.TimeSource |
'game' |
Tageszeit für Kunden/Missionen: 'game' oder 'server' |
Config.Resets.DailyHour |
5 |
täglicher Challenge-Reset (Serverzeit) |
Config.Resets.WeeklyDay |
1 |
Wochentag des wöchentlichen Resets (1 = Montag) |
Zentrale, Tablet und Dispatch
Config.Tablet = { Command = 'taxitablet', DefaultKey = 'F6', AcceptKey = 'Y', DeclineKey = 'N', ... }
Config.Dispatch = { MinMissionDelay = 60, MaxMissionDelay = 300, OfferTimeout = 25, RequireInTaxi = true, ... }
| Option | Standard | Beschreibung |
|---|---|---|
Config.Center.Terminal |
vector3(895.9, -179.9, 74.7) |
Terminal der Zentrale (E) |
Config.Center.SpawnPoints |
4 Plätze | Spawnpunkte für Taxis, der Reihe nach auf freien Platz geprüft |
Config.Center.MaxStartDistance |
60.0 |
Dienstbeginn nur so nah an der Zentrale (serverseitig geprüft) |
Config.Tablet.DefaultKey |
'F6' |
Taste für das Tablet |
Config.Dispatch.FirstMissionDelay |
{ 15, 45 } |
Sekunden bis zum ersten Auftrag |
Config.Dispatch.MinMissionDelay / MaxMissionDelay |
60 / 300 |
Sekunden zwischen Aufträgen |
Config.Dispatch.OfferTimeout |
25 |
Sekunden zum Annehmen |
Config.Dispatch.MaxIgnoredOffers |
3 |
verfallene Angebote in Folge → automatisch aus dem Dienst |
Config.Dispatch.RequireInTaxi |
true |
Aufträge nur im eigenen Taxi |
Vergütung, Bewertung und Reputation
| Option | Standard | Beschreibung |
|---|---|---|
Config.Economy.PayAccount |
'bank' |
'bank' oder 'money' |
Config.Economy.GlobalMultiplier |
1.0 |
Faktor auf alle Auszahlungen (z. B. 1.5 fürs Event-Wochenende) |
Config.Economy.MinPayout |
25 |
Mindestauszahlung je erfolgreicher Fahrt |
Config.Economy.MaxRepairDeduction |
0.8 |
Reparaturabzug höchstens 80 % der Vergütung |
Config.Rating.SpeedLimit |
36.0 |
m/s (~130 km/h) – darüber gilt als Rasen (× Kundentoleranz) |
Config.Rating.DamagePerStar |
120 |
je 120 Schadenspunkte −1 Stern |
Config.Reputation.Tiers |
Bronze … Legende | Stufen mit Vergütungsbonus bis +15 % |
Config.DutyBonus.DutyBonusXP |
120 |
XP je Stunde aktiver Dienstzeit |
Fahrzeuge und Fahrgäste
Taxis stehen in config/vehicles.lua; Add-on-Fahrzeuge ergänzt du mit ihrem Spawnnamen. Voraussetzungen (alle optional):
level, reputation, rating, rides, challenge, companyGrade. Den key nach dem Release nicht mehr ändern – er
steht in der Datenbank.
| Option | Standard | Beschreibung |
|---|---|---|
Config.VehicleRules.PlatePrefix |
'TAXI' |
Kennzeichen-Präfix |
Config.VehicleRules.DeleteOnDutyEnd |
true |
Taxi bei Dienstende entfernen |
Config.VehicleRules.Fuel |
100.0 |
Wert für den Statebag fuel |
Config.Passenger.BoardTimeout |
30 |
Sekunden, danach wird der NPC ins Taxi gesetzt |
Config.Passenger.Seats |
{ 2, 1, 0 } |
bevorzugte Sitze (hinten zuerst) |
Spielerfahrten und Unternehmen
| Option | Standard | Beschreibung |
|---|---|---|
Config.PlayerRequests.Enabled |
true |
/taxi-Anfragen an/aus |
Config.PlayerRequests.Cooldown |
120 |
Sekunden zwischen zwei Anfragen eines Spielers |
Config.PlayerRequests.Timeout |
300 |
offene Anfrage verfällt nach … Sekunden |
Config.Company.AllowPurchase |
true |
Spieler können das Unternehmen übernehmen |
Config.Company.PurchasePrice |
750000 |
Kaufpreis (fließt nicht ins Firmenkonto) |
Config.Company.DriverShareDefault |
0.35 |
Fahreranteil, wenn der Rang nichts festlegt |
Config.Company.VehicleSpawnCost |
150 |
Betriebskosten je ausgegebenem Taxi |
Discord-Webhook
In config/server.lua (wird nie an Clients gesendet):
ServerConfig = {
LogWebhook = '', -- leer = aus
LogWebhookName = 'Pepper Taxi',
}
Spielablauf
- Schicht starten: an der Zentrale
Edrücken und ein freigeschaltetes Taxi wählen – es erscheint auf einem freien Parkplatz. - Aufträge: kommen standardmäßig alle 1–5 Minuten mit Countdown und Sound, solange du im eigenen Taxi sitzt und keine Pause machst.
Ynimmt an,Nlehnt ab. - Abholung: zum markierten Punkt fahren – der Fahrgast winkt, geht zum Taxi und steigt ein.
- Fahrt: ans Ziel bringen, manche Missionen haben Zwischenstopps. Das HUD zeigt Route und Status.
- Ankunft: am Ziel anhalten – Sterne, Vergütung, XP und Reputation erscheinen mit Begründung.
Welche Missionen du bekommst, hängt von Level, Reputation, Bewertung, Fahrzeugklasse, Tageszeit und Position ab.
Taxi-Unternehmen
| Modus | Beschreibung |
|---|---|
| Öffentlich (Standard) | Das Unternehmen gehört niemandem – alle fahren und erhalten die volle Vergütung. |
| Spielerfirma | Gehört das Unternehmen einem Spieler, fahren nur Inhaber und Angestellte. Fahrpreise gehen an die Firma, Fahrer erhalten den Anteil ihres Rangs, Gehälter kommen vom Firmenkonto. |
Übernehmen geht im Tablet („Unternehmen übernehmen“) oder per Admin-Zuweisung. Der Inhaber kann es aufgeben, oder ein Admin macht es wieder öffentlich.
Befehle und Rechte
| Befehl / Taste | Wer | Was |
|---|---|---|
F6 / /taxitablet |
alle | Tablet öffnen (im Dienst überall, sonst an der Zentrale) |
Y / /taxiaccept |
Fahrer im Dienst | Auftrag oder neueste Spieleranfrage annehmen |
N / /taxidecline |
Fahrer im Dienst | Auftrag ablehnen |
/taxi [text] |
alle | Taxi rufen – alle Fahrer im Dienst werden benachrichtigt |
/taxicancel |
alle | eigene Anfrage abbrechen |
E |
alle | Terminal an der Zentrale |
Tasten kann jeder Spieler in den GTA-Einstellungen → Tastenbelegung → FiveM ändern.
Adminrechte (immer serverseitig geprüft): ESX-Gruppe aus Config.Admin.Groups (Standard superadmin, admin)
oder ACE pepper_taxi.admin:
add_ace group.admin pepper_taxi.admin allow
Mit Config.Admin.RequireReason = true braucht jede Admin-Änderung eine Begründung; alle Änderungen landen im Audit-Log.
Rechte innerhalb der Spielerfirma (Einstellen, Kündigen, Ränge, Fahrzeuge, Finanzen) hängen am Rang in
Config.Company.DefaultRanks.
Exports und Events
Server-Exports:
| Export | Rückgabe / Beschreibung |
|---|---|
GetTaxiPlayerData(source) |
Karriere und Statistiken (Level, XP, Reputation, Bewertung …) |
IsTaxiDriverOnDuty(source) |
boolean |
GetTaxiDriverStatus(source) |
Status, z. B. 'OFF_DUTY', 'AVAILABLE', 'PLAYER_PASSENGER', 'BREAK' |
SetPlayerPassengerActive(source, active) |
„Spieler als Fahrgast“ ein-/ausschalten – gibt ok, reason zurück |
CreatePlayerTaxiRequest(source, message) |
Taxi-Anfrage erstellen (z. B. aus einer Handy-App) – gibt requestId oder nil, reason zurück |
CancelPlayerTaxiRequest(source) |
Anfrage des Spielers abbrechen |
GetOpenTaxiRequests() |
offene Anfragen |
GetOnDutyDrivers() |
Fahrer im Dienst |
GetTaxiCompany() |
Firmeninfos (Label, Modus, Kontostand, Angestellte, Inhaber) |
IsTaxiCompanyEmployee(sourceOrIdentifier) |
boolean, grade |
local onDuty = exports.pepper_taxi:IsTaxiDriverOnDuty(source)
Es gibt bewusst keinen Export, mit dem andere Ressourcen Geld, XP oder Reputation erzeugen können.
Server-Events (intern, AddEventHandler, z. B. für eine Handy-App):
| Event | Parameter |
|---|---|
pepper_taxi:requestCreated |
request |
pepper_taxi:requestAccepted |
request, driverSource |
pepper_taxi:requestClosed |
requestId, reason (finished, cancelled, expired) |
FAQ
Die Ressource startet nicht oder meldet fehlende Abhängigkeiten.
oxmysql und es_extended müssen in der server.cfg vor pepper_taxi stehen. Das Manifest verlangt Server-Build
7290+ und OneSync – ohne OneSync startet die Ressource nicht.
Die Konsole meldet „Datenbank nicht erreichbar“ oder Tabellen fehlen.
Prüfe, ob oxmysql läuft und mysql_connection_string stimmt. Fehlende Tabellen legt Config.Database.AutoInstall = true
an; alternativ sql/install.sql importieren.
Läuft Pepper Taxi mit QBCore oder Qbox?
Nein. Die Ressource nutzt es_extended direkt und ist nur für ESX Legacy 1.9+ gebaut.
Brauchen Spieler einen ESX-Job?
Nein. Jeder kann an der Zentrale in den Dienst gehen. Angestellte und Ränge einer Spielerfirma verwaltet das Script selbst.
Ich bekomme keine Aufträge.
Du musst in deinem eigenen Taxi sitzen (Config.Dispatch.RequireInTaxi), darfst keine Pause machen und musst „Verfügbar“
sein. Zwischen zwei Aufträgen vergehen bis zu 5 Minuten (Config.Dispatch.MaxMissionDelay = 300).
Beim Dienstbeginn heißt es „Alle Stellplätze sind belegt“.
Entferne Fahrzeuge an den Spawnpunkten oder ergänze weitere Einträge in Config.Center.SpawnPoints.
Der Fahrgast steigt nicht ein oder erscheint nicht.
Nach Config.Passenger.BoardTimeout (30 Sekunden) wird der NPC automatisch hineingesetzt; dafür braucht das Taxi freie
Rücksitze. Erscheint er gar nicht, prüfe das Modell in config/customers.lua und schau mit Config.Debug = true in die F8-Konsole.
Die Auszahlung fehlt nach einer Fahrt.
Die Fahrt war vermutlich unplausibel – z. B. Teleport, zu kurz (unter Config.Security.MinTripSeconds = 25 Sekunden)
oder weniger als 55 % der geplanten Strecke. Der Grund steht in der Server-Konsole.
Der Admin-Bereich im Tablet fehlt.
Deine ESX-Gruppe muss in Config.Admin.Groups stehen oder du brauchst die ACE pepper_taxi.admin. Öffne das Tablet danach erneut.
Ein Abhol- oder Zielort ist schlecht platziert.
Passe die Koordinaten in config/locations.lua an (möglichst am Straßenrand) und starte die Ressource neu. In der
aktuellen Ressource geht es auch im Tablet unter Admin → Orte: Ort an die eigene Position setzen, für Aufträge
sperren oder zurücksetzen – ohne Neustart (neu nach 1.0.1, im CHANGELOG.md unter „Unreleased“).
Hat jeder Charakter seine eigene Karriere?
Ja. Die Daten werden pro ESX-Charakter-Identifier gespeichert; mit esx_multicharacter hat jeder Charakter seine eigene
Taxi-Karriere. Beim Charakterwechsel wird die Schicht sauber beendet.
Kann ich eine Handy-App anbinden?
Ja – über den Export CreatePlayerTaxiRequest und die Events pepper_taxi:requestCreated, requestAccepted und requestClosed.
Kollidiert F6 mit Pepper Bus oder Pepper Trucking?
Nein – Bus nutzt F7 und Trucking F9. Jeder Spieler kann die Taste außerdem neu belegen.
Wie ändere ich Texte?
Alle Texte stehen in locales/de.lua und locales/en.lua; die Sprache wählst du mit Config.Locale.
Wie viel Leistung braucht die Ressource?
Gemessen mit resmon: 0,00 ms im Leerlauf und 0,01 ms aktiv.
Gehen beim Update Karrieren oder Einstellungen verloren?
Karrieren und Unternehmen liegen in der Datenbank; neue Tabellen legt AutoInstall beim Start an. Sichere vor dem Update
deine geänderten Dateien in config/ und locales/ und übertrage die Anpassungen in die neue Version.
Support
Fragen und Fehler: Öffne ein Ticket in unserem Discord: https://discord.gg/6NaFJWKDYu – verknüpfe deinen Kauf vorher
mit /verify.
Permanent auf dem Dev-Server von Pepper Scripts getestet.
Changelog
Aktuelle Version: 1.0.1 (26.09.2026) – Absturz beim Firmenkonto einer Spielerfirma und verschobene Texte im
Challenge-Popup behoben. Alle Änderungen stehen in der Datei CHANGELOG.md im Ressourcenordner.
Fehler gefunden? Melde ihn im Discord.