Documentation

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

  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:
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
  1. Database: the 16 tables (pepper_eats_*) are created automatically on start. Without CREATE permission, import install/pepper_eats.sql beforehand
  2. Start the server – the console shows Pepper Eats … started
  3. In-game, run /eatsadmin → New restaurant (see below)

First test

  1. /eatsadmin → New restaurant, choose a name and template, set the business to "purchasable" or enter a job.
  2. Use Let's go to place the sign, time clock, office, register and the template's stations, then Create.
  3. Clock in at the time clock and fill the storage via admin menu → Manage → Ingredients for testing.
  4. Cook a recipe at a station and sell the dish to another player at the register.
  5. Open the delivery app with /eats and 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

  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.

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.