Skip to content

Advanced Interrogation

The main editable configuration is located in config.lua. Localization can be changed in locales/en.lua, and the recorder badge can be replaced through branding/logo.png.


config.lua
Config.Debug = false
Config.Locale = "en"
Config.Framework = "auto" -- auto | qbx | qb | esx
Config.Inventory = "auto" -- auto | ox_inventory | qb-inventory
Config.Target = "auto" -- auto | ox_target | qb-target | sleepless | textui

Config.Debug enables additional console output and should normally stay disabled on a live server.


config.lua
Config.Branding = {
logo = "branding/logo.png",
}

Replace branding/logo.png with your own PNG to change the badge shown on the handheld recorder and cassette deck. Set logo = "" if you do not want custom branding.


config.lua
Config.Interact = {
distance = 1.2,
zoneRadius = 0.28,
}

distance controls how close a player must stand to the equipment. zoneRadius controls the size of the target hotspot around the object.


config.lua
Config.Recording = {
captureRadius = 12.0,
listeningRadius = 12.0,
radioFilter = false,
noiseReduction = true,
storage = "fivemanage",
}
OptionDescription
captureRadiusMaximum distance from the recorder for a participant to be captured
listeningRadiusMaximum distance from the playback source for nearby listeners
radioFilterfalse, phone, room_mic, or hidden_wire
noiseReductionReduces room hiss between spoken words
storagefivemanage or files

When storage = "fivemanage", add the key to server.cfg.

server.cfg
set rs_interrogation_fivemanage_api_key "your_key_here"

config.lua
Config.Battery = {
enabled = true,
idleDrainPerSecond = 0.004,
recordDrainPerSecond = 0.075,
playbackDrainPerSecond = 0.03,
lowThreshold = 10,
}

The recorder uses the highest active drain rate instead of stacking several drain rates together. Turning the device off stops idle drain. Cassette stations do not use batteries.

OptionDescription
enabledEnables recorder battery drain
idleDrainPerSecondDrain while the recorder is powered on but idle
recordDrainPerSecondDrain while REC is active
playbackDrainPerSecondDrain while audio is playing
lowThresholdBattery percentage used for the low battery warning

config.lua
Config.TapeDamage = {
enabled = true,
consumeItem = true,
minigame = {
speed = 0.7,
zoneSize = 0.32,
},
}

Using cassette_magnet on a recorded cassette starts the wipe interaction. A successful wipe removes the audio references while keeping normal cassette metadata such as duration, officer, and recording date.

consumeItem controls whether the magnet is consumed after a successful wipe. There is no police job requirement for this action.


config.lua
Config.Placement = {
gizmo = false,
}

Set gizmo = false to use the built in raycast placement preview. Set it to true to use object_gizmo.


config.lua
Config.Dubbing = {
cooldown = {
enabled = false,
mode = "fixed",
seconds = 15,
},
}
ModeBehavior
fixedUses the configured seconds value
durationUses the recording duration and falls back to seconds when needed

config.lua
Config.Jobs = {
police = 0,
sheriff = 0,
lspd = 0,
bcso = 0,
sasp = 0,
}

The number is the minimum job grade. A value of 0 allows every rank in that job.

You can also use a simple list when every listed job should use grade 0.

Alternative job format
Config.Jobs = {
"police",
"sheriff",
}

The job list controls recorder placement, pickup, storage access, and dubbing authorization.


Cassette stations are permanent world locations. They do not require a station item and cannot be picked up.

config.lua
Config.Placements = {
cassette_player = {
vector4(450.47, -975.78, 29.69, 1.89),
},
}

At a cassette station, players can record directly to a blank cassette, play tapes, and dub pending handheld recordings.

Set cassette_player = {} if you want to use only handheld and placeable recorders.


Storage boxes use a custom 30 slot cassette interface with no weight limit. Authorized jobs share the tapes stored in the same box.

config.lua
Config.Placements = {
storage = {
vector4(439.73, -980.26, 30.80, 177.71),
},
}

A storage box can override the global jobs list.

Storage job override
Config.Placements = {
storage = {
{
coords = vector4(439.73, -980.26, 30.80, 177.71),
jobs = {
police = 0,
sheriff = 0,
},
},
},
}

Set storage = {} if you do not want evidence storage boxes.


SetupConfiguration
Handheld focusedKeep cassette_player empty and distribute interrogation_recorder
Station focusedConfigure cassette stations and do not distribute handheld recorders
Full systemUse handheld recorders, cassette stations, and evidence storage boxes together