Items
F5 Board ships with nine board variants. Each one is a usable inventory item (CreateUseableItem) that triggers placement when used. The script will also fall back to opening the catalog through /board when Config.Command.requireItem = false.
Item List
| Item name | Inventory label | Prop model | Weight (g) | Icon file |
|---|---|---|---|---|
corkboard | Cork Board | prop_cork_board | 1500 | corkboard.png |
chalkboard | Chalkboard | prop_muster_wboard_01 | 1800 | chalkboard.png |
chalkboard_stand | Chalkboard (Standing) | prop_muster_wboard_02 | 2400 | chalkboardstand.png |
planning_stand | Planning Board (Stand) | p_planning_board_01 | 2200 | planningboardstand.png |
planning_board | Planning Board | p_planning_board_02 | 1600 | planningboard.png |
planning_board_v2 | Planning Board v2 | p_planning_board_03 | 1600 | planningboard.png |
whiteboard | Whiteboard | prop_w_board_blank_2 | 1700 | whiteboard.png |
greyboard | Grey Board | prop_w_board_blank | 1700 | greyboardstand.png |
brownboard | Brown Board | prop_b_board_blank | 1700 | brownboard.png |
All nine icons live in f5_board/items/icons/.
Step 1 — Copy Item Icons
Copy every PNG from f5_board/items/icons/ into your inventory's image folder. Filename must match exactly (lowercase).
| Inventory | Icons folder |
|---|---|
qb-inventory | qb-inventory/html/images/ |
ox_inventory | ox_inventory/web/images/ |
qs-inventory | qs-inventory/html/images/ |
tgiann-inventory | tgiann-inventory/html/items/ |
codem-inventory | codem-inventory/html/itemimages/ |
ps-inventory | ps-inventory/html/images/ |
| ESX native | (no icon folder required) |
Step 2 — Register the Items
- QBCore
- QBox Core
- ESX
Open f5_board/items/QbCore.txt. Pick one method:
Method A — paste into qb-core/shared/items.lua
Paste the entries inside the QBShared.Items = { … } table.
['corkboard'] = {
name = 'corkboard',
label = 'Cork Board',
weight = 1500,
type = 'item',
image = 'corkboard.png',
unique = false,
useable = true,
shouldClose = true,
combinable = nil,
description = 'Classic cork board — pin notes, photos and strings.'
},
-- ... (eight more entries — see the full file)
Then restart qb-core:
restart qb-core
Method B — runtime registration
Drop this snippet into any server-side .lua in a resource that runs after qb-core (e.g. your own server resource). No qb-core edits.
CreateThread(function()
while GetResourceState('qb-core') ~= 'started' do Wait(100) end
exports['qb-core']:AddItems({
['corkboard'] = { name='corkboard', label='Cork Board', weight=1500, type='item', image='corkboard.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Classic cork board — pin notes, photos and strings.' },
['chalkboard'] = { name='chalkboard', label='Chalkboard', weight=1800, type='item', image='chalkboard.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Wall-mounted chalkboard for quick notes and sketches.' },
['chalkboard_stand'] = { name='chalkboard_stand', label='Chalkboard (Standing)', weight=2400, type='item', image='chalkboardstand.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Freestanding chalkboard on a wooden frame.' },
['planning_stand'] = { name='planning_stand', label='Planning Board (Stand)', weight=2200, type='item', image='planningboardstand.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Mobile planning board on a tripod stand.' },
['planning_board'] = { name='planning_board', label='Planning Board', weight=1600, type='item', image='planningboard.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Wall planning board for projects and briefings.' },
['planning_board_v2'] = { name='planning_board_v2', label='Planning Board v2', weight=1600, type='item', image='planningboard.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Alternate wall planning board variant.' },
['whiteboard'] = { name='whiteboard', label='Whiteboard', weight=1700, type='item', image='whiteboard.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Dry-erase whiteboard for meetings and operations.' },
['greyboard'] = { name='greyboard', label='Grey Board', weight=1700, type='item', image='greyboardstand.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Industrial grey planning board.' },
['brownboard'] = { name='brownboard', label='Brown Board', weight=1700, type='item', image='brownboard.png', unique=false, useable=true, shouldClose=true, combinable=nil, description='Vintage brown wooden notice board.' },
})
end)
QBox ships with ox_inventory and bridges item definitions from qbx_core/shared/items.lua into ox_inventory at runtime. You only need to register items in one place.
Method A (recommended) — qbx_core/shared/items.lua
Paste inside the returned return { … } table.
['corkboard'] = {
label = 'Cork Board',
weight = 1500,
stack = true,
close = true,
description = 'Classic cork board — pin notes, photos and strings.',
client = {
image = 'corkboard.png',
},
},
-- ... (eight more entries — see f5_board/items/QbxCore.txt)
Then restart qbx_core:
restart qbx_core
Method B (fallback) — ox_inventory/data/items.lua
Only use this if your install does not propagate items from qbx_core into ox_inventory. In a stock Qbox setup you do not need Method B.
['corkboard'] = { label='Cork Board', weight=1500, stack=true, close=true,
description='Classic cork board — pin notes, photos and strings.',
client={ image='corkboard.png' } },
-- ... (eight more)
F5 Board uses stack = true (multiple items share a slot). Each placed board is tracked by database ID, so you don't need unique items.
ESX Legacy uses the SQL items table. Import the SQL file from f5_board/items/esx.sql:
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('corkboard', 'Cork Board', 1500, 0, 1),
('chalkboard', 'Chalkboard', 1800, 0, 1),
('chalkboard_stand', 'Chalkboard (Standing)', 2400, 0, 1),
('planning_stand', 'Planning Board (Stand)', 2200, 0, 1),
('planning_board', 'Planning Board', 1600, 0, 1),
('planning_board_v2', 'Planning Board v2', 1600, 0, 1),
('whiteboard', 'Whiteboard', 1700, 0, 1),
('greyboard', 'Grey Board', 1700, 0, 1),
('brownboard', 'Brown Board', 1700, 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 — for ox_inventory, use the Qbox Method B snippet above.
Step 3 — Restart and Test
Give yourself an item to verify it works:
- QBCore
- QBox Core
- ESX
giveitem <serverId> corkboard 1
giveitem <serverId> corkboard 1
giveitem <serverId> corkboard 1
Or via ox_inventory if installed:
additem <serverId> corkboard 1
Use the item from your inventory — the placement mode should open.
Customizing Items
Renaming an item
If you want a different inventory item to trigger the same prop:
- Change the
itemfield inConfig.Boards:
Config.Boards = {
{ model = 'prop_cork_board', item = 'detective_board', label = 'ui_board_cork' },
-- ...
}
- Register the new item name in your inventory (Step 2 above), using the same icon and a label of your choice.
- The locale display name (
ui_board_cork) stays the same — change it inlocales/<code>.luaif you want a different in-game label.
Adding a new board variant
To add a tenth board prop:
- Append a new entry to
Config.Boards:
{ model = 'my_custom_board_prop', item = 'custom_board', label = 'ui_board_custom' }
- Add a surface geometry entry to
Config.PropModels. The four numbers below are placeholders — to obtain real values for your prop, run the companion tool f5_board_calibrate and export the snippet:
my_custom_board_prop = {
surfaceForward = 0.020,
surfaceUp = 0.000,
surfaceWidth = 2.50,
surfaceHeight = 1.80,
},
- Register the
custom_boarditem in your inventory. - Add the
ui_board_customlocale key to everylocales/<code>.luafile you support. - Drop an icon
my_custom_board_prop.pngintof5_board/nui/imgs/(used by the catalog grid).
Removing a board variant
Simply delete the entry from Config.Boards — no other cleanup needed. The corresponding inventory item, if registered, just stops doing anything when used.
See Also
- Installation — installation flow including item registration
- Configuration — full
Config.BoardsandConfig.PropModelsreference - Commands —
/boardwith item-gated mode (requireItem = true)