> 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/jobs/pepper-eats.md).

# Pepper Eats

Restaurants, cooking minigames, restaurant levels 1–50 and a delivery app with drivers – for ESX, QBCore and Qbox.

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

> 🧪 **Tested on our dev server:** Of course we test all scripts continuously on our own dev server “Pepper Scripts”.

### Overview

With Pepper Eats, admins create as many restaurants as they like directly in-game with `/eatsadmin` – no restart needed. Each restaurant gets a **sign with logo and name** that makes the location visible to all players, plus stations such as grill, fryer, oven, bar, register, storage and clock-in point. A restaurant runs either as a **framework job** (e.g. `burgershot`) or is **purchasable** – then a player buys it at the sign and runs it themselves.

Cooking uses **six minigames**; performance determines the quality and stars of a dish, and with them its price and effect. Staff, wages, register, invoices, wholesale and menu are all handled through the **boss tablet**. A **restaurant level 1–50** with upgrades and a **job board** keep owners and employees busy even when the server is quiet. Customers order through the **delivery app** – delivery is done by free drivers or the restaurant's own staff, or the customer picks the order up themselves.

### Features

* **Create restaurants in-game**, as many as you need: name, color, logo (13 included or your own image URL), template, operating mode, guided placement of sign and stations
* **Sign with logo and name** (in-game image, not a prop replacement), "Open/Closed" status, stars per level tier; lit, neon or animated via upgrade
* **5 templates:** Burger, Pizzeria, Bar/Club, Café/Bakery and Free – each with matching stations and recipes
* **45 recipes, 57 ingredients**, all ox\_inventory items with ready-made images (105 items)
* **Game recipes:** wild game burger, rabbit stew and venison ragout – ingredients from wholesale, with Pepper Hunting also from your own hunt; can be turned off with `Config.WildRecipes = false`
* **6 minigames:** Chopping, Grilling, Kneading, Pouring, Mixing, Assembling – quality 0–100 and 1–5 stars
* **Effects:** hunger, thirst, stress, stamina and speed bonuses, alcohol with BAC, breathalyzer item and sobering up
* **Shelf life:** ingredients and dishes spoil, cold storage slows it down
* **Boss tablet** with overview, jobs, level & upgrades, staff, menu, promotions, wholesale, account, settings and leaderboard
* **Staff:** 5 ranks with 9 permissions, hire, promote, fire, wages per time on duty paid from the business account (with AFK protection)
* **Register:** build an order, make an offer to the customer (cash/card) or issue an invoice with a due date (`/eatsbills`)
* **Business account** with a transaction list; for job restaurants optionally the society account (esx\_addonaccount, qb-banking, Renewed-Banking, qb-management)
* **Wholesale:** delivery to storage, or pick up yourself at the wholesale market for less
* **Restaurant level 1–50** with 10 tier names, recipe unlocks, menus from level 5 and **8 upgrades** (kitchen, storage, cold room, staff, menu, wholesale, sign, job book)
* **Personal level 1–50** across all restaurants with 10 titles and easier minigames
* **Job board for quiet times:** catering and office orders at 32 locations, prep, cleaning (hygiene), wholesale market run, advertising with flyers, inventory check – plus a weekly task and bonus XP when the server is quiet
* **Delivery app** (command, key or tablet item): discover restaurants, order with escrow, delivery or pickup, tips, progress, ratings
* **Kitchen monitor and driver mode:** accept, pack, delivery bag, waypoint, handover; staff get 60 seconds priority
* **Ratings** for restaurant and driver, one reply from the restaurant, admins can delete
* **Vouchers and daily specials** (from restaurant level 10), also redeemable at the register
* **lb-phone app:** with lb-phone, "Pepper Eats" appears automatically as a phone app
* **Admin overview** of all restaurants (level, account, duty, orders, revenue, rating, hygiene) and admin tools
* 4 Discord webhooks, server and client exports
* German & English; config, locale files, bridges and install files are open

### Requirements

| Requirement        | Version                                                              |
| ------------------ | -------------------------------------------------------------------- |
| FiveM server build | ≥ 7290                                                               |
| OneSync            | required                                                             |
| Framework          | ESX Legacy, QBCore or Qbox (`Config.Framework = 'auto'` detects it)  |
| Database           | MySQL 8 / MariaDB 10.x via oxmysql                                   |
| Inventory          | ox\_inventory                                                        |
| Target             | optional – ox\_target or qb-target, otherwise a hint text with a key |

