Cameras

Details

Below, you will find detailed configuration for cameras.

Configuration file

config/cameras.lua
return {
    ---@type boolean
    enabled = true,

    ---@type boolean
    zoneDebug = false,

    -- if defined, it will enable cameras for certain groups
    -- if set to false, it will take in account above and enable cameras for everyone
    -- who uses dispatch
    ---@type table<string, boolean> | false
    enabledFor = false,

    ---@type string
    fallbackModel = 'prop_cctv_cam_06a',

    ---@type table<string, CameraConfig>
    items = {
        ['cctv_ceiling'] = {
            model = 'prop_cctv_cam_06a',
            groups = { 'police' },
            isShared = { 'police', 'ambulance' }
        },
        ['cctv_wall'] = {
            model = 'prop_cctv_cam_01a',
        }
    },

    ---@type PlacingConfig
    placing = {
        time = 5000
    },

    ---@type RepairConfig
    repair = {
        time = 5000,
        type = 'cash',
        price = 100
    },

    ---@type DestroyConfig
    destroy = {
        time = 5000
    },

    ---@type CamerasOffsets
    offsets = {
        rotation = {
            ["prop_cctv_cam_01a"] = vec3(-30, 0, 215),
            ["prop_cctv_cam_01b"] = vec3(-30, 0, 145),
            ["prop_cctv_cam_02a"] = vec3(-20, 0, 210),
            ["prop_cctv_cam_03a"] = vec3(0, 0, 135),
            ["prop_cctv_cam_04a"] = vec3(0, 0, 180),
            ["prop_cctv_cam_04b"] = vec3(0, 0, 180),
            ["prop_cctv_cam_04c"] = vec3(-20, 0, 180),
            ["prop_cctv_cam_05a"] = vec3(-20, 0, 180),
            ["prop_cctv_cam_06a"] = vec3(-20, 0, 180),
            ["prop_cctv_cam_07a"] = vec3(0, 0, 180),
            ["ba_prop_battle_cctv_cam_01a"] = vec3(-45, 0, -90),
            ["ba_prop_battle_cctv_cam_01b"] = vec3(-45, 0, 90),
            ["hei_prop_bank_cctv_01"] = vec3(-20, 0, 180),
        },
        position = {
            ["prop_cctv_cam_01a"] = vec3(0, -0.7, 0.2),
            ["prop_cctv_cam_01b"] = vec3(0, -0.7, 0.2),
            ["prop_cctv_cam_02a"] = vec3(0.15, -0.3, 0),
            ["prop_cctv_cam_03a"] = vec3(-0.4, -0.4, 0.35),
            ["prop_cctv_cam_04a"] = vec3(0, -0.75, 0.65),
            ["prop_cctv_cam_04b"] = vec3(0, -0.6, 0.5),
            ["prop_cctv_cam_04c"] = vec3(0, -0.25, -0.35),
            ["prop_cctv_cam_05a"] = vec3(0, -0.2, -0.4),
            ["prop_cctv_cam_06a"] = vec3(0, -0.1, 0.4),
            ["prop_cctv_cam_07a"] = vec3(0, 0, -0.2),
            ["ba_prop_battle_cctv_cam_01a"] = vec3(0.35, -0.35, 0),
            ["ba_prop_battle_cctv_cam_01b"] = vec3(-0.35, -0.35, 0),
            ["hei_prop_bank_cctv_01"] = vec3(0, 0, 0.4),
        }
    },

    ---@type PredefinedCameraConfig[]
    predefinedCameras = {
        -- ...
    }
}

Detailed types information

enabled boolean

Defines if BOLOs page is enabled in general.

zoneDebug boolean

This enabled debug mode for cameras ox_lib zones. This is mainly for development.

enabledFor table<string, boolean> | false

If this set to false and enabled is set to true, cameras page will be enabled for everyone. Otherwise you can set a table for example:

  enabledFor = {
    ['police'] = true
  }

In this example, Cameras page will be shown only to police.

fallbackModel string

While placing cameras, if script is not able to find model, it’ll use this as a fallback.

Items

You can define items, which are used to as an items in-game to place cameras.

Payload

---@class CameraConfig
---@field model string
---@field groups? table<string>
---@field isShared? table<string>

Detailed types information

model string

Camera prop model.

groups table<string>

Defines groups, who can use item and place/destroy and fix camera.

isShared table<string>

Defines groups to which camera is shared.

More information

For more information, refer to cameras documentation.

Placing

Payload

---@class PlacingConfig
---@field time number

Detailed types information

time number

Progress bar timer, while placing a camera.

Repairing

Payload

---@class RepairConfig
---@field time number
---@field type? 'cash' | 'bank'
---@field price? number

Detailed types information

time number

Timer for progressbar while fixing camera.

type 'cash' | 'bank' | false

Defines money type, used to pay for camera fix. Can be set to false if it’s free.

price number

Price, for camera fix.

Destroying

Payload

---@class DestroyConfig
---@field time number

Detailed types information

time number

Progress bar timer, while destroying a camera.

Offsets

Offsets are used while viewing the cameras.

Payload

---@class CamerasOffsets
---@field rotation table<string, vector3>
---@field position table<string, vector3>

Detailed types information

rotation table<string, vector3>

Defines rotation offsets for camera models.

position table<string, vector3>

Defines position offsets for camera models.

Predefined cameras

You can have predefined cameras, these cannot be destroyed and will always be added on server start along side placeable cameras.

Payload

---@class PredefinedCameraCreatedBy
---@field name string
---@field group string

---@class PredefinedCameraConfig
---@field id? string
---@field name string
---@field group? string
---@field coords vector3
---@field heading number
---@field model? string
---@field status? 'online' | 'offline'
---@field createdAt? number
---@field default? boolean
---@field createdBy? PredefinedCameraCreatedBy

Detailed types information

id string

If ID is not provided, random one will be generated. But, always make sure that ID is unique.

name string

Name, which will be shown in dispatch.

group string

With this option, you can group cameras to one group. Like lets say paleto cameras will be displayed in one box.

coords vector3

Coordinates for camera.

heading number

Camera heading.

model string

Model for the object.

status 'online' | 'offline'

If not defined, it will always default to online.

Copyright © 2025 Felis Development