Skip to main content

Requirements

Steps

1

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.
2

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:
Add to ox_inventory/data/items.lua
angle_grinder = { label = 'Angle Grinder', weight = 500, stack = false, client = { image = 'angle_grinder.png' } },
Drop angle_grinder.png (shipped under the resource’s images/) into ox_inventory/web/images/.
3

Ensure after cc_heistcontracts

Order in server.cfg:
ensure oxmysql
ensure ox_lib
ensure ox_target
ensure cc_lib
ensure cc_heistcontracts
ensure cc_cargoheist
cc_cargoheist’s fxmanifest.lua already declares cc_heistcontracts as a dependency.
4

Verify in-game

  1. The contract is level 1 and drips at weight 1.0, so it rolls into the marketplace quickly. Lower config.rotation.dripIntervalMs in cc_heistcontracts/shared/config.lua if you want it instantly while testing.
  2. Buy it for 1,500 VICE, grab an angle_grinder and a pistol, and drive to the assigned yard.
  3. 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.
Set cfg.debug = true in shared/config.lua to bypass gates and log verbosely while testing.

Configure

Guard stats, the decoy gas trap, the real-container count, the grinder/loot animations, and the dispatch payload all live in shared/config.lua. Restart the resource after editing. A few headline knobs:
FieldDefaultWhat it does
cfg.use_global_loot_tabletrueSplit the rolled total across the real containers; false expects per-container loot in the location files
cfg.yard.realMin / realMax3 / 4How many of the spawned containers actually hold loot
cfg.guards.minCount / maxCount4 / 8Guard count rolled per heist
cfg.guards.hostileRadiusMult0.5Fraction of the yard radius a player must enter before passive guards turn hostile
cfg.gas.timePenalty300Seconds docked off the clock for cutting a decoy (set 0 to disable)
cfg.gas.radius / durationMs4.5 / 12000Gas cloud size and how long it lingers
cfg.dispatchfunction(coords) ... endPolice alert payload — replace to integrate with your dispatch resource
Each yard’s container, guard, manifest, and office spawns live in shared/locations/<id>.lua. Drop a location from the locations array in shared/contract.lua to take a yard out of rotation.