Summary
this script provides a realistic black market system for ordering items/vehicles/weapons
after player finished his order the delivery box or vehicle will be arrived from sky with an attached parachute
Video
How It Works ?
-
player goes to one of the black markets (weapons/items/vehicles)
-
selects the goods
-
pays the money at cart (can be by bank account or dirty money)
-
a delivery location will be chosen for player
-
a timer shows up until the delivery arrives (like 2 minutes)
-
player goes to the location and waits
-
when the timer is done the delivery will appear on sky
-
the package or vehicle will be dropped to the ground
-
the second timer shows up for taking the delivery
-
takes the delivery and its done
Market Types
-
there are 3 type of black markets : vehicles/items/weapons
-
each shop has its own categories (the tabs on list)
-
you can also adds the vehicle packs into the shop (the vehicles you added for your server)
-
players can only order one vehicle at vehicles market
-
players can only order one of each weapon (for example he cannot order 2 pistol50)
-
players can order different quantities of each item at items market
-
payment can be done by dirty money or bank account (you choose at config file)
-
dirty money can be an item or account (depends on your server)
Categories (tabs on menu)
- at config file you can define or change the categories by your desire
- you can put any item of your server
- you can put any vehicle of your server (including vehicle packs and vip cars)
- and also for weapons
Days System
you can set some products can be sold only at certain days like Thursday and Sundays, so the script will be challenging and more realistic for players to buy some rare products
for example you want the keycard only be sold at monday, tuesday and wednesday
so the structure would be like this at config file :
days = {‘monday’, ‘tuesday’, ‘wednesday’}
Quantity System
for each items or weapons you can set the quantity system, for example you set the “Bullpup Rifle” quantity to 3, so after 3 of that is sold the status will be changed to “out of stock”
this also will increase the challenging and realistic
an example :
you can see Assault SMG is limited by days and Bullpop Rifle is out of stock
Police/Sheruff Notification
there is a chance that security employees like police or sheriff get notification of the delivery
you can set your own security jobs for each location, for example sheriff job
for each type of delivery there is a chance amount at config file that you can change them for each type of delivery
example at config file :
Config.ItemsNotifyPoliceChance = 20
Config.WeaponsNotifyPoliceChance = 50
Config.VehiclesNotifyPoliceChance = 10
if the chance happens then police or sheriff will get an alarm and a located sign on the map
Possible Cases
1. player gets dc
at this case the order will be canceled, money will return into player bank account or dirty money into his pocket
2. canceling the order before arrival
player can cancel the order before delivery arrives but some of the money will be deducted as a penalty and the rest of the money will return (for example 20% penalty)
3. not taking the order
if the delivery box or vehicle has been arrived and player does not take it after a certain time then again there will be a penalty when the money is returned (for example 40% penalty)
at all these cases the quantity of each product that he ordered will be added to the shop again
Delivery Features
- players cannot take someone’s delivery
- players cannot kill shop peds or do anything to them
- players cannot damage delivery boxes or parachutes
- players cannot damage vehicles while dropping from sky
- no bug at all while delivery
Easy to Setup
not only we have a lot features and editable settings at config file but also its very easy to do the changes or adding stuffs, there are guide comments for each part
Features
- supporting all types of dirty money (item or account)
- good resmon 0.00 ms (passive) and 0.01 (while ordering)
- easy to config
- not bug at all (we tested every case)
- considered all possible cases and for each there is a feedback
- police/sheriff notification (you will set the job names)
- very cool and realistic UI
- supporting all garage systems of esx and qbcore
- supporting all versions of esx and qbcore
Config Files
Base
Config = {}
-- ESX OPTIONS
Config.UseESX = true -- if you are using esx
Config.ESXTrigger = "esx:getSharedObject" -- Put your ESX Object Trigger Right Here
Config.ESXLegacyLatestVersion = false -- if you are using the last version of esx legacy then set it true
-- also you need to add this code on fxmanifest.lua and set Config.ESXTrigger empty
-- shared_script '@es_extended/imports.lua'
-- QB OPTIONS
Config.UseQB = false -- if you are using qb
Config.QBExport = "qb-core" -- Put your QB Object Export
Config.CancelCommand = 'cancelorder'
Config.UsingTNotify = false --if false then it will use the default esx or qb notification
Delivery
-- police notify when delivery is on process, if the chance happens then police get the alarm and location blip
Config.ItemsNotifyPoliceChance = 20
Config.WeaponsNotifyPoliceChance = 50 -- weapons are not joke so we set to 50 or more
Config.VehiclesNotifyPoliceChance = 10
Config.UseTimerForBlip = false -- if its false then blip will not disappear until the delivery is finished
Config.TimerForBlip = 50000 -- if Config.UseTimerForBlip is true then set the timer in milliseconds, after the timer is finished the blip will disappear from police players
Config.AlarmBlipType = 'normal' -- pulse or normal
Config.PulseAlarmSettings = { -- if you are using pulse alarm
iconId = 161, -- https://docs.fivem.net/docs/game-references/blips/
scale = 1.5,
color = 3,
}
Config.NormalAlarmSettings = {
iconId = 364, -- https://docs.fivem.net/docs/game-references/blips/
scale = 0.8,
color = 1,
alpha = 250
}
Config.MessageIcon = 'CHAR_BLANK_ENTRY'
Config.DeliveryName = 'Black Market'
Config.DeliveryEmployeeName = 'mr X'
Config.GetDeliveryKey = 38 -- by default [E]
Config.FreezeBoxAfterDrop = true -- when the box reaches out the ground it gets freezed so it wont move
Config.UsingFlareForBox = true -- when the delivery box is dropped then use a flare to player, this feature uses ShootSingleBulletBetweenCoords function so if your anti cheat has problem with that set it false
Config.UsingSoundOnBox = false -- a sound will play when player gets close to the box
Config.TextColorAboveBox = {r = 255, g = 255, b = 255} -- text color that shows up above the box, in locale file its about ['take_your_order']
Config.PenaltyPercentage = 20 -- if player cancels the order 30 percentage of the total money will decrease and the reset will return to his bank account
Config.PenaltyPercentageForNotTaking = 40 -- if delivery box is arrived but player does not take it then after a certain time delivery will be canceled but with more penalty
Config.TimerAfterDelivery = 30 -- after the box landed on the ground player has 30 sec to take it otherwise the order will be canceled
Config.PlateLetters = 3 -- for vehicles
Config.PlateNumbers = 3 -- for vehicles
Config.PlateUseSpace = true -- for vehicles
Config.DefaultGarage = 'pillboxgarage' -- for qb
Config.UseDirtyMoneyForBuy = false -- if you set it true it will get player dirty money instead of bank account
-- for qb users if usign dirty moneysystem
-- in qb usually there are 2 type of dirty money, some server uses dirty money as an item some other uses as an account
Config.QBDirtyMoneyType = 'item' -- if its not account then its is item, if its not an item then set account
Config.QBDirtyMoneyName = 'black_money' -- Whether its an item or account set the name
-- remember to add many points because if a point is busy by a buyer then that point cannot be used by another player and has to wait until the buyer gets done with it
-- and if all the points are busy then a message will tells the player to wait
Config.VehicleDeliveryPoints = {
[1] = {
Coords = vector3(1361.49, 3092.61, 39.53),
Timer = 120, -- in seconds, after 2 minutes the order will be dropped from sky
BoxBlipID = 94,
BoxBlipColor = 3,
BoxBlipSize = 1.0,
BoxBlipName = 'Delivery',
SecurityJob = 'sheriff'
},
[2] = {
Coords = vector3(1361.49, 3092.61, 39.53),
Timer = 120,
BoxBlipID = 94,
BoxBlipColor = 3,
BoxBlipSize = 1.0,
BoxBlipName = 'Delivery',
SecurityJob = 'sheriff'
},
}
Config.ItemDeliveryPoints = {
[1] = {
Coords = vector3(-1522.49, -2596.61, 14.0),
Timer = 120,
BoxBlipID = 94,
BoxBlipColor = 3,
BoxBlipSize = 1.0,
BoxBlipName = 'Delivery Box',
SecurityJob = 'police'
},
}
Config.WeaponDeliveryPoints = {
[1] = {
Coords = vector3(-1522.49, -2596.61, 14.0),
Timer = 120,
BoxBlipID = 94,
BoxBlipColor = 3,
BoxBlipSize = 1.0,
BoxBlipName = 'Delivery Box',
SecurityJob = 'police'
},
}
Markets
Config.MarkerPoints = {
[1] = {
ShopCategory = 'vehicles', -- we have 3 categories : vehicles, items, weapons
Coords = vector3(288.73, -1723.69, 28.31),
NPCModel = GetHashKey('csb_car3guy1'), -- https://docs.fivem.net/docs/game-references/ped-models/
NPCHeading = 226.18,
Blip = {
Show = true,
BlipSize = 1.2,
BlipID = 439,
BlipColor = 3,
BlipText = 'Vehicle Market'
}
},
[2] = {
ShopCategory = 'items',
Coords = vector3(-1574.6, -2553.98, 13.5),
NPCModel = GetHashKey('a_m_m_polynesian_01'),
NPCHeading = 226.18,
Blip = {
Show = true,
BlipSize = 1.2,
BlipID = 439,
BlipColor = 2,
BlipText = 'Items Market'
}
},
[3] = {
ShopCategory = 'weapons',
Coords = vector3(299.92, -1700.98, 28.31),
NPCModel = GetHashKey('a_m_m_rurmeth_01'),
NPCHeading = 317.0,
Blip = {
Show = true,
BlipSize = 1.2,
BlipID = 439,
BlipColor = 1,
BlipText = 'Weapons Market'
}
},
}
Items
Config.ItemCategories = {
[1] = { -- must be a unique index number
id = 'hacking', -- must be unique and lower case
label = 'Hacking', -- can be upper case
items = {
keycard = {
label = 'Keycard',
price = 20000,
image = 'keycard.png',
count = 20, -- how many at stock, if u set the count to -1 then it will become unlimited
maximum = 2, -- maximum per order, for example player can only 2 of this item
days = {'monday'},
info = 'only available on monday'
},
lockpick = {
label = 'Lockpick',
price = 15000,
image = 'lockpick.png',
count = -1, -- unlimited
maximum = 5,
days = {}, -- if u want to sell it everyday
info = ''
},
laptop = {
label = 'Hack Laptop',
price = 25000,
image = 'laptop.png',
count = -1,
maximum = 1,
days = {},
info = ''
},
}
},
[2] = {
id = 'bombs',
label = 'Bombs',
items = {
normal_c4 = {
label = 'C4',
price = 5000,
image = 'normal_c4.png',
count = 10,
maximum = 2,
days = {},
info = ''
},
remotebomb = {
label = 'Remote Bomb',
price = 5000,
image = 'remotebomb.png',
count = 10,
maximum = 1,
days = {'wednesday'},
info = 'only available on wednesday'
},
timerbomb = {
label = 'Timer Bomb',
price = 5000,
image = 'timerbomb.png',
count = 10,
maximum = 3,
days = {},
info = ''
},
instantbomb = {
label = 'Instant Bomb',
price = 5000,
image = 'instantbomb.png',
count = 10,
maximum = 1,
days = {},
info = ''
},
}
},
}
Vehicles
Config.VehicleCategories = {
[1] = { -- must be a unique index number
id = 'sport', -- must be unique and lower case
label = 'Sport', -- can be upper case
items = {
alpha = { -- must be the exact name that exist on database
label = 'Alpha',
price = 20000,
image = 'alpha.jpg', -- image name at img folder
count = 3, -- how many at stock, if u set the count to -1 then it will become unlimited
days = {'monday'}, -- which days this weapon can be available to be bought
info = 'only available on monday' -- if you want to add info about which days this weapon is available
-- when player move mouse over the item the info will show up
},
banshe = {
label = 'Banshe',
price = 30000,
image = 'banshe.jpg',
count = 3,
days = {'tuesday', 'wednesday'},
info = 'only available on tuesday, wednesday'
},
buffalo2 = {
label = 'Buffalo',
price = 30000,
image = 'buffalo2.jpg',
count = 3,
days = {},
info = ''
},
neon = {
label = 'Neon',
price = 40000,
image = 'neon.jpg',
count = 3,
days = {},
info = ''
},
pariah = {
label = 'Pariah',
price = 20000,
image = 'pariah.jpg',
count = 3,
days = {},
info = ''
},
schafter3 = {
label = 'Schafter3',
price = 50000,
image = 'schafter3.jpg',
count = 3,
days = {},
info = ''
},
}
},
[2] = {
id = 'supersport',
label = 'Super Sport',
items = {
cheetah = {
label = 'Cheetah',
price = 100000,
image = 'cheetah.jpg',
count = 3,
days = {},
info = ''
},
adder = {
label = 'Adder',
price = 100000,
image = 'adder.jpg',
count = 3,
days = {},
info = ''
},
reaper = {
label = 'Reaper',
price = 200000,
image = 'reaper.jpg',
count = 3,
days = {},
info = ''
},
}
},
[3] = {
id = 'muscle',
label = 'Muscle',
items = {
buccaneer = {
label = 'buccaneer',
price = 60000,
image = 'Buccaneer.jpg',
count = 3,
days = {},
info = ''
},
sabregt = {
label = 'Sabregt',
price = 50000,
image = 'sabregt.jpg',
count = 3,
days = {},
info = ''
},
blade = {
label = 'Blade',
price = 60000,
image = 'blade.jpg',
count = 3,
days = {},
info = ''
},
vamos = {
label = 'Vamos',
price = 65000,
image = 'vamos.jpg',
count = 3,
days = {},
info = ''
},
virgo = {
label = 'Virgo',
price = 70000,
image = 'virgo.jpg',
count = 3,
days = {},
info = ''
},
}
},
}
Weapons
Config.WeaponCategories = {
[1] = { -- must be a unique index number
id = 'rifle', -- must be unique and lower case
label = 'Rifls', -- can be upper case
items = {
weapon_advancedrifle = { -- must be the exact name that exist on database
label = 'Advanced Rifle',
price = 20000,
image = 'weapon_advancedrifle.png', -- image name at img folder
count = 20, -- how many at stock, if u set the count to -1 then it will become unlimited
days = {'monday', 'tuesday', 'wednesday'}, -- which days this weapon can be available to be bought
info = 'only available on monday, tuesday, wednesday' -- if you want to add info about which days this weapon is available
-- when player move mouse over the item the info will show up
},
weapon_assaultrifle = {
label = 'Assault Rifle',
price = 15000,
image = 'weapon_assaultrifle.png',
count = -1,
days = {}, -- if u want this weapon be available everyday
info = ''
},
weapon_assaultsmg = {
label = 'Assault SMG',
price = 10000,
image = 'weapon_assaultsmg.png',
count = 20,
days = {'thursday', 'tuesday'},
info = 'only available on thursday and tuesday'
},
weapon_bullpuprifle = {
label = 'Bullpop Rifle',
price = 12000,
image = 'weapon_bullpuprifle.png',
count = 1,
days = {},
info = ''
},
}
},
[2] = {
id = 'smg',
label = 'Smg',
items = {
weapon_smg = {
label = 'SMG',
price = 5000,
image = 'weapon_smg.png',
count = 20,
days = {},
info = 'Some Info'
},
weapon_minismg = {
label = 'Mini SMG',
price = 5000,
image = 'weapon_minismg.png',
count = 20,
days = {},
info = 'Some Info'
},
weapon_microsmg = {
label = 'Micro SMG',
price = 5000,
image = 'weapon_microsmg.png',
count = 20,
days = {},
info = 'Some Info'
},
weapon_machinepistol = {
label = 'Machine Pistol',
price = 5000,
image = 'weapon_machinepistol.png',
count = 20,
days = {},
info = 'Some Info'
},
}
},
[3] = {
id = 'pistol',
label = 'Pistol',
items = {
weapon_combatpistol = {
label = 'Combat Pistol',
price = 2000,
image = 'weapon_combatpistol.png',
count = 20,
days = {},
info = 'Some Info'
},
weapon_snspistol = {
label = 'SNS Pistol',
price = 500,
image = 'weapon_snspistol.png',
count = 20,
days = {},
info = 'Some Info'
},
}
}
}
Requirements
- ESX or QB
- t-notify (optional)
Tebex Link
You can buy the script from here
my Biggest projects
HUNK-AC (the most complate 2024 fivem anti cheat)
ESX Society Remastered + More Options
my Other Scripts
Advanced Lock System (QB, ESX)
Uber Eats (ESX, QB)
ESX Society Remastered
Realistic Fast Food
ESX Car Bomb
ESX Books + Reading
ESX Crafting System
QB Crafting System
ESX Jobs List
ESX Document Robbery
Realistic Coffee Job (ESX)
Code is accessible | No |
Subscription-based | No |
Lines (approximately) | 3000 |
Requirements | esx/qb |
Support | Yes always |