Camera: FAQ
Fixes for the most common Camera problems, from terminals and access to face recognition and shooting cameras.
Turn on Debug first
With Debug = true, the script prints every step to the console: access checks, terminals, the camera being watched,
recognition requests and shot cameras. It is the fastest way to find a problem.
qbx_core, qb-core or es_extended is not running, or hype-camera starts before it. Move ensure hype-camera
below your framework in server.cfg.
No target resource was found (no supported target resource found in the Debug output). Start ox_target or
qb-target before the script, or set Command to open the list by command. The option is also hidden from jobs that
are not in Access.groups or below the minimum grade.
Your job is not in Access.groups, your grade is below the minimum, or you are off duty while Access.requireDuty
is true. Admins with the group.admin ace can watch without a job by default (Access.ace).
You moved further than TerminalDistance from the terminal, died or were ragdolled. The list opened with Command
or the Open export has no distance check.
The subject is too far for the current zoom. Zoom in with the mouse wheel. The range is Recognition.range at
Recognition.referenceFov and grows as you zoom in, up to Recognition.maxDistance.
Their mask drawable is in Mask.drawables, or a hat or glasses in FaceProps covers the face. Mask ids differ per
server; adjust the list to your clothing, or use Mask.male and Mask.female for gender specific ids.
The subject is not facing the camera. Raise Recognition.facingAngle, or set Recognition.requireFacing = false to
turn the check off.
That is on purpose. Your own character is only recognised with Debug = true, to test the feature alone.
The phone is not shown by default; add "phone" to Recognition.fields. On ESX, nationality and phone are only
filled when another resource stores them on the player. To read them from somewhere else, change
GetCharacterInfo in frameworks/es_extended/sv-main.lua.
Check that Destroy.enabled is true and the camera does not have destroyable = false. You must be within
Destroy.maxDistance and hit within Destroy.hitRadius of the camera prop. A camera that is already offline cannot
be shot again. Rejected shots are printed to the server console as Suspicious request.
The map has no supported CCTV object at that spot, so a prop was placed. Set prop = false for that camera, rotate it
with propRot, or turn placed props off for every camera with Destroy.spawnProp = false.
The offline state is not saved. After a restart every camera is online again, except those with online = false
in config/cameras.lua.
The area had not loaded yet when the camera was shown. Raise LoadTimeout.
Add a line to config/cameras.lua. With Debug = true, aim an existing camera and press C, or fly there with
noclip and run /camerapos to copy the position. See Cameras.
Yes. Call SetCameraOnline(id, false) or DestroyCamera(id, seconds) from your robbery script, or use
/camerastatus as an admin. See Exports & Events.
Yes. Listen to hype-camera:server:cameraDestroyed on the server. It gives the camera id, the shooter, the position
and the label. See Events.
Yes. Call exports["hype-camera"]:Open() on the client after releasing your own NUI focus. It still checks
Access, but is not tied to a terminal. See Exports & Events.
Set setr ox:locale "tr" (or another code) in server.cfg. The brand and the category and camera names are in the
config files. See Locales.
Yes, the Vue source is in web/. Edit it, then run pnpm install and pnpm build inside web/ to rebuild
web/build.
Download the new version, replace the folder and keep your config/config.lua and config/cameras.lua. Check the
changelog for any new options.