# Overview

`seeker_dual` is a police radar built to work like the real STALKER DUAL DSR: dual antennas, three speed windows, a plate reader that can run plates through your CAD, and a physical unit on your dash. The included `manual.pdf` is the operator's manual for the real hardware; for the deep end of how the radar behaves, read that.

## Requirements

- [ox_lib](https://github.com/overextended/ox_lib), started before the radar.
- An emergency-class vehicle (`Config.allowedVehicleClasses`).

> [!TIP]
> Run this radar or the [DSR 2X](/docs/seeker_dsr2x/overview), not both. They share F5.

## Getting started

1. Get in a police vehicle.
2. Press **F5** for the remote.
3. Click **PWR** on the radar face to power on. The unit self-tests, then starts tracking.
4. Work the remote buttons as you would the real unit. See [The remote](/docs/seeker_dual/remote).

> [!NOTE]
> **PWR is not on the remote**, same as the real hardware: it's on the radar face. With the remote closed you can't click it, so use `/seeker_power` or set `Config.keybindPower`. Power off clears all locks.

**You can drive with the remote open.** Steering, throttle, brake and getting out all still work. Only the mouse is taken over: camera look, aiming and shooting, mouse steering, and the scroll wheel (it scales the display). **Esc** steps back one level at a time; **P** still opens the pause menu.

## Keys and commands

| Key | Does |
|---|---|
| **F5** | Open or close the remote |
| **Numpad 8 / 2** | Lock front / rear speed |
| **Numpad 7 / 1** | Lock front / rear plate |
| *(unbound)* | Power: set one with `Config.keybindPower` |

| Command | Does |
|---|---|
| `/seeker_settings` | Settings: power, units, antenna, layout, reset |
| `/seeker_power` | Power on or off |
| `/toggledoppler` | Doppler audio: On → On (Stationary Only) → Off |
| `/togglepr` | Show or hide the plate reader |
| `/seekerhide` | Hide the on-screen radar and read it off the dash unit instead |
| `/seeker_move`, `/prmove` | Move and resize the radar / plate reader |
| `/alprlog` | Last 20 flagged ALPR hits this session |
| `/seekerplace [spawncode]` | **Admin.** Mount the dash unit in the vehicle you're in |
| `/seekerplace remove` | **Admin.** Delete the mount for this vehicle model |
| `/seeker_radar_debug` | Draw the radar beam in the world |

## What it remembers

Every operator setting saves the moment you change it and comes back on next power-up, across vehicle changes and reconnects.

- **Saved:** antenna and lane mode, MOV STA, SEN, PS, FAST LOCK, VOL, BLANK, brightness, Doppler mode, plate reader visibility, speed unit, and where you put everything on screen.
- **Not saved:** power (always comes up off and self-tests), speed and plate locks (cleared on power off), and XMIT (always comes up on, so the radar is never silently dead).

Settings in the config are first-run defaults only. Once a player has used the radar, their own saved settings win.

## Moving things around

With the remote open, drag the radar or plate reader to move it, scroll to scale, drag the corner handle to resize. Double-click the remote (anywhere that isn't a button) to move it; double-click again or press Esc to save. `/seeker_settings` → **Reset Remote Position** puts the remote back in the middle.

## The dash unit

A physical radar that mounts in the car, with a live screen showing the same readouts. It stays put when you get out and reads dark when the radar is off. You only see it in your own car (a GTA limitation).

Its position is saved per **vehicle model**, server-wide: one admin sets up a `police3` and it's right for every `police3`.

1. Sit in the vehicle and run `/seekerplace`.
2. Nudge it into place: **W A S D** move, **E / Q** up and down, **arrows** and **Z / X** rotate, hold **Shift** for fine steps, mouse or **V** to look around.
3. **Enter** saves for this model; **Backspace** cancels.

Grant the permission:

```cfg
add_ace group.admin seeker_dual.place allow
```

If the screen is dark at night, tune `Config.radarProp.screenGlow` (it adds a small light in front of the screen after dark). `/seekerhide` runs everything off the dash unit alone, with the on-screen display hidden.

## Exports

```lua
-- client
exports.seeker_dual:GetRadarState()            -- full state table
exports.seeker_dual:IsRadarActive()            -- powered and transmitting
exports.seeker_dual:IsRadarDisplayed()         -- radar is on screen
exports.seeker_dual:CanControlRadar()          -- in a valid vehicle

-- server
exports.seeker_dual:GetPlayerRadarState(source) -- { power, frontXmit, rearXmit }
exports.seeker_dual:IsPlayerRadarActive(source)
exports.seeker_dual:ClearAlprCache()            -- drop every cached plate lookup
```

## Troubleshooting

- **The remote won't open.** You need to be in an allowed vehicle class, and ox_lib has to start before the radar.
- **No targets.** XMIT must be on, and the right antenna selected for the direction you're looking.
- **No Doppler audio.** It's off by default; cycle it on with `/toggledoppler`. If it plays parked but stops when you drive, it's on Stationary Only.
- **Power does nothing.** The remote is closed, so the PWR area can't be clicked. Use `/seeker_power` or bind a key.
- **The cursor is stuck after closing the remote.** Another script may be holding the mouse. Restart the resource.
- **The dash unit's screen is black.** Check `Config.radarProp.textureDict` and `textureName` match the model.
- **The layout keeps resetting.** Press Esc to leave layout mode; that's what saves it.
