cc_heistcontracts is the central hub other heist resources plug into. It contains:
- The player profile (level, XP, VICE balance, contract slots, completion stats, alias).
- The dashboard NUI — opened by using the
heist_tablet(Contracts Tablet) inventory item — where players see available contracts, manage slots, shop the marketplace, and practice in the training sandbox. - The marketplace listings — new contract listings drip into the marketplace one at a time, weighted by each contract’s rarity. Old listings get culled after a configurable expiry.
- The slot economy — players hold up to 3 (configurable) purchased contracts. Starting one marks the slot active; finishing or giving up consumes it.
- The active-heist tracking — one heist per player at a time. The dashboard shows live state for the active slot and exposes a Give Up button that asks the heist resource to tear the run down.
- A VICE economy with a server-authoritative ledger.
- A marketplace for heist-prep items with timed pickup locations.
- A training sandbox that gates cc_minigames games behind level + VICE unlocks.
- A crew (group) layer wrapping
cc_lib.Groups.
Capabilities at a glance
Register contracts
One
RegisterContract call with optional cancel + reset callbacks in opts. Plus FinishHeist/FinishContract to signal completion, and ApplyCooldown for server-wide locks.Configure listings, slots, XP
Three config files:
shared/config.lua, shared/marketplace_config.lua, shared/training_config.lua. All hot-editable; restart the resource to apply.Dashboard NUI
Opened by using the
heist_tablet inventory item. Sync, alias gating, contracts, marketplace, active-heist panel, ledger, training. React/Vite app served from web/.Marketplace + pickups
VICE checkout, server-rolled pickup locations with time windows, ox_target zone with a “Knock” interaction.
Training sandbox
Practice cc_minigames games for free (no rewards, no penalty). Access fee + per-minigame unlocks behind level requirements.
Admin tools
/heist:grantxp (ACE-gated), debug logging, SQL recipes for profile resets and stuck slots.Dependencies
ox_liboxmysqlcc_lib(Core, Groups, Inventory, Target, TaskUI wrappers)cc_minigames— only required if you wire training entries to them (the default config does)