One item per tool, textured by job
Every tool is a single item. The texture comes from the theme of the job using it, so a sheriff pulls out a sheriff robodog and an FBI agent an FBI shield from the same item. Adding a job is one line in the config.
| Theme | Default jobs | Ballistic shield |
|---|---|---|
police | police, lspd, sasp | POLICE |
sheriff | sheriff, bcso | SHERIFF |
fbi | fbi, fib | FBI |
ems | ambulance, ems | POLICE |
civilian | every job not listed | Unmarked |
Themed gear: robodog, battering ram, megaphone, throwable camera, mobile spike, grappler (net and strap colours too), wheel clamp, deployable shield and ballistic shield. Placed or mounted gear keeps the theme of the player who placed it for everyone who sees it.
Each job line also sets a minimum grade, and each item can ask for a higher grade of its own. grade = false gives a job its theme only, so it can use public items such as the megaphone but none of the restricted gear.
Shared keys
Every tool uses the same four keys. A key only acts on what is in your hand or on the vehicle panel that is open, so nothing clashes.
| Key | Action |
|---|---|
G | Put away what is in your hand, cancel a throw, take the spike or grappler off from the driver's seat |
↓ | Deploy the spike, lower the grappler arm |
↑ | Retract the spike, raise the grappler arm, release a grappler tether |
H | Shield light, BolaWrap laser, radar km/h ↔ mph, spike / grappler position menu, clear night vision marks |
Players can rebind every key in Settings → Key Bindings → FiveM.
Battering ram
Take the ram in your hands and walk up to a door. Left click turns the character to the door, swings twice and the door opens. Punching, kicking and aiming are blocked while you hold it.
| Key | Action |
|---|---|
| Left click | Breach the door (within 2.2 m, facing it) |
G / use the item again | Put the ram away |
The ram works with every popular doorlock at once: frkn-doorlockv2, qb-doorlock, ox_doorlock, rcore_doorlock, cd_doorlock, doors_creator, esx_doorlock and nui_doorlock. The door is unlocked through the doorlock's own export, so its state stays correct for everyone. Doors your doorlock does not know can still be rammed, and your own doorlock can be bridged with three functions (see Config Settings → Advanced settings).
breakChance lets the ram break after a successful breach. It is 0 by default.
Ballistic shield
The shield goes on your left arm and a one handed sidearm stays in your right, so you can aim and fire from behind it. Bullets and melee hits that land on the shield do no damage; exposed legs, head and shots from behind still hurt.
| Key | Action |
|---|---|
| Right click / Left click | Aim / fire |
R | Reload |
H | Toggle the four LED light on the front |
G / use the item again | Put the shield away |
You cannot sprint, jump, take cover, use melee or enter a vehicle while holding it. Only pistols and the stun gun are allowed by default; more weapon groups or single weapons can be added with Shield.allowedGroups / Shield.allowedWeapons. The light is visible to other players from about 90 m.
Hits are blocked in three layers: real collision on the shield model, the server cancelling player shots that hit the body behind it, and health restored after NPC hits.
Deployable shield
Using the item opens a placement preview. Place it up to 5 m away, rotate it with the mouse wheel and confirm. The character crouches and sets it down, and the curved shield extends up out of its base to stop bullets and players.
| Key | Action |
|---|---|
| Mouse / Scroll | Position / rotate the preview |
ENTER / ESC | Place / cancel |
G (next to it) | Lower it into its closed base / raise it again |
E (next to it) | Pick it up |
A lowered shield stays on the ground as a low closed base with no collision. Each player may have two out at once, and who may lower or pick one up (job, owner or anyone) can be changed with DeployShield.access.
Night vision goggles
Put the helmet on with the item. N cycles night vision, thermal and off, and the goggles flip down and up with it. A lens overlay is drawn on screen and the helmet is hidden in first person.
| Key | Action |
|---|---|
N | Night / thermal / off |
E | Mark the spot you look at |
H | Clear your marks |
Mark Surroundings
Marks are 3D markers fixed to world positions with a live distance, and they also appear on the map. Teammates see them by job, everyone or nobody, and by default only players wearing the helmet see them. Every player marks in their own colour.
| Limit | Value |
|---|---|
| Mark distance | 250 m |
| Draw distance | 200 m |
| Marks per player | 10 |
Camera feed
The throwable camera and the robodog share one feed screen:
| Part | Shows |
|---|---|
| Top left | Date and time |
| Top centre | Compass with the heading in degrees |
| Top right | LINK: signal strength and distance / max range to the player using it; turns yellow and then red near maxRange |
| Right | Integrity of the unit and its status (online, damaged, critical, taser recharging) |
| Bottom left | Session time and the unit's name |
| Bottom right | The keys of the unit |
Throwable camera
Hold left click to charge, release to throw. When it lands your view flies to the camera and you get its feed. From the feed you look around, zoom, drive the camera along the ground and hop over curbs.
| Key | Action |
|---|---|
| Hold / release left click | Charge / throw |
| Right click | Show the throw arc and landing spot |
G | Cancel the throw, nothing is used up |
B | Connect to the nearest camera / disconnect |
W A S D / SPACE | Drive / hop |
| Mouse / Scroll | Look / zoom |
H | Detonate (the item is lost) |
ESC | Pick your camera up from the feed |
BACKSPACE | Leave the feed and the camera in place |
Cameras can be shared with your job. Each player may have two out, twenty on the server. A camera has 100 durability: bullets, melee and explosions wear it down, and at zero it blows up. You see the blast from the feed and are then returned to your character, the same as when you detonate it yourself.
If the camera goes more than 80 m from the player watching it, it is removed and the item returns to the owner's inventory. The range is ThrowCam.maxRange.
Robodog
Drop the robot dog in front of you and you take control of it straight away. Drive it in first person or in a chase view, jump, and tase suspects. It is a remote driven unit with no AI.
| Key | Action |
|---|---|
W A S D | Move |
SHIFT | Run |
SPACE | Jump |
| Mouse / Scroll | Look / zoom |
V | First person ↔ chase camera |
| Left click | Taser (12 m, 5 s cooldown) |
ESC | Recall the unit, the item comes back |
M / use the item again | Take control of your unit again |
Walls, fences, vehicles and props stop it, and it slides along a wall when you walk into it at an angle. The taser shakes the target for two seconds and leaves them on the ground for six, players and NPCs alike. A unit has 250 durability; at zero it blows up, you see the blast from its camera and are then returned to your character.
If the robodog goes more than 80 m from the player driving it, it is removed and the item returns to the owner's inventory. The range is Robodog.maxRange.
Flashbang
Right click aims, left click throws, and it goes off 1.5 seconds after it leaves your hand. Players inside 18 m who have a line of sight and are facing it are blinded and deafened for up to 7 seconds, scaled by distance and angle. Someone facing away only hears the bang.
| Key | Action |
|---|---|
| Right click / Left click | Aim / throw |
G | Cancel, the item is kept |
Pepper spray
Hold left click to spray a jet from the nozzle towards your crosshair, up to 4.5 m. The target gets red blurry vision, blinks, coughs and slows down; a heavy dose knocks them down. NPCs cough and run.
| Key | Action |
|---|---|
| Left click (hold) | Spray |
G / use the item again | Put away |
The can has a charge stored on the item, about 28 seconds of spraying, with a warning at 25 percent. ox_inventory shows it as a durability bar. The charge can be turned off in the config.
Mouth tape
Use the item next to a player and the officer presses tape over their mouth. The taped player is muted in voice chat, and on the radio too if muteRadio is set. Anyone next to them can peel it off with E, and the item goes to whoever removed it.
| Key | Action |
|---|---|
| Use the item | Apply the tape |
E (next to a taped player) | Remove the tape |
Who can be taped is set in the config: anyone, only cuffed players or only downed players. Works with pma-voice, mumble-voip, SaltyChat and native voice.
Megaphone
The megaphone is on while it is in your hand. Everything you say goes out with a megaphone tone and a longer range, and the megaphone rises to your mouth whenever you talk. A HUD dial shows the range.
| Key | Action |
|---|---|
↑ / ↓ | Range up / down in 5 m steps (10 - 60 m), remembered per player |
G / use the item again | Put away |
| Target "Use Microphone" | Speak through a microphone stand (100 m) |
Microphone props in the world work as stands, and walking away releases them. The tone is applied by every listener for the speaker, so nothing is relayed through the server. Radio and phone calls keep their own sound.
The megaphone tone needs setr voice_useNativeAudio true in server.cfg.
BolaWrap
Aim with right click and a laser shows where the cord will wrap. A tap fires one cord around the upper body (arms tied) or the legs (cannot move), depending on where you aim. Holding left click charges both cords and wraps the whole body.
| Key | Action |
|---|---|
| Right click / Left click | Aim / fire, hold to charge both cords |
H | Laser on / off |
E (next to a wrapped player) | Cut them free |
G / use the item again | Put away |
Range is 20 m with a 5 second recharge and no ammo. Wrapped players do not ragdoll and their inventory is locked. A wrapped player gets one quick time attempt to saw through the cord themselves.
Chain cuffs
Use the item to pick a nearby player and chain them to another player, to yourself, or to a prop such as a bench or a railing. A real chain hangs between the two ends: inside its length both move freely, and when it pulls tight the stronger side drags the other.
| Key | Action |
|---|---|
| Use the item | Open the chain menu |
Left click / E | Hook the chain to the aimed prop |
Right click / BACKSPACE | Back |
| Use the chain key | Unlock the chain |
The officer receives a key for every chain, and the key can be handed to others. Chained players are cuffed, disarmed and cannot enter vehicles. The chain is 4 m long by default.
Wheel clamp
Use the clamp next to a stopped vehicle and the character turns to the nearest wheel and fits it. A clamped vehicle cannot be driven.
| Key | Action |
|---|---|
| Use the item | Fit a clamp |
E | Remove it (owner and job) or start the lockpick |
A / D | Turn the pick |
E / ENTER | Set the pin |
The standard clamp can be lockpicked in a 3D minigame with lockpick or advancedlockpick; the heavy clamp cannot. Wrong presses cost time, and the pick can snap. Dispatch scripts can react to lockpick attempts.
Mobile spike strip
Mount the strip on a vehicle from outside. While driving, ↓ swings it out from the bumper to burst the tyres of the car you are chasing.
| Key | Action |
|---|---|
↓ / ↑ | Deploy / retract |
H | Position menu (forward, height, side, angle) |
G (in the vehicle) | Take it off, the item comes back |
Each tyre has a 60 percent chance to burst, at most two per pass. Emergency vehicles are not affected.
Police grappler
A fold-down net arm on the front bumper. Lower the arm and nose in under the fleeing car. When a rear wheel rolls onto the net it wraps around the wheel, two straps tie it to your car and the target spins to a stop.
| Key | Action |
|---|---|
↓ | Lower the arm |
↑ | Raise the arm, or release the rope while tethered |
H | Position menu (forward, height, angle) |
G (in the vehicle) | Take it off, the item comes back |
Catches fail above 160 km/h. The rope has 8 m of slack and snaps when stretched too far. A new net is fitted automatically after a release.
Speed radar
A handheld laser radar. Right click aims and the vehicle under the reticle is measured live, as far as vehicles exist and never through walls. The device's own screen shows speed, distance, LOCK and OVER, and nearby officers see each other's screens.
| Key | Action |
|---|---|
| Right click | Aim / measure |
↑ / ↓ | Speed limit +10 / -10 |
H | km/h ↔ mph |
G / use the item again | Put away |
A panel shows speed, plate, distance and approach, plus the last three speeders. Each speeding vehicle can be posted once to a Discord webhook with plate, speed, model, officer and location.
Road control device
One item that is never used up. It opens a placement preview for twelve props plus the road blocker plate.
| Key | Action |
|---|---|
CAPS LOCK | Switch prop |
| Mouse / Scroll | Position / rotate |
↑ / ↓ | Height |
Q / E | Copies in a row (up to 6) |
G | Place raised or lowered (bollard and plate) |
ENTER / ESC | Place / cancel |
G (next to it, or from the driver's seat) | Raise / lower |
E (next to it) | Pick up |
The bollard blocks traffic when raised. Cones and work barriers can be knocked over by vehicles. The steel road blocker plate lies flat and throws cars that drive over it when raised. Each player may have six barriers and six plates out, and the prop list can be extended with Bollard.props.
Vehicle panel
When your vehicle carries a mobile spike or a grappler, or you wear the night vision helmet, a small panel on the left shows which system the arrow keys, G and H control.
| Key | Action |
|---|---|
K | Show / hide the panel |
CAPS LOCK | Switch between panels |
Vehicle gear saved on plates
Clamps, mobile spikes and grapplers are saved on the vehicle's plate. If the vehicle is garaged, deleted or the server restarts, the gear is back when the same plate spawns: the clamp still fitted, the spike and grappler mounted and closed. Records of plates not seen for 30 days are deleted.
Kits
A kit is one bag item. Using it gives everything inside; if it does not fit, nothing is taken. The contents are listed in the item description.
| Kit | Contents |
|---|---|
| Traffic Kit | Speed radar, road control device, 2 wheel clamps, heavy wheel clamp, mobile spike strip, police grappler |
| Assault Kit | Battering ram, ballistic shield, deployable shield, 3 flashbangs, night vision goggles, throwable camera |
| Restraint Kit | BolaWrap, 2 chain cuffs, 3 mouth tapes, pepper spray |
| Support Kit | Robodog, megaphone |
Framework and inventory support
| Supported | |
|---|---|
| Framework | qb-core, qbx_core, es_extended |
| Inventory | ox_inventory, qs-inventory, qb-inventory, ps-inventory, lj-inventory, codem-inventory |
| Target | ox_target, qb-target, interact, text UI fallback |
| Voice | pma-voice, mumble-voip, SaltyChat, native |
| Languages | en, tr, de, fr, es, pt, it, ru, pl, nl, ar |
Item descriptions are written to the inventory in the selected language.
Performance
| Idle | No loops run for players who are not using the gear |
| Threads | Start when a tool is used and stop when the work is done |
| Background | Watchers for placed props, robodogs and radar screens only run while there is something to watch |
| Server | Every event is checked for job, item, distance and ownership, and rate limited |
Exports
Client:
exports['frkn-tacticalpack']:useRam() -- every item has a use* export
exports['frkn-tacticalpack']:EquipShield()
exports['frkn-tacticalpack']:IsShieldEquipped()
exports['frkn-tacticalpack']:IsNvgEquipped()
exports['frkn-tacticalpack']:GetCameras()
exports['frkn-tacticalpack']:IsControllingRobodog()
exports['frkn-tacticalpack']:IsGagged()
exports['frkn-tacticalpack']:IsRestrained()
exports['frkn-tacticalpack']:IsMegaphoneEquipped()
exports['frkn-tacticalpack']:GetBreachableDoor()
exports['frkn-tacticalpack']:HasRequiredJob(itemName)
Server:
exports['frkn-tacticalpack']:IsVehicleClamped(netId)
exports['frkn-tacticalpack']:RemoveVehicleClamp(netId)
exports['frkn-tacticalpack']:AddMark(coords, source)
exports['frkn-tacticalpack']:IsTaped(source)
exports['frkn-tacticalpack']:SetTaped(source, state)
exports['frkn-tacticalpack']:IsBolawrap(source)
exports['frkn-tacticalpack']:ChainPlayers(a, b)
exports['frkn-tacticalpack']:Unchain(source)
exports['frkn-tacticalpack']:IsUsingMegaphone(source)
exports['frkn-tacticalpack']:GiveKit(source, 'traffic', 1)
exports['frkn-tacticalpack']:HasRequiredJob(source, itemName)
Server events
Other resources can listen to every action with AddEventHandler:
AddEventHandler('frkn-tacticalpack:server:onDoorBreached', function(source, doorId, coords, system, unlocked) end)
AddEventHandler('frkn-tacticalpack:server:onClampLockpick', function(source, clamp, success) end)
AddEventHandler('frkn-tacticalpack:server:onRadarReading', function(source, reading) end)
| Event | Fired when |
|---|---|
onDoorBreached | A door is rammed |
onCameraDeployed / onCameraRemoved / onCameraDetonated | Camera placed, removed, blown up |
onRobodogDeployed / onRobodogTaser / onRobodogRemoved | Robodog placed, taser fired, removed |
onTapeApplied / onTapeRemoved | Mouth tape applied, removed |
onFlashbangDetonated | A flashbang goes off |
onPepperSprayHit | Pepper spray hits a player |
onBolawrapHit / onBolawrapReleased / onBolawrapCut | Player wrapped, freed, cut free |
onMegaphoneState | Megaphone turned on or off |
onChainLinked / onChainRemoved | Chain put on, taken off |
onSpikeInstalled / onSpikeToggled / onSpikeRemoved / onSpikeBurst | Spike mounted, deployed, removed, tyres burst |
onClampApplied / onClampRemoved / onClampLockpick | Clamp fitted, removed, lockpick attempt |
onGrapplerInstalled / onGrapplerHit / onGrapplerReleased | Grappler mounted, target caught, rope released |
onRadarReading | Speeding reading |
onBollardPlaced / onBollardToggled / onBollardRemoved | Barrier placed, raised / lowered, picked up |
Every event name starts with frkn-tacticalpack:server:, for example frkn-tacticalpack:server:onDoorBreached.