Realistic Coffee Job (ESX)

coffee


Summary

coffee job is basically a coffee shop system that is a whitelisted job (has a boss and employees) and provides different types of coffee to citizens


Purpose

you can make a purpose for this job, it means you can add effects for drinking coffee

for example you have a stress or happiness system like the hunger and thirst and you want to add products and ways on your city that provides effect on mental health for the citizens, so why not just adding a coffee shop ?


Video

https://streamable.com/a1rr57

please pay attention that the advanced boss menu you see on video is another script by me
if somehow you are intrested check this link : ESX Society Remastered + More Options



How it Works

  1. Coffee workers are in city and available so players will go to the coffee shop and order coffees to workers then barista will cook the coffee

  2. Coffee workers are not in city or they are off duty, so players can go to coffeeshop again and buy coffees from a marker but with limited count (to avoid spamming) and a cooldown (by default every 30minutes players can buy 3 coffee maximum when workers are offline)

https://streamable.com/lj4jbr



Cooking Menu


coffee workers or baristas have a very cool and light UI in order to cook

they can see the ingredients for each type of coffee with image, so everything is easy and user friendly for workers, they also can select the amount of coffee (1 to 10)


Customer Menu

there is a marker that citizens can open it and check the menu like real life !

you can put any image or edit the image for your own brand or server name with different prices



Coffee Types

  • Cappuccino
  • Mocha
  • Espressoo
  • Black Coffee
  • Ice Coffee
  • Hot Chocolate
  • McCoffee
  • Nescafe
  • Normal Coffee

Ingredients

  • Coffee Powder
  • Espresso Powder
  • McCoffee Powder
  • Nescafe Powder
  • Milk
  • Chocolate
  • Cream
  • Ice
  • Sugar



Delivery

delivery system provides 2 benefits :

1. delivery to customers

maybe the coffee shop has a number right ? so you will add a number at coffee shop then customers will contact to the workers, they set the order and coffee shop will deliver the coffees to customers


2. delivery missions

when coffee workers are free or they don’t have many customers they can go to delivery missions that will keep the worker busy and not bored also worker will get money for each mission and some money will adds to society too when the mission is done

https://streamable.com/c368a0



Features

  • fully open source
  • usage is 0.01 for non workers and 0.03 - 0.04 for workers
  • included 9 types of real coffees around the world
  • everything can be changed at config.lua
  • workers can do delivery missions when they have no customers
  • customers can see the coffee menu like real life
  • great UI cooking with recipes
  • you can add more ingredients and coffees
  • supports billing system



Config File


Config                            = {}
Config.DrawDistance               = 30.0
local second = 1000
local minute = 60 * second

Config.Locale                     = 'en'
Config.EnableBilling              = true

Config.EsxTriggerName             = 'esx:getSharedObject' -- change the trigger name if you have an anti cheat that detects this trigger
Config.BillingTriggerName         = 'esx_billing:sendBill' -- change the trigger name if you have an anti cheat that detects this trigger
Config.SocietyBossMenu            = 'esx_society:openBossMenu' -- change the trigger name if you have an anti cheat that detects this trigger
Config.ActionMenuKey              = 'F5'

Config.Blip = {
	location = vector3(-634.75, 225.66, 80.88),
	size = 1.2,
	color = 10,
	blipid = 537,
	name = 'coffee'
}

-- if coffee workers are offline then players can buy coffee in offline mode from a menu inside the coffeeshop
-- but when a worker is online the offline buy menu gets disabled so players have to order coffee to the worker
-- offline mode for buying coffees will increase your server RP and sometimes workers are not online and player needs coffee 
Config.OfflineBuyLimit            = 3 
Config.OfflineBuyCooldown         = 30 * minute
-- for example OfflineBuyLimit is 3 and OfflineBuyCooldown is 30minutes, it means players can only buy 3 coffee each 30 minutes (for avoid spamming)
-- we should not let player to buy unlimited amount of coffee right ? it make sense cus it might hurt the job !

-- Reward for coffee when players buy coffee while workers are offline
Config.OfflineReward              = true -- if its true then when a player buys coffee when workers are not online then the payed amount goes to coffee society
Config.OfflineRewardPercentage    = 100 -- for example if player buys a coffee for 30$, 30$ will be deposited in boss society

-- Delivery Car

Config.DeliveryCoodown            = 5 * minute -- if worker ended the mission then after how long he can again goes for delivery ? default 5min
Config.SocietyRewardDelivery      = 30 -- 30 percentage reward for boss when a coffee worker delivers items, it does not decrease the worker reward
Config.PrefixPlate                = 'coffee' -- if you spawn a delivery car from coffee parking, the car plate will start with prefix characters, for example the first car you take out would be "coffee1"
Config.AuthorizedVehicles = {
    { name = 'kalahari',  label = 'Delivery Car' }
}

Config.HighRankGrade = 4 -- minimum of grade to be highrank, highranks can access stock inventory

