OverflowOverflow
Radio

Jammer

A placeable prop that blacks out every radio inside its radius. Players in range hear a glitch when they open the radio and cannot transmit. It ends when its duration runs out or when someone shoots the prop.

How a player uses it

  1. Use the jammer item and aim: mouse wheel rotates, click drops it.
  2. Interact with the prop to open the arming terminal and type the command sequence.
  3. Once armed, the radio blackout begins.
  4. Shooting the prop destroys it and the jammed area disappears.

An unarmed jammer despawns after activation.window seconds.

Item setup

The jammer is driven by ox_inventory. Add the item to data/items.lua:

['radio_jammer'] = {
    label       = 'Signal Jammer',
    weight      = 2000,
    stack       = true,
    close       = true,
    description = 'A portable device that blocks all nearby radio communications for a while.',
    server      = { export = 'of_radio.useJammerItem' },
},

Then map the item to a jammer type:

Config.Jammer.items = {
    ['radio_jammer']     = 'portable',
    ['radio_jammer_mil'] = 'military',
}

An item's metadata.jammerType overrides this map. Items missing from it fall back to Config.Jammer.default.

Types

config/jammer.lua. Add or edit variants freely.

portable = {
    label        = 'jammer_type_portable',  -- locale key
    radius       = { default = 50.0, min = 20.0, max = 80.0 },
    duration     = 300,   -- seconds before it auto-expires
    health       = 600,   -- prop health; the jammer ends at 0
    destructible = true,  -- false makes the prop bullet-proof
},

A requested radius is clamped to [min, max].

Other settings

SectionWhat it controls
placementAim distance, rotation step, ghost opacity and carry animation
activation.cameraCinematic camera while arming: set enabled = false to skip it
activation.terminalTerminal title, intro text and the steps command sequence
breakFxParticles played when the prop is destroyed

Disable the whole system with Config.Jammer.enabled = false.

Exports

Server-side, for wiring the jammer to your own scripts.

-- Start an already-armed jammer. Returns the jammer id, or nil plus a reason.
local id, reason = exports.of_radio:startJammer({
    coords  = vec3(0.0, 0.0, 70.0), -- omit to drop it at the source player's feet
    heading = 0.0,                  -- optional
    type    = 'portable',           -- optional, defaults to Config.Jammer.default
    radius  = 60.0,                 -- optional, clamped to the type's min/max
    source  = playerId,             -- optional owner
})

-- Stop it early.
exports.of_radio:stopJammer(id)

startJammer skips the terminal and arms immediately, so use it for admin tools or scripted events. The item flow places an inert jammer the player must arm.

On this page