### Dependencies

* [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 or qb-target, lb-phone

### Installation

1. Download the resource from the Cfx.re Portal (Granted Assets)
2. Extract it to `resources/[pepper]/pepper_eats` – **do not rename**
3. **Items:** add the entries from `install/ox_items_en.lua` (English) or `install/ox_items.lua` (German) to `ox_inventory/data/items.lua` and copy all images from `install/images/` to `ox_inventory/web/images/`
4. Check `config/config.lua` (language, currency, interaction) and `config/server.lua` for webhooks
5. Start it in `server.cfg` after the dependencies:

```cfg
ensure oxmysql
ensure ox_lib
ensure es_extended        # or qb-core / qbx_core
ensure ox_inventory
# ensure ox_target        # optional – or qb-target
# ensure lb-phone         # optional – app on the phone
ensure pepper_eats

add_ace group.admin pepper_eats.admin allow
```

6. Database: the 16 tables (`pepper_eats_*`) are created automatically on start. Without CREATE permission, import `install/pepper_eats.sql` beforehand
7. Start the server – the console shows `Pepper Eats … started`
8. In-game, run `/eatsadmin` → **New restaurant** (see below)

### Configuration

| File                     | Contents                                                                                                                                                                                          |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config/config.lua`      | Language, framework, admin groups, interaction, currency, commands, sign, placement, cooking, storage, effects, alcohol, spoilage, account, wages, staff, menu, register, invoices, purchase/sale |
| `config/templates.lua`   | Templates (color, logos, blip, stations, allowed recipes)                                                                                                                                         |
| `config/ranks.lua`       | Ranks, permissions, default wages, job grades                                                                                                                                                     |
| `config/signs.lua`       | Sign types (wall, pole, stand …)                                                                                                                                                                  |
| `config/ingredients.lua` | Ingredients: category, wholesale price, shelf life                                                                                                                                                |
| `config/recipes.lua`     | Recipes: steps, station, minigame, ingredients, price range, effect, level                                                                                                                        |
| `config/wholesale.lua`   | Wholesale markets (location, NPC, blip), delivery time, pickup discount                                                                                                                           |
| `config/progression.lua` | Level curve, tier names, upgrades with prices, personal level                                                                                                                                     |
| `config/tasks.lua`       | Jobs, drop-off locations, flyer points, hygiene, weekly tasks, quiet times                                                                                                                        |
| `config/delivery.lua`    | Delivery app: command/key, order, delivery fee, drivers, ratings, vouchers, daily specials, lb-phone                                                                                              |
| `config/server.lua`      | Webhooks, admin ACE, allowed logo hosts, version notice (never sent to clients)                                                                                                                   |

Key options:

| Option                                         | Default           | Description                                                                           |
| ---------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------- |
| `Config.Locale`                                | `'de'`            | Language (`'de'` or `'en'`) – set `'en'` for English                                  |
| `Config.Interaction`                           | `'auto'`          | `ox_target` → `qb-target` → hint text                                                 |
| `Config.Currency`                              | `'$'`             | Currency symbol                                                                       |
| `Config.Sign.Mode`                             | `'dui'`           | `'dui'` = image sign, `'text'` = 3D text only                                         |
| `Config.Sign.HeadingOffset`                    | `0.0`             | Sign rotated in-game? Set `180.0`                                                     |
| `Config.Account.Society`                       | `false`           | Job restaurants book to the society account                                           |
| `Config.Level.XpMultiplier`                    | `1.0`             | XP required per level (`0.5` = twice as fast)                                         |
| `Config.WildRecipes`                           | `true`            | Game recipes and game ingredients; `false` = hidden (Pepper Hunting is not required)  |
| `Config.App.Key`                               | `''`              | Key for the app (players can change it in the FiveM key bindings)                     |
| `Config.App.RequireItem`                       | `false`           | App only with the item `eats_tablet`                                                  |
| `Config.Delivery.BaseFee` / `PerKm` / `MaxFee` | `15` / `6` / `80` | Delivery fee                                                                          |
| `Config.Delivery.StaffFee`                     | `'driver'`        | If staff deliver: fee + tip go to the driver or to the business account (`'account'`) |
| `Config.PromoLevel`                            | `10`              | From this level on, vouchers and daily specials are available                         |

### Permissions

Admins are players with the ACE permission `pepper_eats.admin` or a group from `Config.AdminGroups`.

Inside a restaurant, ranks apply (ascending, the last one is the owner):

| Rank       | Permissions (default)           |
| ---------- | ------------------------------- |
| Trainee    | cook                            |
| Cook       | cook, register, deliver         |
| Shift lead | + storage/wholesale, open/close |
| Manager    | + menu, staff, promotions       |
| Owner      | + business account, upgrades    |

Permissions: `cook`, `register`, `deliver`, `stock`, `open`, `menu`, `staff`, `promo`, `finance` – per rank in `config/ranks.lua`. For job restaurants, `Config.JobGrades` (editable per restaurant in the admin menu) defines which job grade maps to which rank. For purchasable restaurants, the owner invites staff through the boss tablet.

### Creating a restaurant

1. `/eatsadmin` → **New restaurant**
2. **General:** name, template, color, logo – the preview shows the sign
3. **Operation:** job (job name + grades) or purchasable (price)
4. **Sign & stations:** **Let's go** starts the guided placement. Place with `E`, rotate with the mouse wheel, `Page up/down` for height, `X` to skip an optional station, `Z` to go back, `ESC` to finish. The first sign is the anchor point; all stations must be within 150 m of it
5. **Create** – the restaurant is live immediately, with blip and sign, for all players

Required stations: sign, clock-in point, office, register and the stations of the template. Others (pickup counter, pass, storage, cooling, additional grills …) can be added at any time.

### Daily life in the restaurant

* **Clock-in point:** clock in = on duty. The restaurant is open as long as someone is on duty and it has not been closed
* **Cooking:** pick the recipe at the station; each step is a minigame. Ingredients come from storage → cooling → inventory, the finished dish goes to the inventory or onto the pass
* **Register:** choose dishes, select a nearby customer, offer cash/card or write an invoice. The customer receives paid dishes in their inventory
* **Boss tablet** at the office: account, staff, menu (from the template's recipes, prices within the allowed range), menus, wholesale, logo (purchasable restaurants), upgrades, jobs
* **Wages** are paid by the business account per minute on duty; anyone who is AFK gets nothing

### Levels, upgrades and jobs

The restaurant earns XP from cooking (depending on quality), revenue, jobs and the weekly task; with hygiene at 90 % or above there is 10 % more. Level 50 takes about 80 hours of normal operation (`Config.Level.XpMultiplier`). New recipes unlock with the level, menus from level 5, vouchers and daily specials from level 10.

The owner buys upgrades from the business account: kitchen equipment (quality), storage, cold room, staff slots, menu, wholesale discount, sign (lit, neon, animated) and job book.

**Jobs** (tablet → Jobs, on duty only): 5 per day (+ upgrade), one per person:

| Job                     | Process                                    | Reward                               |
| ----------------------- | ------------------------------------------ | ------------------------------------ |
| Catering / office order | Cook dishes and hand them in at a location | Money + XP                           |
| Prep                    | 3 chopping rounds                          | Semi-finished goods (+5 quality)     |
| Cleaning                | Clean dirty spots                          | Hygiene                              |
| Wholesale market run    | Pick up goods at the wholesale market      | XP                                   |
| Advertising             | Hand out flyers at points                  | Restaurant is highlighted in the app |
| Inventory check         | Sort out expired items                     | Partial refund                       |

When the server is quiet (few players or no app order for a long time), XP is multiplied by 1.5.

### Delivery app

Open it with `/eats`, a freely selectable key or the item `eats_tablet`; with **lb-phone** also as a phone app. Tabs: **Discover**, **Orders**, **Drive**, **Kitchen** (staff on duty only) and **Invoices**.

1. The customer picks an open restaurant, adds dishes/menus to the cart, chooses delivery or pickup, optionally a voucher and a tip. The money is charged and held **in escrow**
2. The kitchen accepts (otherwise automatically cancelled after 5 minutes, money refunded), cooks and **packs at the pass**
3. The order goes to staff with the `deliver` permission for 60 seconds, then to all drivers in driver mode
4. The driver picks up the **delivery bag** at the pass, follows the waypoint and hands over from 4 m away
5. On handover the restaurant receives the goods value, the driver the fee and tip; the customer can then leave a rating

Pickup: the customer collects the finished order at the **pickup counter** (only if the restaurant has one).

Failure cases: decline or cancellation → full refund; driver goes offline or aborts → order goes back; customer offline for too long → order cancelled; refunds to offline customers are paid out on their next login.

### Commands

| Command      | Permission | Purpose                                                                                 |
| ------------ | ---------- | --------------------------------------------------------------------------------------- |
| `/eatsadmin` | Admin      | Admin menu: overview, create/edit/delete restaurants, owners, level, money, ingredients |
| `/eats`      | everyone   | Delivery app (key in the FiveM key bindings)                                            |
| `/eatsbills` | everyone   | View and pay your own open invoices                                                     |

### Webhooks

In `config/server.lua` (empty = off):

| Webhook    | Contents                                                                                                                |
| ---------- | ----------------------------------------------------------------------------------------------------------------------- |
| `admin`    | Restaurants created, changed, deleted, owner, level set, rating deleted                                                 |
| `business` | Open/close, purchase, sale, handover, account movements from `ServerConfig.WebhookMoneyMin` (admin transactions always) |
| `orders`   | Delivery app cancellations (declined, not accepted, by customer, customer offline)                                      |
| `security` | Suspected cases from the plausibility check                                                                             |

### Exports

Server:

```lua
exports.pepper_eats:getRestaurants()            -- all restaurants (public view)
exports.pepper_eats:getRestaurant(id)           -- one restaurant or nil
exports.pepper_eats:isOpen(id)                  -- open?
exports.pepper_eats:getDuty(source)             -- restaurant ID the player is on duty in
exports.pepper_eats:getRank(source, id)         -- rank of the player (nil = not part of it)
exports.pepper_eats:getLevel(id)                -- { level, xp, stage }
exports.pepper_eats:addRestaurantXp(id, xp)     -- grant XP (e.g. event script)
exports.pepper_eats:getRating(id)               -- average, count
exports.pepper_eats:getBalance(id)              -- account balance
exports.pepper_eats:addBalance(id, amount, note) -- book (< 0 fails if balance is too low)
exports.pepper_eats:getOpenOrders(id)           -- open app orders
exports.pepper_eats:isDriver(source)            -- in driver mode?
exports.pepper_eats:getAlcohol(source)          -- BAC
exports.pepper_eats:applyEffects(source, fx)    -- effect as when eating: { 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()   -- current delivery as driver { id, status, restaurant } or nil
```

### Framework integration

Everything framework-specific is open in `bridge/`: money (cash/bank), jobs and job changes, inventory (ox\_inventory: storage, metadata, consumption), status (hunger/thirst/stress per framework), society accounts and notifications. Your own adjustments belong there.

### Troubleshooting

* **Sign rotated or invisible from the front:** `Config.Sign.HeadingOffset = 180.0`
* **Image sign causes problems:** `Config.Sign.Mode = 'text'` switches to 3D text
* **Item images missing:** copy the images from `install/images/` to `ox_inventory/web/images/`
* **"No ingredients":** fill the storage via wholesale; for testing, admin menu → Manage → *Ingredients for testing*
* **Saving in the admin menu doesn't work:** the admin must stand near the first sign (250 m)
* **Restaurant can't be deleted:** it still has open app orders – complete or cancel them first
* **App won't open:** `Config.App.RequireItem = true`? Then the item `eats_tablet` is required
* **More output:** `Config.Debug = true`

### Changelog

**1.1.0 (2026-10-25)** – game recipes (wild game burger, rabbit stew, venison ragout), can be turned off with `Config.WildRecipes = false`; clearer register buttons; wholesale order list fixed.

**1.0.0 (2026-10-17)** – first release. All changes are listed in `CHANGELOG.md` inside the resource.

### Support

Open a ticket in our [Discord](https://discord.gg/6NaFJWKDYu) (category “Script Support”) and link your purchase with `/verify` first.