Config.Zones = {

    Cloakrooms = {
        Pos   = { x = -634.75, y = 225.66, z = 80.88 },
        Size  = { x = 1.5, y = 1.5, z = 1.0 },
        Color = { r = 255, g = 187, b = 255 },
        Type  = 1,
    },
	
	CustomerMenu = {
		Pos   = { x = -632.83, y = 235.89, z = 80.88 },
		Size  = { x = 1.5, y = 1.5, z = 0.5 },
		Color = { r = 255, g = 0, b = 255 },
		Type  = 1,
	},
	
	ListMenu = {
		Pos   = { x = -632.80, y = 233.70, z = 80.88},
		Size  = { x = 1.5, y = 1.5, z = 0.5 },
		Color = { r = 255, g = 0, b = 255 },
		Type  = 1,
	},

    BossActions = { --
        Pos   = { x = -634.66, y = 228.03, z = 80.88 },
        Size  = { x = 1.5, y = 1.5, z = 1.0 },
        Color = { r = 0, g = 100, b = 0 },
        Type  = 1,
    },
	
    Stock = {
        Pos   = { x = -621.99, y = 311.81, z = 82.93 },
        Size  = { x = 1.6, y = 1.6, z = 1.0 },
        Color = { r = 0, g = 255, b = 255 },
        Type  = 1,
    },

    Vehicles = {
        Pos          = { x = -619.23, y = 285.39, z = 80.62 },
        SpawnPoint   = { x = -618.64, y = 280.36, z = 80.62 },
        Size         = { x = 1.8, y = 1.8, z = 1.0 },
        Color        = { r = 210, g = 105, b = 30 },
        Type         = 1,
        Heading      = 166.34,
    },

    VehicleDeleters = {
        Pos   = { x = -618.64, y = 280.36, z = 80.62 },
        Size  = { x = 3.0, y = 3.0, z = 0.2 },
        Color = { r = 255, g = 0, b = 0 },
        Type  = 1,
    },
	
	Cooking = {
        Pos   = { x = -635.24, y = 235.67, z = 80.88 },
        Size  = { x = 1.5, y = 1.5, z = 0.5 },
        Color = { r = 248, g = 248, b = 255 },
        Type  = 1,
	},

-----------------------
-------- SHOPS --------

    Shop1 = { --
		Pos   = { x = -631.56, y = 227.77, z = 80.88 },
        Size  = { x = 1.2, y = 1.2, z = 0.7 },
        Color = { r = 0, g = 0, b = 150 },
        Type  = 1,
        Items = {
            { name = 'milk',      	label = 'Milk',   price = 0 },
            { name = 'chocolate',   label = 'Chocolate',   price = 0 },
            { name = 'cream',       label = 'Cream',    price = 0 },
            { name = 'ice',    		label = 'Ice',  price = 0 },
            { name = 'sugar',    	label = 'Sugar', price = 0 },
        },
    },

    Shop2 = { --
        Pos   = { x = -631.11, y = 224.14, z = 80.88 },
        Size  = { x = 1.2, y = 1.2, z = 0.7 },
        Color = { r = 238, g = 110, b = 0 },
        Type  = 1,
        Items = {
            { name = 'coffee_powder',     label = 'Coffee Powder',     price = 0 },
            { name = 'espresso_powder',   label = 'Espresso Powder', price = 0 },
            { name = 'mccoffee_powder',   label = 'McCoffee Powder',   price = 0 },
            { name = 'nescafe_powder',    label = 'Nescafe Powder', price = 0 },
        },
    },

}

 -- using 3dme will increase the RP value, when worker starts to make a coffee a text will appear above his head that he is making the coffee
Config.Using3dme                  = true -- set it true if you are using 3dme
Config.CookingTime                = 10 * second
Config.CookingCoords             = vector3(-635.24, 235.67, 80.88) -- it must be exact same as Config.Zones.Cooking
Config.CookingHeading            = 2.9 -- when starts to cooking which heading ped must be

Config.Uniforms = {
  coffee_outfit = {
    male = {
        ['tshirt_1'] = 6,  ['tshirt_2'] = 0,
        ['torso_1'] = 11,   ['torso_2'] = 1,
        ['decals_1'] = 0,   ['decals_2'] = 0,
        ['arms'] = 11,
        ['pants_1'] = 28,   ['pants_2'] = 0,
        ['shoes_1'] = 10,   ['shoes_2'] = 0,
        ['chain_1'] = 0,  ['chain_2'] = 0
    },
    female = {
        ['tshirt_1'] = 39,   ['tshirt_2'] = 0,
        ['torso_1'] = 7,    ['torso_2'] = 0,
        ['decals_1'] = 0,   ['decals_2'] = 0,
        ['arms'] = 3,
        ['pants_1'] = 6,   ['pants_2'] = 0,
        ['shoes_1'] = 6,    ['shoes_2'] = 0,
        ['chain_1'] = 0,    ['chain_2'] = 0
    }
  }
}

