Items
F5 Shadow Market ships with one usable item: market_tablet (the "Shadow Tablet"). Using it opens the market UI. The item is registered by the bridge via the framework's usable-item API (CreateUseableItem on QB/QBox, RegisterUsableItem on ESX).
| Item name | Inventory label | Weight (g) | Icon file |
|---|---|---|---|
market_tablet | Shadow Tablet | 1000 | market_tablet.png |
The item name is configurable via F5Cfg.Item in config.lua — if you rename it, register the new name in your inventory instead.
If you set F5Cfg.Command.mode = 'command_always' the item is not required — players open the market with /market. See Commands. In the default 'item_or_command' mode the player must carry the tablet for either the item or the command to work.
Step 1 — Copy the Item Icon
Copy f5_shadowmarket/item/market_tablet.png into your inventory's image folder. The filename must match exactly (lowercase).
| Inventory | Icons folder |
|---|---|
ox_inventory | ox_inventory/web/images/ |
qb-inventory | qb-inventory/html/images/ |
qs-inventory | qs-inventory/html/images/ |
ps-inventory | ps-inventory/html/images/ |
codem-inventory | codem-inventory/html/itemimages/ |
tgiann-inventory | see note below |
| ESX native | (no icon folder required) |
tgiann-inventory serves item images from a separate inventory_images resource in .webp format (nui://inventory_images/images/<name>.webp). Convert market_tablet.png to market_tablet.webp and place it there.
The ESX native inventory adapter does not resolve item images — the market shows a generic placeholder for inventory items. This is a known limitation of that adapter; use a third-party inventory (e.g. ox_inventory) on ESX if you want item icons.
Step 2 — Register the Item
- QBCore
- QBox Core
- ESX
Open f5_shadowmarket/item/QBCORE.TXT. Pick one method.
Method A (recommended) — qb-core/shared/items.lua
Paste the entry inside the QBShared.Items = { … } table:
['market_tablet'] = {
name = 'market_tablet',
label = 'Shadow Tablet',
weight = 1000,
type = 'item',
image = 'market_tablet.png',
unique = true,
useable = true,
shouldClose = true,
combinable = nil,
description = 'A crypto-encrypted tablet granting access to the Shadow Market.'
},
Then restart qb-core:
restart qb-core
Method B — runtime registration (no qb-core edits)
Drop this into any server-side .lua in a resource that runs after qb-core:
CreateThread(function()
while GetResourceState('qb-core') ~= 'started' do Wait(100) end
exports['qb-core']:AddItems({
['market_tablet'] = { name='market_tablet', label='Shadow Tablet', weight=1000, type='item', image='market_tablet.png', unique=true, useable=true, shouldClose=true, combinable=nil, description='A crypto-encrypted tablet granting access to the Shadow Market.' },
})
end)
QBox ships with ox_inventory and bridges item definitions from qbx_core/shared/items.lua into ox_inventory at runtime — so you only need to register the item in one place. Open f5_shadowmarket/item/QBXCORE.TXT.
Method A (recommended) — qbx_core/shared/items.lua
Paste inside the returned return { … } table:
['market_tablet'] = {
label = 'Shadow Tablet',
weight = 1000,
stack = false,
close = true,
description = 'A crypto-encrypted tablet granting access to the Shadow Market.',
consume = 0,
client = {
image = 'market_tablet.png',
},
},
Then restart qbx_core:
restart qbx_core
Method B (fallback) — ox_inventory/data/items.lua
Only if your install does not propagate items from qbx_core into ox_inventory:
['market_tablet'] = { label='Shadow Tablet', weight=1000, stack=false, close=true, description='A crypto-encrypted tablet granting access to the Shadow Market.', client={ image='market_tablet.png' } },
The tablet uses consume = 0 — it is a reusable key, not consumed on use. The script never removes it.
ESX Legacy uses the SQL items table. Import f5_shadowmarket/item/ESX.SQL:
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('market_tablet', 'Shadow Tablet', 1000, 0, 1)
ON DUPLICATE KEY UPDATE
`label` = VALUES(`label`),
`weight` = VALUES(`weight`),
`rare` = VALUES(`rare`),
`can_remove` = VALUES(`can_remove`);
How to import:
- Open your database with HeidiSQL, phpMyAdmin or DBeaver.
- Select the database used by oxmysql / mysql-async (e.g.
esx_legacy). - Run the file once.
restart es_extended(or callESX.RefreshItems()server-side).
The SQL above only populates the native ESX items table. If you run a third-party inventory on ESX (ox_inventory, qs-inventory, codem-inventory, …), follow that inventory's own item-definition procedure instead — for ox_inventory, use the QBox Method B snippet above.
Step 3 — Restart and Test
Give yourself the item to verify it works:
- QBCore
- QBox Core
- ESX
giveitem <serverId> market_tablet 1
giveitem <serverId> market_tablet 1
giveitem <serverId> market_tablet 1
Or via ox_inventory if installed:
additem <serverId> market_tablet 1
Use the item from your inventory — the market UI should open.
Renaming the Item
To use a different item name:
- Change
F5Cfg.Iteminconfig.lua:
F5Cfg.Item = 'shadow_phone'
- Register the new item name in your inventory (Step 2 above) with the same icon and a label of your choice.
The bridge registers whatever F5Cfg.Item points to as the usable item, so no other change is needed.
See Also
- Installation — full installation flow
- Commands — opening the market via item vs command
- Configuration → General —
F5Cfg.ItemandF5Cfg.Command - Framework Compatibility — per-inventory image paths and limitations