# Overview

`lwk_taser` turns the stun gun into a TASER 10: ten single probes per magazine, one per trigger pull, with a laser, a flashlight, real barbs and wires, and a live rear screen. Runners on foot don't get far.

## Requirements

- OneSync.
- [ox_target](https://github.com/overextended/ox_target), for removing barbs from someone.
- Works standalone (unlimited magazines) or with ox_inventory, qb-core or ESX (magazines are items).

## Controls

| Key | Does |
|---|---|
| **Aim + left click** | Fire the next probe |
| **X** | ARC: re-energise wired barbs, or a warning arc |
| **H** | Flashlight |
| **J** | Laser |
| **R** | Load a new magazine (ejects the old one; only once probes have been fired) |
| ox_target on the target | Remove barbs |

Rebind them in **Settings → Key Bindings → FiveM → lwk_taser**.

> [!WARNING]
> Voice dispatch's push-to-talk is also on **H**. With both installed, rebind one of them, e.g. the flashlight to another key.

## How the TASER 10 behaves

- **One probe per pull.** Each hit puts one barb in the target and starts a full energy cycle (5 seconds), and the gun locks out for that cycle.
- **Range** is 13.7 m (45 ft).
- **Wires.** Barbs stay wired to the gun. Walk past 15 m and they rip out. Holstering or a new magazine disconnects the wire.
- **ARC (X)** re-energises wired barbs for another cycle, or gives a warning arc when nothing's wired.
- **No drive stun** by default, like the real TASER 10. Turn it on with `Config.DriveStun = true`.

## The screen

Bays, safety, laser, light and the cycle timer show on the HUD and on a live screen on the back of the gun. The screen works on custom models too. Every nearby TASER 10 shows its holder's own screen.

## Magazines

On a framework server, one `taser_cartridge` item is one 10-probe magazine. Add it to your inventory:

**ox_inventory** (`data/items.lua`):
```lua
['taser_cartridge'] = { label = 'TASER 10 Magazine', weight = 50, stack = true },
```

**qb-core** (`shared/items.lua`):
```lua
taser_cartridge = { name = 'taser_cartridge', label = 'TASER 10 Magazine', weight = 50, type = 'item', image = 'taser_cartridge.png', unique = false, useable = false, shouldClose = false, description = 'TASER 10 magazine (10 probes)' },
```

**ESX:**
```sql
INSERT INTO items (name, label, weight) VALUES ('taser_cartridge', 'TASER 10 Magazine', 1);
```

Standalone servers (c3r on its own) skip this: magazines are unlimited.

## Audit log

Every use can go to a Discord webhook. Keep it out of the shared config and set it in `server.cfg`:

```cfg
set lwk_taser_webhook "https://discord.com/api/webhooks/..."
```

## The model

The resource replaces the stock stun gun model with its TASER 10 (`stream/w_pi_stungun.ydr` and `w_pi_stungun_hi.ydr`), so it overrides any other stun gun replacement you stream. To use your own model instead, see [Configuration](/docs/lwk_taser/configuration#custom-models).

## Sounds

`nui/sounds/*.ogg`: `fire`, `cycle` (looped for the energy cycle), `arc`, `click`, `reload`, `rip`. Replace any file to change it.

## Troubleshooting

- **H opens the radio instead of the light.** Both are on H; rebind one.
- **Can't remove barbs.** Needs ox_target running.
- **R does nothing.** You can only reload once probes have been fired, and on a framework server you need a `taser_cartridge` item.
- **The laser comes out of the wrong place.** You're using a custom model; calibrate it (see [Configuration](/docs/lwk_taser/configuration#custom-models)).
