> For the complete documentation index, see [llms.txt](https://pepper-scripts.gitbook.io/pepper-scripts-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pepper-scripts.gitbook.io/pepper-scripts-docs/docs/de/jobs/pepper-eats.md).

# Pepper Eats

Restaurants, Koch-Minispiele, Restaurant-Level 1–50 und eine Liefer-App mit Fahrern – für ESX, QBCore und Qbox.

> ✅ **Pepper Eats holen:** <https://pepper-scripts.tebex.store/package/7745810>

> 🧪 **Getestet auf unserem Dev-Server:** Wir testen alle Skripte selbstverständlich permanent auf unserem eigenen Dev-Server „Pepper Scripts“.

### Überblick

Mit Pepper Eats legen Admins beliebig viele Restaurants direkt im Spiel an – mit `/eatsadmin`, ohne Neustart. Jedes Restaurant bekommt eine **Werbetafel mit Logo und Namen**, die den Ort für alle Spieler sichtbar macht, dazu Stationen wie Grill, Fritteuse, Ofen, Bar, Kasse, Lager und Stempeluhr. Ein Restaurant läuft entweder als **Framework-Job** (z. B. `burgershot`) oder ist **kaufbar** – dann kauft ein Spieler es an der Werbetafel und führt es selbst.

Gekocht wird mit **sechs Minispielen**; die Leistung bestimmt Qualität und Sterne des Gerichts und damit Preis und Wirkung. Personal, Löhne, Kasse, Rechnungen, Großhandel und Speisekarte laufen über das **Chef-Tablet**. Ein **Restaurant-Level 1–50** mit Upgrades und ein **Auftragsbrett** halten Besitzer und Angestellte auch dann beschäftigt, wenn auf dem Server wenig los ist. Kunden bestellen über die **Liefer-App** – geliefert wird von freien Fahrern oder vom eigenen Personal, oder der Kunde holt selbst ab.

### Features

* **Restaurants im Spiel anlegen**, so viele wie nötig: Name, Farbe, Logo (13 mitgelieferte oder eigene Bild-URL), Vorlage, Betriebsart, geführte Platzierung von Tafel und Stationen
* **Werbetafel mit Logo und Namen** (Bild im Spiel, kein Prop-Ersatz), Status „Geöffnet/Geschlossen“, Sterne je Level-Stufe; beleuchtet, Neon oder animiert per Upgrade
* **5 Vorlagen:** Burger, Pizzeria, Bar/Club, Café/Bäckerei und Frei – jede mit passenden Stationen und Rezepten
* **45 Rezepte, 57 Zutaten**, alles ox\_inventory-Items mit fertigen Bildern (105 Items)
* **Wild-Rezepte:** Wildburger, Kaninchen-Eintopf und Hirschragout – Zutaten im Großhandel, mit Pepper Hunting auch aus eigener Jagd; per `Config.WildRecipes = false` abschaltbar
* **6 Minispiele:** Schneiden, Grillen, Kneten, Einschenken, Mixen, Zusammenbauen – Qualität 0–100 und 1–5 Sterne
* **Wirkung:** Hunger, Durst, Stress, Ausdauer- und Tempo-Boni, Alkohol mit Promille, Atemtest-Item und Abbau
* **Haltbarkeit:** Zutaten und Speisen verderben, das Kühllager verlangsamt es
* **Chef-Tablet** mit Übersicht, Aufträgen, Level & Upgrades, Personal, Speisekarte, Aktionen, Großhandel, Konto, Einstellungen und Bestenliste
* **Personal:** 5 Ränge mit 9 Rechten, einstellen, befördern, entlassen, Löhne je Dienstzeit aus dem Geschäftskonto (mit AFK-Schutz)
* **Kasse:** Bestellung zusammenstellen, Angebot an den Kunden (bar/Karte) oder Rechnung mit Zahlungsziel (`/eatsbills`)
* **Geschäftskonto** mit Buchungsliste; bei Job-Restaurants optional das Firmenkonto (esx\_addonaccount, qb-banking, Renewed-Banking, qb-management)
* **Großhandel:** Lieferung ins Lager oder günstiger selbst am Großmarkt abholen
* **Restaurant-Level 1–50** mit 10 Stufen-Namen, Rezept-Freischaltungen, Menüs ab Level 5 und **8 Upgrades** (Küche, Lager, Kühlraum, Personal, Speisekarte, Großhandel, Werbetafel, Auftragsbuch)
* **Persönliches Level 1–50** über alle Restaurants hinweg mit 10 Titeln und leichteren Minispielen
* **Auftragsbrett für ruhige Zeiten:** Catering und Bürobestellungen an 32 Orten, Vorbereitung, Reinigung (Hygiene), Großmarkt-Fahrt, Werbung mit Flyern, Inventur – dazu eine Wochenaufgabe und Bonus-XP, wenn wenig los ist
* **Liefer-App** (Befehl, Taste oder Tablet-Item): Restaurants entdecken, bestellen mit Treuhand, Lieferung oder Abholung, Trinkgeld, Fortschritt, bewerten
* **Küchenmonitor und Fahrer-Modus:** annehmen, packen, Lieferbeutel, Wegpunkt, Übergabe; Personal hat 60 Sekunden Vorrang
* **Bewertungen** für Restaurant und Fahrer, eine Antwort des Restaurants, Admin kann löschen
* **Gutscheine und Tagesangebote** (ab Restaurant-Level 10), auch an der Kasse einlösbar
* **lb-phone-App:** mit lb-phone erscheint „Pepper Eats“ automatisch als App auf dem Handy
* **Admin-Übersicht** aller Restaurants (Level, Konto, Dienst, Bestellungen, Einnahmen, Bewertung, Hygiene) und Admin-Werkzeuge
* 4 Discord-Webhooks, Server- und Client-Exports
* Deutsch & Englisch; Config, Sprachdateien, Bridges und Installationsdateien offen

### Voraussetzungen

| Voraussetzung      | Version                                                               |
| ------------------ | --------------------------------------------------------------------- |
| FiveM-Server-Build | ≥ 7290                                                                |
| OneSync            | erforderlich                                                          |
| Framework          | ESX Legacy, QBCore oder Qbox (`Config.Framework = 'auto'` erkennt es) |
| Datenbank          | MySQL 8 / MariaDB 10.x über oxmysql                                   |
| Inventar           | ox\_inventory                                                         |
| Target             | optional – ox\_target oder qb-target, sonst Hinweistext mit Taste     |

### Abhängigkeiten

* [oxmysql](https://github.com/overextended/oxmysql)
* [ox\_lib](https://github.com/overextended/ox_lib)
* [ox\_inventory](https://github.com/overextended/ox_inventory)
* optional: ox\_target oder qb-target, lb-phone

### Installation

1. Ressource aus dem Cfx.re Portal (Granted Assets) herunterladen
2. Nach `resources/[pepper]/pepper_eats` entpacken – **nicht umbenennen**
3. **Items:** die Einträge aus `install/ox_items.lua` (Deutsch) bzw. `install/ox_items_en.lua` (Englisch) in `ox_inventory/data/items.lua` einfügen und alle Bilder aus `install/images/` nach `ox_inventory/web/images/` kopieren
4. `config/config.lua` prüfen (Sprache, Währung, Interaktion), `config/server.lua` für Webhooks
5. In der `server.cfg` nach den Abhängigkeiten starten:

```cfg
ensure oxmysql
ensure ox_lib
ensure es_extended        # bzw. qb-core / qbx_core
ensure ox_inventory
# ensure ox_target        # optional – bzw. qb-target
# ensure lb-phone         # optional – App auf dem Handy
ensure pepper_eats

add_ace group.admin pepper_eats.admin allow
```

6. Datenbank: Die 16 Tabellen (`pepper_eats_*`) werden beim Start automatisch angelegt. Ohne CREATE-Recht vorher `install/pepper_eats.sql` importieren
7. Server starten – in der Konsole erscheint `Pepper Eats … gestartet`
8. Im Spiel `/eatsadmin` → **Neues Restaurant** (siehe unten)

### Konfiguration

| Datei                    | Inhalt                                                                                                                                                                                                    |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config/config.lua`      | Sprache, Framework, Admin-Gruppen, Interaktion, Währung, Befehle, Werbetafel, Platzierung, Kochen, Lager, Wirkung, Alkohol, Verfall, Konto, Löhne, Personal, Speisekarte, Kasse, Rechnungen, Kauf/Verkauf |
| `config/templates.lua`   | Vorlagen (Farbe, Logos, Blip, Stationen, erlaubte Rezepte)                                                                                                                                                |
| `config/ranks.lua`       | Ränge, Rechte, Vorgabe-Löhne, Job-Stufen                                                                                                                                                                  |
| `config/signs.lua`       | Arten der Werbetafel (Wand, Mast, Aufsteller …)                                                                                                                                                           |
| `config/ingredients.lua` | Zutaten: Kategorie, Großhandelspreis, Haltbarkeit                                                                                                                                                         |
| `config/recipes.lua`     | Rezepte: Schritte, Station, Minispiel, Zutaten, Preis-Spanne, Wirkung, Level                                                                                                                              |
| `config/wholesale.lua`   | Großmärkte (Ort, NPC, Blip), Lieferzeit, Abhol-Rabatt                                                                                                                                                     |
| `config/progression.lua` | Level-Kurve, Stufen-Namen, Upgrades mit Preisen, persönliches Level                                                                                                                                       |
| `config/tasks.lua`       | Aufträge, Abgabeorte, Flyer-Punkte, Hygiene, Wochenaufgaben, ruhige Zeiten                                                                                                                                |
| `config/delivery.lua`    | Liefer-App: Befehl/Taste, Bestellung, Liefergebühr, Fahrer, Bewertungen, Gutscheine, Tagesangebote, lb-phone                                                                                              |
| `config/server.lua`      | Webhooks, Admin-ACE, erlaubte Logo-Hosts, Versionshinweis (wird nie an Clients gesendet)                                                                                                                  |

Wichtige Schalter:

| Option                                         | Standard          | Bedeutung                                                                                    |
| ---------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------- |
| `Config.Locale`                                | `'de'`            | Sprache (`'de'` oder `'en'`)                                                                 |
| `Config.Interaction`                           | `'auto'`          | `ox_target` → `qb-target` → Hinweistext                                                      |
| `Config.Currency`                              | `'$'`             | Währungszeichen                                                                              |
| `Config.Sign.Mode`                             | `'dui'`           | `'dui'` = Bild-Tafel, `'text'` = nur 3D-Text                                                 |
| `Config.Sign.HeadingOffset`                    | `0.0`             | Tafel im Spiel verdreht? `180.0` setzen                                                      |
| `Config.Account.Society`                       | `false`           | Job-Restaurants buchen auf das Firmenkonto                                                   |
| `Config.Level.XpMultiplier`                    | `1.0`             | XP-Bedarf je Level (`0.5` = doppelt so schnell)                                              |
| `Config.WildRecipes`                           | `true`            | Wild-Rezepte und Wild-Zutaten; `false` = ausgeblendet (Pepper Hunting ist dafür nicht nötig) |
| `Config.App.Key`                               | `''`              | Taste für die App (Spieler kann sie in den FiveM-Tastenbelegungen ändern)                    |
| `Config.App.RequireItem`                       | `false`           | App nur mit dem Item `eats_tablet`                                                           |
| `Config.Delivery.BaseFee` / `PerKm` / `MaxFee` | `15` / `6` / `80` | Liefergebühr                                                                                 |
| `Config.Delivery.StaffFee`                     | `'driver'`        | Liefert Personal: Gebühr + Trinkgeld an den Fahrer oder ins Geschäftskonto (`'account'`)     |
| `Config.PromoLevel`                            | `10`              | ab diesem Level gibt es Gutscheine und Tagesangebote                                         |

### Rechte

Admins sind Spieler mit dem ACE-Recht `pepper_eats.admin` oder einer Gruppe aus `Config.AdminGroups`.

Im Restaurant gelten Ränge (aufsteigend, der letzte ist der Inhaber):

| Rang           | Rechte (Vorgabe)                     |
| -------------- | ------------------------------------ |
| Aushilfe       | kochen                               |
| Koch           | kochen, Kasse, liefern               |
| Schichtleitung | + Lager/Großhandel, öffnen/schließen |
| Manager        | + Speisekarte, Personal, Aktionen    |
| Inhaber        | + Geschäftskonto, Upgrades           |

Rechte: `cook`, `register`, `deliver`, `stock`, `open`, `menu`, `staff`, `promo`, `finance` – je Rang in `config/ranks.lua`. Bei Job-Restaurants legt `Config.JobGrades` (im Admin-Menü je Restaurant änderbar) fest, welche Job-Stufe welcher Rang ist. Bei kaufbaren Restaurants lädt der Inhaber Personal über das Chef-Tablet ein.

### Ein Restaurant anlegen

1. `/eatsadmin` → **Neues Restaurant**
2. **Allgemein:** Name, Vorlage, Farbe, Logo – die Vorschau zeigt die Werbetafel
3. **Betrieb:** Job (Job-Name + Stufen) oder kaufbar (Preis)
4. **Tafel & Stationen:** **Los geht’s** startet die geführte Platzierung. Mit `E` setzen, Mausrad drehen, `Bild auf/ab` Höhe, `X` optionale Station überspringen, `Z` zurück, `ESC` beenden. Die erste Werbetafel ist der Ankerpunkt; alle Stationen liegen höchstens 150 m davon entfernt
5. **Anlegen** – das Restaurant steht sofort, mit Blip und Tafel, für alle Spieler

Pflicht-Stationen: Werbetafel, Stempeluhr, Büro, Kasse und die Stationen der Vorlage. Weitere (Abholtresen, Ausgabe, Lager, Kühlung, zusätzliche Grills …) lassen sich jederzeit ergänzen.

### Der Alltag im Restaurant

* **Stempeluhr:** einstempeln = im Dienst. Das Restaurant ist geöffnet, solange jemand im Dienst ist und es nicht geschlossen wurde
* **Kochen:** an der Station das Rezept wählen; jeder Schritt ist ein Minispiel. Zutaten kommen aus Lager → Kühlung → Inventar, das fertige Gericht ins Inventar oder auf die Ausgabe
* **Kasse:** Gerichte wählen, Kunden in der Nähe auswählen, bar/Karte anbieten oder eine Rechnung schreiben. Bezahlte Gerichte bekommt der Kunde ins Inventar
* **Chef-Tablet** am Büro: Konto, Personal, Speisekarte (aus den Rezepten der Vorlage, Preise in der erlaubten Spanne), Menüs, Großhandel, Logo (kaufbare Restaurants), Upgrades, Aufträge
* **Löhne** zahlt das Geschäftskonto je Dienstminute; wer AFK ist, bekommt nichts

### Level, Upgrades und Aufträge

Das Restaurant sammelt XP durch Kochen (je nach Qualität), Umsatz, Aufträge und die Wochenaufgabe; bei Hygiene ab 90 % gibt es 10 % mehr. Level 50 braucht bei normalem Betrieb rund 80 Stunden (`Config.Level.XpMultiplier`). Neue Rezepte werden mit dem Level frei, Menüs ab Level 5, Gutscheine und Tagesangebote ab Level 10.

Upgrades kauft der Inhaber aus dem Geschäftskonto: Küchengeräte (Qualität), Lager, Kühlraum, Personal-Plätze, Speisekarte, Großhandel-Rabatt, Werbetafel (beleuchtet, Neon, animiert) und Auftragsbuch.

**Aufträge** (Tablet → Aufträge, nur im Dienst): täglich 5 (+ Upgrade), einer pro Person:

| Auftrag                   | Ablauf                                   | Belohnung                                |
| ------------------------- | ---------------------------------------- | ---------------------------------------- |
| Catering / Bürobestellung | Gerichte kochen und an einem Ort abgeben | Geld + XP                                |
| Vorbereitung              | 3 Schneide-Runden                        | Halbfertigware (+5 Qualität)             |
| Reinigung                 | Schmutzstellen putzen                    | Hygiene                                  |
| Großmarkt-Fahrt           | Ware am Großmarkt abholen                | XP                                       |
| Werbung                   | Flyer an Punkten verteilen               | Restaurant wird in der App hervorgehoben |
| Inventur                  | Abgelaufenes aussortieren                | Teil-Erstattung                          |

Ist auf dem Server wenig los (wenige Spieler oder lange keine App-Bestellung), gibt es 1,5-fach XP.

### Liefer-App

Öffnen mit `/eats`, einer frei wählbaren Taste oder dem Item `eats_tablet`; mit **lb-phone** auch als App auf dem Handy. Reiter: **Entdecken**, **Bestellungen**, **Fahren**, **Küche** (nur Personal im Dienst) und **Rechnungen**.

1. Kunde wählt ein geöffnetes Restaurant, legt Gerichte/Menüs in den Warenkorb, wählt Lieferung oder Abholung, optional Gutschein und Trinkgeld. Das Geld wird abgebucht und **treuhänderisch** gehalten
2. Die Küche nimmt an (sonst nach 5 Minuten automatisch storniert, Geld zurück), kocht und **packt an der Ausgabe**
3. Der Auftrag geht 60 Sekunden an das Personal mit Recht `deliver`, danach an alle Fahrer im Fahrer-Modus
4. Der Fahrer holt an der Ausgabe den **Lieferbeutel**, folgt dem Wegpunkt und übergibt in 4 m Abstand
5. Bei Übergabe bekommt das Restaurant den Warenwert, der Fahrer Gebühr und Trinkgeld; der Kunde kann danach bewerten

Abholung: Der Kunde holt die fertige Bestellung am **Abholtresen** ab (nur wenn das Restaurant einen hat).

Fehlerfälle: Ablehnen oder Storno → volle Erstattung; Fahrer offline oder bricht ab → Auftrag geht zurück; Kunde zu lange offline → Bestellung storniert; Erstattungen an Offline-Kunden werden beim nächsten Einloggen gezahlt.

### Befehle

| Befehl       | Recht | Zweck                                                                                     |
| ------------ | ----- | ----------------------------------------------------------------------------------------- |
| `/eatsadmin` | Admin | Admin-Menü: Übersicht, Restaurants anlegen/ändern/löschen, Besitzer, Level, Geld, Zutaten |
| `/eats`      | alle  | Liefer-App (Taste in den FiveM-Tastenbelegungen)                                          |
| `/eatsbills` | alle  | eigene offene Rechnungen ansehen und bezahlen                                             |

### Webhooks

In `config/server.lua` (leer = aus):

| Webhook    | Inhalt                                                                                                               |
| ---------- | -------------------------------------------------------------------------------------------------------------------- |
| `admin`    | Restaurants angelegt, geändert, gelöscht, Besitzer, Level gesetzt, Bewertung gelöscht                                |
| `business` | Öffnen/Schließen, Kauf, Verkauf, Übergabe, Kontobewegungen ab `ServerConfig.WebhookMoneyMin` (Admin-Buchungen immer) |
| `orders`   | Stornos der Liefer-App (abgelehnt, nicht angenommen, vom Kunden, Kunde offline)                                      |
| `security` | Verdachtsfälle der Plausibilitätsprüfung                                                                             |

### Exports

Server:

```lua
exports.pepper_eats:getRestaurants()            -- alle Restaurants (öffentliche Sicht)
exports.pepper_eats:getRestaurant(id)           -- ein Restaurant oder nil
exports.pepper_eats:isOpen(id)                  -- geöffnet?
exports.pepper_eats:getDuty(source)             -- Restaurant-ID, in der der Spieler im Dienst ist
exports.pepper_eats:getRank(source, id)         -- Rang des Spielers (nil = gehört nicht dazu)
exports.pepper_eats:getLevel(id)                -- { level, xp, stage }
exports.pepper_eats:addRestaurantXp(id, xp)     -- XP gutschreiben (z. B. Event-Script)
exports.pepper_eats:getRating(id)               -- Mittelwert, Anzahl
exports.pepper_eats:getBalance(id)              -- Kontostand
exports.pepper_eats:addBalance(id, amount, note) -- buchen (< 0 scheitert bei zu wenig Guthaben)
exports.pepper_eats:getOpenOrders(id)           -- offene App-Bestellungen
exports.pepper_eats:isDriver(source)            -- im Fahrer-Modus?
exports.pepper_eats:getAlcohol(source)          -- Promille
exports.pepper_eats:applyEffects(source, fx)    -- Wirkung wie beim Essen: { hunger, thirst, stamina, speed, stress, heal, alcohol }
```

Client:

```lua
exports.pepper_eats:openApp(page)   -- 'discover' | 'orders' | 'drive' | 'kitchen' | 'bills'
exports.pepper_eats:closeApp()
exports.pepper_eats:getDelivery()   -- aktuelle Lieferung als Fahrer { id, status, restaurant } oder nil
```

### Framework-Anbindung

Alles Framework-Spezifische liegt offen in `bridge/`: Geld (Bargeld/Bank), Jobs und Job-Wechsel, Inventar (ox\_inventory: Lager, Metadaten, Verbrauch), Status (Hunger/Durst/Stress je Framework), Firmenkonten und Benachrichtigungen. Eigene Anpassungen gehören dorthin.

### Troubleshooting

* **Werbetafel verdreht oder von vorne unsichtbar:** `Config.Sign.HeadingOffset = 180.0`
* **Bild-Tafel macht Probleme:** `Config.Sign.Mode = 'text'` schaltet auf 3D-Text um
* **Item-Bilder fehlen:** Bilder aus `install/images/` nach `ox_inventory/web/images/` kopieren
* **„Keine Zutaten“:** Lager über den Großhandel füllen; zum Testen Admin-Menü → Verwalten → *Zutaten zum Testen*
* **Speichern im Admin-Menü geht nicht:** Der Admin muss in der Nähe der ersten Werbetafel stehen (250 m)
* **Restaurant lässt sich nicht löschen:** Es hat noch offene App-Bestellungen – erst abschließen oder stornieren
* **App öffnet nicht:** `Config.App.RequireItem = true`? Dann wird das Item `eats_tablet` gebraucht
* **Mehr Ausgaben:** `Config.Debug = true`

### Changelog

**1.1.0 (25.10.2026)** – Wild-Rezepte (Wildburger, Kaninchen-Eintopf, Hirschragout), abschaltbar mit `Config.WildRecipes = false`; Kasse mit klareren Knöpfen; Großhandel-Bestellliste repariert.

**1.0.0 (17.10.2026)** – erste Veröffentlichung. Alle Änderungen stehen in `CHANGELOG.md` in der Ressource.

### Support

Ticket in unserem [Discord](https://discord.gg/6NaFJWKDYu) (Kategorie „Script Support“) öffnen und den Kauf vorher mit `/verify` verknüpfen.
