🛒 [PAID] [Standalone][ESX][QBCore] Store system V2 - Black market system | Shop system | Shop robberies | Advanced Shops | Customizable Shops | Shops | UI | Burevestnik

Thanks :green_heart:

2 Likes

Update 2.0.1 of all versions

  • Fixed a bug where in some cases it was possible to buy more items than indicated in the final cost.
  • Improved UI responsiveness.
  • Minor mistakes.

:mega: Contact me if you have any questions.

Is there a way to use qb-target to open the shop instead of pressing E? Really love this shop UI but most of my server is using targets.

1 Like

Hello, only if you implement qb-target yourself in the unencrypted version. :cowboy_hat_face:

Update 2.1.0 of all versions

  • Added the ability to register several police jobs.
  • Added the ability to register several jobs for robbery.
  • Distance algorithms have been redesigned.
  • Fixed a bug where ms could reach the limit values.
  • Fixed a bug where in some cases the UI could be broken by interacting.
  • Improved algorithms of robbery functions.
  • Deprecated methods have been removed.
  • Improved UI responsiveness.

:mega: Contact me if you have any questions.

Update 2.2.0 of all versions

  • The configuration file has been completely redesigned.
  • Added the ability to configure any store. You are no longer limited in the types of stores and their contents.
  • Added export to store opening from any other places.
  • Added support for :speech_balloon: Dialogue system.
New configuration file
--/* 
-- ██████╗░██╗░░░██╗██████╗░███████╗██╗░░░██╗███████╗░██████╗████████╗███╗░░██╗██╗██╗░░██╗
-- ██╔══██╗██║░░░██║██╔══██╗██╔════╝██║░░░██║██╔════╝██╔════╝╚══██╔══╝████╗░██║██║██║░██╔╝
-- ██████╦╝██║░░░██║██████╔╝█████╗░░╚██╗░██╔╝█████╗░░╚█████╗░░░░██║░░░██╔██╗██║██║█████═╝░
-- ██╔══██╗██║░░░██║██╔══██╗██╔══╝░░░╚████╔╝░██╔══╝░░░╚═══██╗░░░██║░░░██║╚████║██║██╔═██╗░
-- ██████╦╝╚██████╔╝██║░░██║███████╗░░╚██╔╝░░███████╗██████╔╝░░░██║░░░██║░╚███║██║██║░╚██╗
-- ╚═════╝░░╚═════╝░╚═╝░░╚═╝╚══════╝░░░╚═╝░░░╚══════╝╚═════╝░░░░╚═╝░░░╚═╝░░╚══╝╚═╝╚═╝░░╚═╝*/

Config = {}

--If ESX = false and QBCore = false, then Standalone will turn on

--Are you using ESX?
Config.UseESX = true

--Enable this if ESX throws an error: Used the getSharedObject Event, this event no longer exists!
Config.UseESX_lib = false

--Are you using QBCore?
Config.UseQBCore = false

--Interaction Button
Config.ShopOpenButton = 38

--Do you want to be able to rob the cash register?
Config.Robberies = true

--Random robbery time from 10 to 30 seconds
Config.TimeRob = math.random(10,30)

--Random reward for robbery from $50 to $500
Config.MoneyRob = math.random(50,500)

--Interaction Button
Config.RobButton = 23

--Do you want to use the job for robberies
Config.UseJobRobESX = true

--Do you want to use the job for robberies
Config.UseJobRobQBCore = false

--Job for a police
Config.JobPolice = {"police", "unemployed"}

--Job for a robbery
Config.JobRob = {"gang1", "unemployed"}

--Objects for robbery
Config.ObjeRob = {'prop_till_01'}

--Cooldown to robbery
Config.Cooldown = 600000 --10 min

