Dokumentation

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/N ohne 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

  1. Ressource im Cfx.re-Portal → Granted Assets herunterladen.
  2. Nach resources/[pepper]/pepper_taxi entpacken. Den Ordnernamen pepper_taxi nicht umbenennen – andere Ressourcen rufen die Exports über exports.pepper_taxi auf, und die Server-Events tragen den Ressourcennamen als Präfix.
  3. In der server.cfg nach den Abhängigkeiten eintragen:
ensure oxmysql
ensure es_extended
ensure pepper_taxi
  1. Datenbank: Mit Config.Database.AutoInstall = true (Standard) legt die Ressource fehlende Tabellen beim Start selbst an (13 Tabellen mit Präfix taxi_). Manuell importierst du sql/install.sql – die Datei kann gefahrlos mehrfach importiert werden.
  2. 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

  1. Server starten und in der Konsole prüfen, dass pepper_taxi ohne Fehler startet.
  2. Zur Taxi-Zentrale fahren (gelbes Taxi-Symbol, Downtown Cab Co.) und am Terminal E drücken.
  3. Das Standard-Taxi wählen und einsteigen – der erste Auftrag kommt nach 15–45 Sekunden.
  4. Mit Y annehmen, den Fahrgast abholen und am Ziel anhalten – danach erscheinen Sterne, Vergütung und XP.
  5. Mit F6 das 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

  1. Schicht starten: an der Zentrale E drücken und ein freigeschaltetes Taxi wählen – es erscheint auf einem freien Parkplatz.
  2. Aufträge: kommen standardmäßig alle 1–5 Minuten mit Countdown und Sound, solange du im eigenen Taxi sitzt und keine Pause machst. Y nimmt an, N lehnt ab.
  3. Abholung: zum markierten Punkt fahren – der Fahrgast winkt, geht zum Taxi und steigt ein.
  4. Fahrt: ans Ziel bringen, manche Missionen haben Zwischenstopps. Das HUD zeigt Route und Status.
  5. 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.