Requirements
- A FiveM server already running cc_heistcontracts.
- ox_lib, oxmysql, ox_target.
- A working
cc_libresource. - An inventory system (defaults assume ox_inventory).
Steps
Place the resource
Copy
cc_cargoheist into a resources directory the server loads. The repo ships it under resources/[cc]/cc_cargoheist/. There’s no streamed map data or DB import — the yard props are spawned at runtime.Confirm the inventory items
The required
angle_grinder and the black_money loot item both ship in the stock Qbox ox_inventory list — no edits needed on a default install. weapon_pistol is a stock weapon.If you run a trimmed item list, add the grinder:- ox_inventory
- qb-inventory
Add to Drop
ox_inventory/data/items.luaangle_grinder.png (shipped under the resource’s images/) into ox_inventory/web/images/.Ensure after cc_heistcontracts
Order in
server.cfg:cc_cargoheist’s fxmanifest.lua already declares cc_heistcontracts as a dependency.Verify in-game
- The contract is level 1 and drips at weight
1.0, so it rolls into the marketplace quickly. Lowerconfig.rotation.dripIntervalMsincc_heistcontracts/shared/config.luaif you want it instantly while testing. - Buy it for 1,500 VICE, grab an
angle_grinderand a pistol, and drive to the assigned yard. - Read the manifest at the dock office, then cut the redacted containers. Cutting a decoy should vent gas and dock 5 minutes off the clock.
Configure
Guard stats, the decoy gas trap, the real-container count, the grinder/loot animations, and the dispatch payload all live inshared/config.lua. Restart the resource after editing.
A few headline knobs:
| Field | Default | What it does |
|---|---|---|
cfg.use_global_loot_table | true | Split the rolled total across the real containers; false expects per-container loot in the location files |
cfg.yard.realMin / realMax | 3 / 4 | How many of the spawned containers actually hold loot |
cfg.guards.minCount / maxCount | 4 / 8 | Guard count rolled per heist |
cfg.guards.hostileRadiusMult | 0.5 | Fraction of the yard radius a player must enter before passive guards turn hostile |
cfg.gas.timePenalty | 300 | Seconds docked off the clock for cutting a decoy (set 0 to disable) |
cfg.gas.radius / durationMs | 4.5 / 12000 | Gas cloud size and how long it lingers |
cfg.dispatch | function(coords) ... end | Police alert payload — replace to integrate with your dispatch resource |
shared/locations/<id>.lua. Drop a location from the locations array in shared/contract.lua to take a yard out of rotation.