Documentation

Signal Jammer

All information you would need regarding the signal jammer.

High-end vehicles have a security system that blocks lockpicking and hotwiring. Before a thief can tamper with one of these vehicles, they have to suppress its security with a signal_jammer. A successful jam keeps the vehicle's security down for a limited time, which is the window to lockpick the door and hotwire the engine.


#Table of Contents


#How Jamming Works

  1. A protected vehicle blocks tampering. Using a lockpick or hotwiring it shows "This vehicle's security system blocks tampering. Jam its signal first."
  2. The thief uses a signal_jammer within maxDistance (default 4.0) of the vehicle and completes the tuning minigame.
  3. The vehicle is jammed for jamDuration seconds (default 120). During this window it can be lockpicked and hotwired as normal.
  4. The jam expires. Once the timer runs out, the vehicle is protected again. If the thief hasn't started the engine by then, they need to jam it again.

The jam only removes the security block. The thief still needs a lockpick to open the door and a hotwire kit (or the hotwire keybind) to start the engine. See Lockpicking and Hotwiring.


#Protected Vehicles

A vehicle needs a jam when any of these apply:

ReasonConfigured inDefault
Its vehicle class is listedsignalJammer.protectedVehicles.classesClass 7 (Super)
Its model is listedsignalJammer.protectedVehicles.modelsNone
It has a security moduleInstalled by the owner, see Security Modules-

Using the jammer on a vehicle that isn't protected shows "This vehicle has no security system worth jamming." and doesn't use the item.

You can choose which actions the jam is required for through requiredFor. By default both lockpicking and hotwiring require it.

lua
protectedVehicles = {
    classes = {[7] = true, [6] = true},  -- Super and Sports
    models = {[joaat("adder")] = true},
},

For fully custom rules, such as protecting job vehicles, edit IsSignalJammerProtectedVehicle in server/unlocked/hooks.lua. See Integration Hooks.


#Using the Jammer

#Get close to the vehicle

Stand within maxDistance (default 4.0) of the protected vehicle. The jammer targets the closest vehicle.

#Use the signal_jammer item

Your character turns to face the vehicle and raises the jammer, and the camera moves onto the device's screen. The jammer runs a short boot sequence (self test, antennas, band sweep) before the scan starts.

Putting the jammer away during the boot sequence is free. The scan hasn't started yet, so no durability is lost and no alarm goes off.

#Match the target signal

The scope shows two waveforms: the vehicle's Target signal and Your Signal. Turn the Freq and Amp dials until your waveform lines up with the target. When both values are close enough, the screen shows Sync and the Signal Lock meter starts filling.

Hold the sync until the meter is full (about 3 seconds). If you drift out of sync, the meter drains again.

#Signal locked

The screen shows Signal Locked and you get a notification with how long the vehicle stays jammed. You can now lockpick and hotwire the vehicle until the jam expires.


#Controls

ActionKeyboard & MouseController
Adjust frequencyA / DLeft stick (horizontal)
Adjust amplitudeW / SLeft stick (vertical)
Turn a dialDrag a dial with left mouse, or scroll on it-
CancelEscape, Backspace or right mouse-

The keys are shown as instructional buttons on screen while the jammer is active.


#Difficulty

Each jammer item has its own difficulty. A vehicle with a security module can raise it: the harder of the jammer's difficulty and the module's jamDifficulty is used. A module never makes a jam easier.

DifficultyTime limitFrequency toleranceAmplitude toleranceScope noise
easy40s±10±120.15
medium32s±7±90.25
hard25s±5±60.35
expert20s±3±40.45
  • Tolerances use the 0-100 dial scale. A smaller tolerance means you have to tune more precisely.
  • Scope noise is the jitter on the waveforms (0 to 1), making the target harder to read.
  • The difficulty is shown on the device screen.

With the default config, the signal_jammer item is hard. On an unmodified Super it plays as hard, and on a vehicle with an Elite module it plays as expert.


#Failing an Attempt

An attempt fails when:

  • The time limit runs out before the lock meter is full.
  • You cancel after the scan has started.
  • You are interrupted: moving out of range, ragdolling, falling, dying, or the vehicle disappearing.

