Skip to content

Advanced Interrogation

Check that your framework and inventory backend are detected correctly.

config.lua
Config.Framework = "auto" -- or qbx | qb | esx
Config.Inventory = "auto" -- or ox_inventory | qb-inventory

Also confirm that all five items from install/items_ox.lua or install/items_qb.lua were added correctly and that their names were not changed.


Recorder placement requires an authorized job and a valid interrogation_recorder inventory slot.

Check Config.Jobs first.

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

If you are using object_gizmo, make sure the resource is installed and started before enabling it.

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

Make sure Config.Target matches a resource that is actually started.

config.lua
Config.Target = "auto" -- auto | ox_target | qb-target | sleepless | textui

Use textui if you want the ox_lib interaction mode with the E key instead of a target resource.


FiveM must allow NUI microphone access for recording.

When prompted, click Allow and try REC again. If access was denied previously, restart FiveM and check your operating system microphone privacy settings before testing again.

The script displays this message when microphone permission is blocked:

Recorder error
Microphone access was blocked. Click Allow when the game asks, then try recording again.

Make sure at least one participant speaks while REC is active. Each player inside Config.Recording.captureRadius captures their own microphone track.

config.lua
Config.Recording = {
captureRadius = 12.0,
}

Capture also respects distance and line of sight. Players behind walls or outside the radius will not produce a normal track.


Confirm the backend and API key.

config.lua
Config.Recording = {
storage = "fivemanage",
}
server.cfg
set rs_interrogation_fivemanage_api_key "your_key_here"

Use set, not setr.


When using the local backend, confirm that the resource contains the recordings/ directory and that the server process can write to it.

config.lua
Config.Recording.storage = "files"

The local folder is fixed at rs_interrogation/recordings/.


Direct station recording and dubbing both require blank_cassette.

A used cassette_tape cannot be overwritten as a blank tape.


Pending recordings come from handheld or placed recorder device memory. Carry the relevant interrogation recorder when opening the cassette station so the station can access its pending recordings.

Completed recordings leave the Pending list after they are successfully dubbed to a cassette.


Check the following:

  1. The recording completed with detected microphone audio.
  2. The cassette has not been wiped with cassette_magnet.
  3. The audio still exists in the configured storage backend.
  4. The listener is within Config.Recording.listeningRadius.
  5. Line of sight is not completely blocked.

A successfully wiped cassette keeps its normal item metadata, but its audio references are removed and PLAY will no longer produce the recording.


Adjust the battery drain values in config.lua.

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

The script uses the highest active drain rate. Recording and playback drain are not added together.


Players need recorder_battery in their inventory.

Use BAT on the handheld recorder or Swap battery on a placed recorder. Cassette stations do not use batteries.


Placed recorders are persisted through the database. Check that oxmysql started before rs_interrogation and review the server console for database or placement save errors.

The schema is applied automatically from sql/schema.sql when the resource starts.


Storage access is job gated. By default, each box uses Config.Jobs.

You can assign different jobs to an individual box.

Storage placement
{
coords = vector4(439.73, -980.26, 30.80, 177.71),
jobs = {
police = 0,
},
}

Only cassette tapes can be stored in these boxes.


Use empty placement tables.

config.lua
Config.Placements = {
cassette_player = {},
storage = {},
}

This lets you run a handheld only setup if desired.


Use the built in reset command.

Command
recorderreset

It clears the current playerโ€™s active recorder session and capture state.


Add the ACE permission to server.cfg.

server.cfg
add_ace group.admin command.recorderrepublish allow

Then use:

Command
recorderrepublish <sessionId>

This command cannot recover audio that never existed on the server, including some direct FiveManage client upload cases.