Pepper Eats
Create and run restaurants in-game – cooking with six minigames, staff, register, wholesale, restaurant levels 1–50 with upgrades, jobs for quiet times and a delivery app with drivers, ratings and vouchers for ESX, QBCore and Qbox.
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
| Dependency | Required/optional | Used for | Link |
|---|---|---|---|
| FiveM server build 7290 or newer | required | Per fxmanifest.lua (/server:7290) |
https://runtime.fivem.net/artifacts/fivem/ |
| OneSync | required | Stations, deliveries and NPCs on the server | https://docs.fivem.net/docs/scripting-reference/onesync/ |
| ESX Legacy, QBCore or Qbox | required | Money, jobs, status (Config.Framework = 'auto' detects it) |
https://github.com/esx-framework/esx_core · https://github.com/qbcore-framework/qb-core · https://github.com/Qbox-project/qbx_core |
| oxmysql | required | 16 tables pepper_eats_* (MySQL 8 / MariaDB 10.x) |
https://github.com/overextended/oxmysql |
| ox_lib | required | Helpers | https://github.com/overextended/ox_lib |
| ox_inventory | required | Ingredients, dishes, storage and fridge with metadata | https://github.com/overextended/ox_inventory |
| ox_target or qb-target | optional | Target stations, otherwise a help text with a key | https://github.com/overextended/ox_target |
| lb-phone | optional | Delivery app on the phone | https://lbscripts.com |
| Pepper Hunting | optional | Hunters butcher their venison for the game recipes | Pepper Hunting |
Installation
- Download the resource from the Cfx.re Portal (Granted Assets)
- Extract it to
resources/[pepper]/pepper_eats– do not rename - Items: add the entries from
install/ox_items_en.lua(English) orinstall/ox_items.lua(German) toox_inventory/data/items.luaand copy all images frominstall/images/toox_inventory/web/images/ - Check
config/config.lua(language, currency, interaction) andconfig/server.luafor webhooks - Start it in
server.cfgafter the dependencies:
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
- Database: the 16 tables (
pepper_eats_*) are created automatically on start. Without CREATE permission, importinstall/pepper_eats.sqlbeforehand - Start the server – the console shows
Pepper Eats … started - In-game, run
/eatsadmin→ New restaurant (see below)
First test
/eatsadmin→ New restaurant, choose a name and template, set the business to "purchasable" or enter a job.- Use Let's go to place the sign, time clock, office, register and the template's stations, then Create.
- Clock in at the time clock and fill the storage via admin menu → Manage → Ingredients for testing.
- Cook a recipe at a station and sell the dish to another player at the register.
- Open the delivery app with
/eatsand place an order at your own restaurant.
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 |
Sign
Config.Sign = {
Mode = 'dui',
HeadingOffset = 0.0,
}
'dui' shows logo and name as an image on the sign, 'text' only 3D text as a fallback. If the sign appears rotated in
game, set HeadingOffset = 180.0.
Restaurants
| Option | Default | Description |
|---|---|---|
Config.Restaurants.MaxSpread |
150.0 |
All stations at most this far (m) from the first sign |
Config.Restaurants.AdminRange |
250.0 |
How close the admin must be to the first sign when saving |
Config.Restaurants.DefaultPrice |
150000 |
Suggested price for purchasable restaurants |
Config.Commands.Admin / Bills |
'eatsadmin' / 'eatsbills' |
Command names |
Creating a restaurant
/eatsadmin→ New restaurant- General: name, template, color, logo – the preview shows the sign
- Operation: job (job name + grades) or purchasable (price)
- Sign & stations: Let's go starts the guided placement. Place with
E, rotate with the mouse wheel,Page up/downfor height,Xto skip an optional station,Zto go back,ESCto finish. The first sign is the anchor point; all stations must be within 150 m of it - 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.
- 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
- The kitchen accepts (otherwise automatically cancelled after 5 minutes, money refunded), cooks and packs at the pass
- The order goes to staff with the
deliverpermission for 60 seconds, then to all drivers in driver mode - The driver picks up the delivery bag at the pass, follows the waypoint and hands over from 4 m away
- 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.
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 |
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.
Commands and permissions
| Command | Who | What |
|---|---|---|
/eatsadmin |
Admin | Admin menu: overview, create/edit/delete restaurants, owner, level, money, ingredients |
/eats |
everyone | Delivery app (Config.App.Command, key via Config.App.Key or FiveM key bindings) |
/eatsbills |
everyone | View and pay your own open invoices |
/eatstaskcancel |
Staff | Cancel the running job if the tablet is not nearby |
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.
Keys
While placing stations: E place, mouse wheel rotate, Page Up/Down height, X skip an optional station,
Z back, ESC finish. The delivery app has no key by default (Config.App.Key = ''); every player sets one in the
FiveM key bindings.
Exports
Server:
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 }
exports.pepper_eats:wildRecipes() -- game recipes enabled? (Config.WildRecipes)
Client:
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
FAQ
Pepper Eats does not start.
oxmysql, ox_lib, your framework and ox_inventory must start before pepper_eats. On a successful start the console shows
Pepper Eats 1.1.0 started (…).
Item images are missing.
Copy all images from install/images/ to ox_inventory/web/images/ and add the items from install/ox_items_en.lua (or
ox_items.lua) to ox_inventory/data/items.lua.
Do I need to import the SQL file?
No. The script creates its 16 tables pepper_eats_* on start and adds missing columns. You only need install/pepper_eats.sql
without CREATE rights.
The sign is rotated or invisible from the front.
Set Config.Sign.HeadingOffset = 180.0. If the image sign causes problems, Config.Sign.Mode = 'text' switches to 3D text.
Cooking says "No ingredients".
Fill the storage via wholesale. For testing: admin menu → Manage → Ingredients for testing.
Saving in the admin menu does not work.
The admin must stand near the first sign (at most 250 m, Config.Restaurants.AdminRange).
A restaurant cannot be deleted.
It still has open app orders. Complete or cancel them first.
The delivery app does not open.
Is Config.App.RequireItem = true? Then the player needs the item eats_tablet.
Do I need Pepper Hunting for the game recipes?
No. The game ingredients are sold at wholesale. With Pepper Hunting, hunters can also butcher their venison.
Config.WildRecipes = false hides game recipes and game ingredients completely.
Can a restaurant be a framework job?
Yes. Choose "job" when creating it. Config.JobGrades sets which job grade is which rank, and with
Config.Account.Society = true job restaurants book to the society account.
How does the app work on the phone?
If lb-phone is running, the delivery app is also available as a phone app. Without lb-phone it opens with /eats or the key.
How do I change texts or the language?
Language via Config.Locale ('de' or 'en'), texts in locales/de or locales/en. Item names live in
ox_inventory/data/items.lua.
How do I get more output for troubleshooting?
Set Config.Debug = true and turn it off again afterwards.
Support
Discord → ticket (category "Script Support") at https://discord.gg/6NaFJWKDYu, link your purchase with /verify first.
Permanently tested on the Pepper Scripts dev server.
Changelog
Current: 1.1.0 (2026-10-25) with game recipes (Config.WildRecipes) and the export wildRecipes(). All changes are
on the changelog page and in CHANGELOG.md in the resource.
Found a mistake? Report it on Discord.