function BlackMarketLocations()
    local locationsTable = { --Store locations [Black Market]
		vector3(0.6, -1824.3, 28.5),
		vector3(679.0, -897.3, 22.4),
		vector3(-125.9, 1895.7, 196.3),
		vector3(124.9, 6644.6, 30.7),
	}
    --Return a random element from the locations table
    return locationsTable[math.random(#locationsTable)]
end

Config.Shops = {
	{
		shopName = "24/7", --Store name
		interactionDistance = 2.0, --Distance for interaction with the store
		useStreetNameShop = true, --Do you want to use name of the street (Shop) if false then streen name = "Secret"
		alternativeStreetNameShop = "burevestnik.tebex.io", --It will work if useStreetNameShop = false
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 59, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 25, --Blip color.
		blipText = "24/7", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the store. If "all", then everyone can interact with the store.
		locations = { --Store locations
			vector3(25.7, -1347.2, 28.4),
			vector3(373.8, 325.8, 102.5),
			vector3(2557.4, 382.2, 107.6),
			vector3(-3038.9, 585.9, 102.5),
			vector3(-3241.9, 1001.4, 11.8),
			vector3(547.4, 2671.7, 41.1),
			vector3(1961.4, 3740.6, 31.3),
			vector3(2678.9, 3280.6, 54.2),
			vector3(1729.2, 6414.1, 34.0),
		},
		categories = { --Minimum 0 categories, maximum 4
			"Water",
			"Meal",
			"Tools",
			"Various",
		},
		products = {
			{ --Category 1
				{'orange',"Orange",9,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'bread',"bread",10,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer','Beer v1',4,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer1','Beer v2',22,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer2','Beer v3',25,120},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer3','Beer box',27,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer4','Beer v4',31,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 2
				{'pizza','Pizza',5,15},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'burger',"Burger",6,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'chips','Chips',3,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'hotdog','Hot dog',7,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'donut','Donut',46,3},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 3
				{'wrench','Wrench',194,50},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'hammer',"Hammer",191,15},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'toolkit',"Tool kit",250,60},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 4
				{'boombox','Boombox',610,40},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'fak',"First aid kit",252,20},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'fishingrod',"Fishing rod",207,200},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'gear',"Gear",208,35},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'drone',"Drone",779,800},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
		}
	},
	{
		shopName = "Robs Liquor", --Store name
		interactionDistance = 2.0, --Distance for interaction with the store
		useStreetNameShop = true, --Do you want to use name of the street (Shop) if false then streen name = "Secret"
		alternativeStreetNameShop = "burevestnik.tebex.io", --It will work if useStreetNameShop = false
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 59, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 25, --Blip color.
		blipText = "Robs Liquor", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the store. If "all", then everyone can interact with the store.
		locations = { --Store locations
			vector3(1135.8, -982.2, 45.4),
			vector3(-1222.9, -906.9, 11.3),
			vector3(-1487.5, -379.1, 39.1),
			vector3(-2968.2, 390.7, 14.0),
			vector3(1166.0, 2708.9, 37.1),
			vector3(1392.5, 3604.6, 33.9),
			vector3(-1393.4, -606.6, 29.3),
			vector3(-559.9, 287.0, 81.1),
		},
		categories = { --Minimum 0 categories, maximum 4
			"Water",
			"Meal",
			"Tools",
			"Various",
		},
		products = {
			{ --Category 1
				{'orange',"Orange",9,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'bread',"bread",10,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer','Beer v1',4,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer1','Beer v2',22,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer2','Beer v3',25,120},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer3','Beer box',27,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer4','Beer v4',31,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 2
				{'pizza','Pizza',5,15},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'burger',"Burger",6,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'chips','Chips',3,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'hotdog','Hot dog',7,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'donut','Donut',46,3},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 3
				{'wrench','Wrench',194,50},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'hammer',"Hammer",191,15},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'toolkit',"Tool kit",250,60},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 4
				{'boombox','Boombox',610,40},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'fak',"First aid kit",252,20},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'fishingrod',"Fishing rod",207,200},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'gear',"Gear",208,35},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'drone',"Drone",779,800},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
		}
	},
	{
		shopName = "LTD Gasoline", --Store name
		interactionDistance = 2.0, --Distance for interaction with the store
		useStreetNameShop = true, --Do you want to use name of the street (Shop) if false then streen name = "Secret"
		alternativeStreetNameShop = "burevestnik.tebex.io", --It will work if useStreetNameShop = false
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 59, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 25, --Blip color.
		blipText = "LTD Gasoline", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the store. If "all", then everyone can interact with the store.
		locations = { --Store locations
			vector3(-48.5, -1757.5, 28.4),
			vector3(1163.3, -323.8, 68.2),
			vector3(-707.5, -914.2, 18.2),
			vector3(-1820.5, 792.5, 137.1),
			vector3(1698.3, 4924.4, 41.0),
		},
		categories = {  --Minimum 0 categories, maximum 4
			"Water",
			"Meal",
			"Tools",
			"Various",
		},
		products = {
			{ --Category 1
				{'orange',"Orange",9,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'bread',"bread",10,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer','Beer v1',4,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer1','Beer v2',22,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer2','Beer v3',25,120},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer3','Beer box',27,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'beer4','Beer v4',31,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 2
				{'pizza','Pizza',5,15},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'burger',"Burger",6,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'chips','Chips',3,12},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'hotdog','Hot dog',7,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'donut','Donut',46,3},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 3
				{'wrench','Wrench',194,50},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'hammer',"Hammer",191,15},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'toolkit',"Tool kit",250,60},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
			{ --Category 4
				{'boombox','Boombox',610,40},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'fak',"First aid kit",252,20},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'fishingrod',"Fishing rod",207,200},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'gear',"Gear",208,35},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'drone',"Drone",779,800},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
		}
	},
	{
		shopName = "Black Market", --Store name
		openCooldown = 600000, --10 min
		statusCooldown = false, --10 min
		interactionDistance = 2.0, --Distance for interaction with the store
		useStreetNameShop = true, --Do you want to use name of the street (Shop) if false then streen name = "Secret"
		alternativeStreetNameShop = "burevestnik.tebex.io", --It will work if useStreetNameShop = false
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 429, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 2, --Blip color.
		blipText = "Black Market", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"test", "unemployed"}, --Jobs that can interact with the store. If "all", then everyone can interact with the store.
		locations = {BlackMarketLocations()}, --Store locations
		categories = { --Minimum 0 categories, maximum 4
			--"Basic",
		},
		products = {
			{ --Category 1 
				{'weed','Weed',14,100},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'bag','Bag',17,10},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'gloves','Gloves',-3,3},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'bong','Bong',62,5},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
				{'binoculars','Binoculars',63,200},  --1 - the name of the item in the database | 2 - label | 3 - the name of the image of the item in the img package | 4 - price
			},
		}
	}
}

