Jimathy666 for his support and for his bridging system
🧾 SQL & Garage Notes
Run sayer-restaurants.sql to enable the offline shop system.
The garage uses jim-jobgarage.
If not using it, set your Garage config to false.
With jim-jobgarage:
Without jim-jobgarage:
📁 Items Required
You must add the following items to item management system.
Images are provided in the images folder and sourced from:
👉 MK Items
Click to view qbcore itemsClick to view ox_inventory items
🍽️ Restaurant Configuration
This is a breakdown of your restaurant setup structure.
Use this as a template to create or edit locations (MUST BE IN OWN LUA FILE).
Click to view example structure
🛒 Offline Shop
Setup an NPC-based offline shop for players to purchase from when staff are not online.
These are setup for each restaurant (optional)
Restuarant owners/employees must stock the shop with items and set the prices
🧑🍳 Crafting Recipes
Recipes are broken down into categories based on station type. here are some examples but you can create any type you wish (These are unique to each restaurant):
PrepStation – ingredient prep
CookStation – final food items
DrinkStation – drinks
BagSpot – takeaway bags
Example: CookStation Recipe
🍽️ Consumables
This script comes with a built-in consumable system which can be toggled on/off using Config.Consumables.Enable
Variables Inside Each Item in Config.Consumables.Items and What They Do?
Type = 'food' or 'drink' or 'alcohol'
Emote = The emote you want to do while consuming item
Time = in (ms) the time it takes to Consume
Hunger = How much hunger to replenish after consuming
Thirst = How much thirst to replenish after consuming
Restaurants = Restaurants or {}
Restaurants['burgershot'] = { --unique code per location
Enabled = true, --enable or disable the entire location.
Label = "Burgershot",
DebugPoly = true, --shows boxzones for this location
Job = 'burgershot', --jobcode
UseCleanHands = true, --enables the clean hands on this business. (NEEDS ATLEAST 1 STATION LIKE BELOW)
Blip = { --adds blips to location
{ShowBlip = true,Location = vector3(-1181.69, -881.54, 13.82),Sprite = 106,Colour = 1,Label = "Burgershot"},
},
Duty = { --add duty toggles
{coords = vector3(-1193.29, -898.1, 14.8), L = 0.4, W = 0.4, H = 35, Minz = 14.2, Maxz = 15.1, D = 2.0,},
},
CleanHands = { --add clean hands station
{ID = "BS_cleanhands_1",coords = vector3(-1197.45, -902.48, 14.0), L = 0.6, W = 2.2, H = 35, Minz = 13.6,Maxz = 14.4,D = 2.0},
},
Stashes = { --add stashes (Types can be created/edited in Config.lua)
{ID = "BS_counter_1",Type = 'Counter',coords = vector3(-1193.92, -894.22, 14.0), L = 0.6, W = 1, H = 305, Minz = 13.4, Maxz = 14.4, D = 2.0,Weight = 20000,Slots = 10},
{ID = "BS_counter_2",Type = 'Counter',coords = vector3(-1195.26, -892.27, 14.0), L = 0.6, W = 1, H = 305, Minz = 13.4, Maxz = 14.4, D = 2.0,Weight = 20000,Slots = 10},
{ID = "BS_Store_2",Type = 'Storage',coords = vector3(-1203.58, -895.73, 14.0), L = 1.6, W = 0.8, H = 35, Minz = 13.2, Maxz = 15.4, D = 2.0,Weight = 100000,Slots = 40,},
{ID = "BS_Store_1",Type = 'Storage',coords = vector3(-1197.82, -894.41, 14.0), L = 4.4, W = 1.2, H = 35, Minz = 14.0, Maxz = 14.8, D = 2.0,Weight = 100000,Slots = 40,},
},
CraftStation = { -- add crafting stations for employees
{Type = "PrepStation",coords = vector3(-1199.48, -902.32, 14.0), L = 1.4, W = 0.8, H = 35, Minz = 13.4, Maxz = 14.4, D = 2.0},
{Type = "CookStation",coords = vector3(-1201.59, -898.98, 14.0), L = 2.4, W = 0.8, H = 35, Minz = 13.4, Maxz = 14.4, D = 2.0},
{Type = "DrinkStation",coords = vector3(-1199.43, -895.39, 14.0), L = 2.2, W = 0.6, H = 35, Minz = 13.8, Maxz = 15.0, D = 2.0},
},
Register = { --add cash registers
{coords = vector3(-1193.35, -895.18, 14.0), L = 0.4, W = 0.6, H = 35, Minz = 13.8, Maxz = 14.6, D = 2.0,},
},
ShopMenu = { --add office menu
{coords = vector3(-1206.84, -891.84, 14.0), L = 0.6, W = 0.4, H = 35, Minz = 14.0, Maxz = 15.2, D = 2.0,},
},
Garage = {
{ --requires jim-jobgarage
PedModel = 's_m_m_linecook',
Vehicle = {
["stalion2"] = {
CustomName = "BS Stalion", --name in menu
colors = { 1 }, -- colours -- found here https://altv.stuyk.com/docs/articles/tables/vehicle-colors.html
grade = 1, --job grade
performance = { 2, 3, 3, 2, 4, true },
trunkItems = { --items that spawn in the trunk
{ name = "lockpick", amount = 1, info = {}, type = "item", slot = 1, }, --test
},
},
},
PedPosition = vector4(-1175.88, -892.73, 13.8, 316.41),
SpawnVehicle = vector4(-1164.08, -891.36, 13.59, 120.26),
},
},
DJBooth = { --this is just an example (MUST HAVE JIM-DJBOOTH TO USE THIS) (lets you create music/speakers in your business)
Enable = false, --enable/disable music
ControlCoords = vector3(0,0,0), --where the employee controls the music
SoundCoords = vector3(0,0,0), --where the music itself comes from
Radius = 200, -- how far the music reaches
},
OfflineShop = { -- for when nobody is online.
Ped = {
Model = 's_m_m_linecook',
Coords = vector4(-1179.62, -886.23, 13.8, 319.68),
},
Stock = { --things the ped will sell (prices are set by boss of job) (items must be in stock to show in menu to customer)
'chicken_wrap',
'fries',
'chicken_nuggets',
'onion_rings',
'stackburger',
'cheeseburger',
'cola',
'coffee',
'milkshake',
},
},
IngredientShop = {
label = "Fast Food Wholesale",
slots = 11,
items = {
[1] = {name = "burgermeat", price = 5,amount = 50,info = {},type = "item",slot = 1,},
[2] = {name = "burgerbun", price = 5,amount = 50,info = {},type = "item",slot = 2,},
[3] = {name = "lettuce", price = 5,amount = 50,info = {},type = "item",slot = 3,},
[4] = {name = "tomato", price = 5,amount = 50,info = {},type = "item",slot = 4,},
[5] = {name = "potato", price = 5,amount = 50,info = {},type = "item",slot = 5,},
[6] = {name = "syrup", price = 5,amount = 50,info = {},type = "item",slot = 6,},
[7] = {name = "milkshake_formula", price = 5,amount = 50,info = {},type = "item",slot = 7,},
[8] = {name = "cheese", price = 5,amount = 50,info = {},type = "item",slot = 8,},
[9] = {name = "chicken", price = 5,amount = 50,info = {},type = "item",slot = 9,},
[10] = {name = "tortilla_wrap", price = 5,amount = 50,info = {},type = "item",slot = 10,},
[11] = {name = "onion", price = 5,amount = 50,info = {},type = "item",slot = 11,},
},
},
Recipes = {
["PrepStation"] = { --must match a craft station from above
["tomato_slice"] = { --itemcode to make
MakeTime = 5, --how long to make item
AmountReceived = 5, -- how many items to recieve
Emote = "knucklecrunch", --emote to do when crafting
ingredients = { --all the ingredients required to make it
{item = "tomato", amount = 1, },
}
},
["lettuce_chopped"] = {
MakeTime = 5,
AmountReceived = 3,
Emote = "knucklecrunch",
ingredients = {
{item = "lettuce", amount = 1, },
}
},
["onion_slice"] = {
MakeTime = 5,
AmountReceived = 3,
Emote = "knucklecrunch",
ingredients = {
{item = "onion", amount = 1, },
}
},
["fries_raw"] = {
MakeTime = 5,
AmountReceived = 3,
Emote = "knucklecrunch",
ingredients = {
{item = "potato", amount = 1, },
}
},
["cheese_slice"] = {
MakeTime = 5,
AmountReceived = 5,
Emote = "knucklecrunch",
ingredients = {
{item = "cheese", amount = 1, },
}
},
},
["CookStation"] = {
["chicken_wrap"] = {
MakeTime = 10,
AmountReceived = 1,
Emote = "bbq",
ingredients = {
{item = "chicken", amount = 1, },
{item = "lettuce_chopped", amount = 1, },
{item = "tortilla_wrap", amount = 1, },
}
},
["fries"] = {
MakeTime = 10,
AmountReceived = 1,
Emote = "bbq",
ingredients = {
{item = "fries_raw", amount = 1, },
}
},
["chicken_nuggets"] = {
MakeTime = 10,
AmountReceived = 1,
Emote = "bbq",
ingredients = {
{item = "chicken", amount = 2, },
}
},
["onion_rings"] = {
MakeTime = 10,
AmountReceived = 3,
Emote = "bbq",
ingredients = {
{item = "onion_slice", amount = 3, },
}
},
["stackburger"] = {
MakeTime = 10,
AmountReceived = 1,
Emote = "bbq",
ingredients = {
{item = "burgermeat", amount = 3, },
{item = "burgerbun", amount = 1, },
{item = "cheese_slice", amount = 1, },
{item = "lettuce_chopped", amount = 1, },
{item = "onion_slice", amount = 1, },
}
},
["cheeseburger"] = {
MakeTime = 10,
AmountReceived = 1,
Emote = "bbq",
ingredients = {
{item = "burgerbun", amount = 1, },
{item = "cheese_slice", amount = 1, },
{item = "lettuce_chopped", amount = 1, },
{item = "onion_slice", amount = 1, },
{item = "burgermeat", amount = 1, },
}
},
},
["DrinkStation"] = {
["cola"] = {
MakeTime = 5,
AmountReceived = 1,
Emote = "atm",
ingredients = {
{item = "syrup", amount = 1, },
}
},
["coffee"] = {
MakeTime = 5,
AmountReceived = 1,
Emote = "atm",
ingredients = {
{item = "coffee_beans", amount = 1, },
}
},
["milkshake"] = {
MakeTime = 5,
AmountReceived = 1,
Emote = "atm",
ingredients = {
{item = "milkshake_formula", amount = 1, },
}
},
},
["BagSpot"] = {
["murderbag"] = {
MakeTime = 1,
AmountReceived = 1,
Emote = "keyfob",
ingredients = {
{item = "paper", amount = 1, },
}
},
},
},
}
OfflineShop = { -- for when nobody is online.
Ped = {
Model = 's_m_m_linecook',
Coords = vector4(-1179.62, -886.23, 13.8, 319.68),
},
Stock = { --things the ped will sell (prices are set by boss of job) (items must be in stock to show in menu to customer)
'chicken_wrap',
'fries',
'chicken_nuggets',
'onion_rings',
'stackburger',
'cheeseburger',
'cola',
'coffee',
'milkshake',
},
},