cc_minigames because it shares the same NUI shell, design tokens, and SFX as the minigames. The caller drives it by passing callbacks and updating state with the ControlSet* exports.
The panel and a minigame can not be open at the same time on a given client — both compete for NUI focus. Use
IsActive() / ControlIsOpen() to coordinate.Open the panel
schematic accepts either an inline table or a string. When a string is passed, the resource looks up schematics/<name>.json inside cc_minigames (schematics/paleto_bank.json ships out of the box).
Update state from the callbacks
The panel doesn’t change state on its own — clicks fire your handlers, your handlers decide what to do, then you push the new state with these exports:Door state shape
Camera state cycling
The shipped test command uses a three-state cycle (active → disabled → hacked → active) but nothing about the panel forces that — the strings are just labels you push. Use whatever vocabulary fits your heist resource.
Test command
/control paleto_bank opens the bundled schematics/paleto_bank.json and wires up a stub handler that:
- Unlocks any clicked door for 5 seconds, then re-locks it.
- Cycles cameras
active → disabled → hacked → activeon click. - Logs every state transition to the F8 console.