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
- Use the jammer item and aim: mouse wheel rotates, click drops it.
- Interact with the prop to open the arming terminal and type the command sequence.
- Once armed, the radio blackout begins.
- 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
| Section | What it controls |
|---|---|
placement | Aim distance, rotation step, ghost opacity and carry animation |
activation.camera | Cinematic camera while arming: set enabled = false to skip it |
activation.terminal | Terminal title, intro text and the steps command sequence |
breakFx | Particles 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.
