Police Garage Raids
Police can breach a player's garage, search the vehicles stored inside, and either drive them out or seize them straight to the impound lot. Everything happens in one in-game panel.
๐ Overview & Highlights
- Raid from the garage radial: officers standing in a garage zone get a Raid garage entry in the radial (or target) menu. Players without an allowed police job never see it.
- Works on every garage type you allow: private, gang and property garages list everything stored inside. Public garages ask for a suspect first and only list that person's vehicles.
- Breach timer: the officer plays a clipboard scenario while a progress bar runs in the panel. Cancelling or pressing Escape stops it.
- Vehicle list: every stored vehicle with its image, plate, owner, and engine and body condition, plus search and a countdown for how long the raid stays open.
- Take out or seize: drive a vehicle out with keys, or fill in a seize form to send it to impound.
- Team raids: once a garage is open, other allowed officers can join the same raid without breaching again.
- Owner alerts & logs: owners who are online are told their vehicles are being searched, and every action is logged to Discord.
๐ ๏ธ How a Raid Works
- Start: stand in the garage zone and pick Raid garage from the radial. The panel shows the garage name, breach time, whether a warrant is used, and that owners will be alerted. Public garages also ask for the suspect's server ID or citizen ID.
- Checks: the server checks the officer's job and grade, on-duty status, officers online, the warrant item and the garage's cooldown. If any fail, the reason shows in the panel.
- Breach: press Breach garage. The clipboard scenario plays while the bar fills. The warrant item is used at this point if you require one.
- Search: the vehicle list opens. The raid stays open for
durationminutes. - Act on a vehicle:
- Take out: the vehicle spawns on a free parking spot, the officer gets the keys, and the panel closes so they can get in.
- Seize to impound: opens a seize form (see below). Once confirmed, the vehicle is removed from the list.
After the raid closes, the same garage (or the same suspect at a public garage) can't be raided again until the cooldown ends.
๐ The Seize Form
Seizing asks the officer for the details in-game, the same way the impound panel does:
| Field | What it does |
|---|---|
| Impound lot | Any impound lot on your server. |
| Reason | Shown to the owner at the impound lot. Left empty, the config reason is used. |
| Owner can retrieve | Off means only police can release the vehicle. |
| Hold time | One of Config.ImpoundDurations (only when the owner can retrieve). |
| Fine | What the owner pays to get it back, capped at Config.MaxImpoundFine. |
The values in Config.Raid.seize are only what the form starts with.
๐ Property Garages
Property garages (for example from kartik-properties) have no garage zone of their own, so the raid is opened by the property script. Call this client export from a police option at the property's garage door:
exports['kartik-garages']:RaidGarageById('kp_prop_12', 'Grove Street House')The officer has to be within 20 metres of the property's garage door. The kartik-properties bridge that tells Garages V2 where that door is ships with the resource.
๐ก๏ธ Security
Every step is checked again on the server, so a modified client can't skip it:
- The officer must be inside the garage zone (or near a property garage's door).
- The breach time is timed on the server.
- Each vehicle is re-read from the database before it is taken out or seized.
- Parking spots for take-outs are picked on the server.
- Seize values are validated: only real impound lots, fine and hold time limited like the impound panel.
โ๏ธ Configuration (shared/raid_config.lua)
Config.Raid = {
enabled = true, -- Police get a "Raid garage" radial/target entry inside garage zones
jobs = { police = 0 }, -- Job -> minimum grade allowed to raid
requireOnDuty = true, -- Officer must be on duty
minPolice = 0, -- On-duty police needed online to start a raid (0 = off)
warrantItem = false, -- Item needed to start a raid, e.g. "search_warrant" (false = none)
consumeWarrant = true, -- Remove the warrant item when the raid starts
breachTime = 10, -- Seconds of progress bar before the garage opens (0 = instant)
duration = 10, -- Minutes an opened raid stays open; other allowed officers can join without breaching
cooldown = 30, -- Minutes before the same garage (or suspect) can be raided again (0 = off)
notifyOwners = true, -- Tells online owners their vehicles are being searched
types = { -- Garage types that can be raided
private = true,
gang = true,
house = true, -- Property garages opened through the RaidGarageById client export
public = true, -- Public garages need a suspect (server ID or citizen ID); only their vehicles are listed
job = false,
},
allowTakeOut = true, -- Officer can drive a vehicle out of the garage
giveKeys = true, -- Give the officer keys to vehicles they take out
allowSeize = true, -- Officer can send a vehicle straight to impound
seize = { -- Prefilled in the seize form; the officer picks the real values in-game
lot = "impound", -- Impound lot selected first
fine = 0, -- Fine (capped by Config.MaxImpoundFine)
hours = 0, -- Hold time, one of Config.ImpoundDurations (0 = no wait)
ownerCanRetrieve = false, -- false = only police can release it
reason = "Seized during garage raid", -- Used when the officer leaves the reason empty
},
}The defaults let any police grade raid with no warrant and no minimum officer count. Tighten jobs, minPolice and warrantItem to fit your server's rules.
Raid logs go to the garage_raid webhook in shared/server_config.lua.
Smart Vehicle Image Resolution
Garages V2 features an automatic multi-tier image resolution pipeline to render accurate vehicle preview thumbnails in the garage NUI.
Garage Parking Capacity
Limit how many vehicles a garage can hold in total, and how many one player can keep in a single garage. Players always see how much room is left.