Items & Images
The heist uses a small set of items. Three are usable: their client.export drives the heist's own client logic (place the RC Bandito, drive it, view the microcamera). All item names are configurable in config/config.lua.
Item reference
| Item | Usable | Role |
|---|---|---|
microcamera | ✅ export | scouting viewfinder (prep) |
rcbandito | ✅ export | places the RC Bandito |
rccontroller | ✅ export | RC remote (enter / exit RC mode) |
pass | no | stolen access badge |
crowbar | no | breach the washing machines |
jewels / documents / coke_small_brick | no | contract request packages (configurable) |
ox_inventory
Drop this into ox_inventory/data/items.lua (labels / weights / images are examples: tune to taste):
-- ox_inventory/data/items.lua
['microcamera'] = { label = 'Micro Camera', weight = 200, stack = false, close = true,
client = { export = 'vs-laundromat-heist.microcamera' } },
['rcbandito'] = { label = 'RC Bandito', weight = 3000, stack = false, close = true,
client = { export = 'vs-laundromat-heist.rcbandito' } },
['rccontroller'] = { label = 'RC Remote', weight = 500, stack = false, close = true,
client = { export = 'vs-laundromat-heist.rccontroller' } },
['pass'] = { label = 'Access Badge', weight = 100, stack = false },
['crowbar'] = { label = 'Crowbar', weight = 1500, stack = true },
-- contract request packages (Config.Contract), defaults:
['jewels'] = { label = 'Jewels', weight = 300, stack = true },
['documents'] = { label = 'Documents', weight = 100, stack = true },
['coke'] = { label = 'Cocaine', weight = 200, stack = true },
The shipped Config.Contract.requests uses coke_small_brick (a common Qbox/QBCore drug item). Point the config at whatever brick/drug item your server already stocks, or add coke as above and set the config to coke. The package item just has to be a registered item in your inventory.
qb-inventory
Add the same items to qb-inventory's items.lua, then register the three usable items with CreateUseableItem under the same names so they fire the same logic:
-- somewhere in a server script, after the items exist
CreateUseableItem('microcamera', function(source) exports['vs-laundromat-heist']:microcamera(source) end)
CreateUseableItem('rcbandito', function(source) exports['vs-laundromat-heist']:rcbandito(source) end)
CreateUseableItem('rccontroller', function(source) exports['vs-laundromat-heist']:rccontroller(source) end)
Prefer ox_inventory if you can: the three usable items work out of the box through its item-export hook, plus you get weapon-durability wear on the washer breach-force. On qb-inventory those two extras no-op, but everything else works.
Usable-item exports
These are the integration surface for your inventory. Each fires the heist's client logic:
| Export | Item | What it does |
|---|---|---|
vs-laundromat-heist.microcamera | microcamera | opens the phone viewfinder to photograph cameras + the air vent |
vs-laundromat-heist.rcbandito | rcbandito | places the RC Bandito in the world |
vs-laundromat-heist.rccontroller | rccontroller | enters / exits RC control mode |
Gun-van weapons
The prep gun van sells weapon items (charged from cash by default). These are standard weapon items your inventory already knows:
| Weapon item | Label | Default price |
|---|---|---|
WEAPON_KNIFE | Knife | $750 |
WEAPON_PISTOL | Pistol | $2,500 |
WEAPON_PUMPSHOTGUN | Pump Shotgun | $6,000 |
WEAPON_CROWBAR | Crowbar | $500 |
Prices, the weapon list, and the charge account (money or bank) are all in Config.Heist.prep.gunVan. See Configuration.
Item images
Give every item an inventory image so it doesn't render blank:
- ox_inventory: drop
<item>.pngintoox_inventory/web/images/(matching the item name, e.g.microcamera.png). - qb-inventory: drop
<item>.pnginto your inventory's image folder (e.g.qb-inventory/html/images/).
Missing images are the most common "it looks broken" report: items work but show as a blank box. Add an image per item name above.