-- for each delivery it requires 3 type of coffee in order to make and deliver, you can set the random amount for them
-- it means first item amount would be a number between 10 to 20
-- for example first item would be 15 espresso

Config.MinCoffeeItem1 = 10
Config.MaxCoffeeItem1 = 20

Config.MinCoffeeItem2 = 10
Config.MaxCoffeeItem2 = 20

Config.MinCoffeeItem3 = 10
Config.MaxCoffeeItem3 = 20

-- this one is for out of city location
-- when delivery is out of city then we need to make it worth so worker have enough motivation to deliver the items :))
-- if the location is out city then min and max of items can be increased
Config.MinCoffeeItemsForOutCity = 20 -- for all 3 items
Config.MaxCoffeeItemsForOutCity = 40 -- for all 3 items

-- change the reward price for each coffee at server/delivery.lua
Config.DeliveryListItems = {
	[1] = {name = 'cappuccino', label = 'Cappuccino'},
	[2] = {name = 'mochacoffee', label = 'Mocha'},
	[3] = {name = 'espressoo', label = 'Espressoo'},
	[4] = {name = 'blackcoffee', label = 'Black Coffee'},
	[5] = {name = 'icecoffee', label = 'Ice Coffee'},
	[6] = {name = 'hotchocolate', label = 'Hot Chocolate'},
	[7] = {name = 'mccoffee', label = 'Mccoffee'},
	[8] = {name = 'nescafe', label = 'Nescafe'},
	[9] = {name = 'coffee', label = 'Normal Coffee'},
}

Config.Delivery = {
-------------------------------------------Los Santos

	[1] = {
		Pos   = vector3(118.65, -819.05, 30.30),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[2] = {
		Pos   = vector3(-743.17, -1128.32, 9.60),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[3] = {
		Pos   = vector3(-1546.71, -469.60, 34.49),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[4] = {
		Pos   = vector3(-457.06, -13.64, 44.70),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},	
	[5] = {
		Pos   = vector3(455.50, 126.56, 98.22),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[6] = {
		Pos   = vector3(964.25, -626.87, 56.43),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[7] = {
		Pos   = vector3(890.85, -2340.45, 29.35),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[8] = {
		Pos   = vector3(-964.11, -2072.55, 8.41),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[9] = {
		Pos   = vector3(-996.14, -2970.40, 12.95),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[10] = {
		Pos   = vector3(-96.27, 425.67, 112.06),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[11] = {
		Pos   = vector3(-1239.20, 487.87, 92.34),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[12] = {
		Pos   = vector3(8.17, -258.68, 46.32),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'incity',
	},
	[13] = {
		Pos   = vector3(1907.06, 3704.79, 31.75),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[14] = {
		Pos   = vector3(1446.51, 3658.13, 33.26),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[15] = {
		Pos   = vector3(49.00, 3656.79, 38.60),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[16] = {
		Pos   = vector3(-128.13, 1927.34, 196.07),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[17] = {
		Pos   = vector3(2565.15, 372.96, 107.46),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[18] = {
		Pos   = vector3(2539.43, 4639.11, 33.25),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[19] = {
		Pos   = vector3(1688.20, 4773.45, 40.92),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
	[20] = {
		Pos   = vector3(-3170.53, 1299.68, 13.74),
		Color = {r = 204, g = 204, b = 0},
		Size  = {x = 7.0, y = 7.0, z = 3.0},
		Color = {r = 204, g = 204, b = 0},
		Type  = 'outcity',
	},
}



Requirements

  • requirements :
  • esx (legacy or old esx)
  • esx_basicneeds
  • esx_society
  • progressbar (optional)
  • mythic notify (optional)
  • esx_billing (optional)
  • 3dme (optional)



Tebex Link

you can buy the script from HERE



Also Check my Newest Project

recently I have made one of my biggest project that is esx_society remastered version , in other words I made a huge revolution for esx servers
the link : ESX Society Remastered + More Options



my Other Script

Uber Eats (ESX, QB)
ESX Society Remastered
Realistic Fast Food
Advanced Lock System
ESX Car Bomb
ESX Books + Reading
VIP List + Test Drive
ESX Craft System
ESX Jobs List
ESX Document Robbery
ESX Multiple Simcards



Code is accessible Yes
Subscription-based No
Lines (approximately) more than 1000
Requirements esx
Support Yes anytime
2 Likes

Haven 't you posted this before ? Because I’ve already seen it…

Hello, how to translate the content of the coffee menu?

Hello, I can’t get the item in the shops, it prompts an error, can you help me

message me at direct

Update :

  • now works with all inventory system
  • works with legacy
  • you can use any notification system u want

Is this blue menu esx menu default? if so where can i find it?

you can customize esx_menu_default resource for it
all you have to do is changing css styles

Can i have your style.css? I like it! @equalize_r