Config.Translation = {
    ['menu'] = 'Press ~INPUT_CONTEXT~ to ~g~interact',
	['buy1'] = 'You bought: ~g~',
	['buy2'] = ' ~w~- ~g~$',
    ['nomoney'] = '~r~You do not have enough Money!',
	['noaccess'] = '~r~Bro, get out of here!',
	['robbery1'] = 'Press ~g~F~w~ to rob',
	['robbery2'] = 'You stole: ',
	['robbery3'] = '~g~$',
}

--Exports
--exports.Burevestnik_shops:bur_open_shop_by_id(1)  --where the number is the store id

:mega: Contact me if you have any questions.

The script is very very good. The support is really very very good <3

1 Like

Thanks for the review :heart:

1 Like

Update 2.3.0 of all versions

  • Redesigned notifications.
  • The ability to configure police notifications has been added to the configuration file so that you can edit it as you wish.

:mega: Contact me if you have any questions.

+1 The script is really perfect, the support is really fast!

1 Like

Thanks you for the review :purple_heart:

Can we change currency to pay with? Like dirty money or an item?

1 Like

Hello @smittyxfriends
Unfortunately, no.

Huge script, with a giant possibility of costumization. I even needed same help from the dev and he gave me quick support and solution for my situation. Thanks and continue the good work mate.

1 Like

I think we can mate. I have changed it from cash to bank money mate. :smiley:

1 Like

Thanks for the review :heart:

You can do this by changing the code only in the open version of the resource, but this cannot be done conveniently through the configuration file. :slightly_smiling_face:

Update 2.3.1 of all versions

  • Added weight system for ESX.
  • Fixed a bug that in some cases did not allow robberies to start with the QBCore framework enabled.|

:mega: Contact me if you have any questions.

very nice shop, bought it and got really good support. 10/10 <3

1 Like

Thank you very much! :green_heart:

1 Like