A failed attempt:

  • Sets off the vehicle's alarm for alarmDuration seconds (default 30, 0 disables it).
  • Triggers the robbery hook with the alarmTriggered stage, which always counts as witnessed. See Dispatch & Logs.
  • Costs jammer durability, or may break it, depending on itemUsageMode.

#Jammer Durability

itemUsageMode controls what happens to the jammer item. It works the same way as lockpicks.

ModeBehavior
durabilityRemoves durability.success or durability.failure from the item. At 0 durability the jammer burns out and is removed.
breakOnFailEach failed attempt has a breakChance percent chance to destroy the jammer.
disabledThe jammer is never damaged.

By default, a successful jam costs nothing and a failed one costs 20 durability, so a jammer survives five failures.

Durability requires an inventory that supports item durability metadata. signal_jammer is non-stackable in the supplied item files for this reason.


#Dispatch & Logs

Jamming goes through the same hooks as the other theft actions:

StageWhenWitness check
startedThe scan goes live after the bootPeds within witnessDistance (default 15.0)
alarmTriggeredThe attempt failed and the alarm went offAlways witnessed

Both stages call OnKeyRobbery in server/unlocked/hooks.lua with type = "signalJammer", followed by the zyke_vehiclekeys:OnKeyRobbery event. Add your dispatch alert there.

A successful jam is logged through LogKeyAction as JammedVehicle.

To block jamming in certain places, edit CanJamKeyVehicle in the client or server hooks. By default it is blocked inside Zyke Garages sections when lockpicking.blockInGarageSections is enabled.


#Configuration Reference

All settings live in Config.Settings.signalJammer:

lua
signalJammer = {
    enabled = true,
    protectedVehicles = {
        classes = {[7] = true},             -- Vehicle class ids, 7 is Super
        models = {},                        -- Example: [joaat("adder")] = true
    },
    requiredFor = {
        lockpicking = true,                 -- Lockpicking a protected vehicle needs a jam
        hotwiring = true,                   -- Hotwiring a protected vehicle needs a jam
    },
    jamDuration = 120,                      -- Seconds the security stays jammed after a success
    maxDistance = 4.0,                      -- How close the player has to be
    witnessDistance = 15.0,                 -- Ped witness range when the scan starts
    alarmDuration = 30,                     -- Seconds the alarm sounds after a failure, 0 disables it
    itemUsageMode = "durability",           -- "durability" | "breakOnFail" | "disabled"
    items = {
        signal_jammer = {
            difficulty = "hard",
            durability = {success = 0, failure = 20},
            breakChance = 25,               -- Used by breakOnFail
        },
    },
    difficulties = {
        easy = {timeLimit = 40, frequencyTolerance = 10, amplitudeTolerance = 12, noise = 0.15},
        medium = {timeLimit = 32, frequencyTolerance = 7, amplitudeTolerance = 9, noise = 0.25},
        hard = {timeLimit = 25, frequencyTolerance = 5, amplitudeTolerance = 6, noise = 0.35},
        expert = {timeLimit = 20, frequencyTolerance = 3, amplitudeTolerance = 4, noise = 0.45},
    },
}

#Adding More Jammer Tiers

Every entry in items is registered as a usable jammer. To add a cheaper, easier jammer, add the item to your inventory and a matching entry:

lua
items = {
    signal_jammer = {difficulty = "hard", durability = {success = 0, failure = 20}, breakChance = 25},
    cheap_jammer = {difficulty = "medium", durability = {success = 10, failure = 34}, breakChance = 40},
},

#FAQ

Q: Do I need to add the jammer to my inventory? Yes. Add signal_jammer from extras/items/ and copy signal_jammer.png from extras/items/images/256/ into your inventory images.

Q: Does the jammer give the thief a key? No. It only removes the security block. The vehicle still has to be lockpicked and hotwired.

Q: The jam ran out while I was hotwiring. Why can't I continue? The jam is checked when each action starts. If it expires before you start hotwiring, you need to jam again. Increase jamDuration if your players need more time.

Q: Can I disable the system entirely? Set signalJammer.enabled = false. Protected vehicles, including those with security modules, can then be stolen without a jam.

Q: Can I only require it for hotwiring? Yes. Set requiredFor.lockpicking = false.

Q: Players see "This vehicle's security is already jammed." Another player already jammed it and the timer is still running. They can go straight to lockpicking.