API Reference

Exports, state bags, and network events for integrating with tELS from other scripts.

Lua API

Client exports

Both exports return nil when the entity isn't a tELS-configured vehicle — useful for detecting tELS vehicles without hard-coding model lists.

IsSirenActive

Returns whether any siren is playing (main, aux, or burst).

local active = exports['tELS']:IsSirenActive(vehicle)
-- true | false | nil
ParameterTypeNotes
vehiclenumberVehicle entity handle

AreLightsActive

Returns whether emergency lights are on (any stage > 0).

local on = exports['tELS']:AreLightsActive(vehicle)
-- true | false | nil
ParameterTypeNotes
vehiclenumberVehicle entity handle

State bags

Lighting and siren state syncs via OneSync state bags, so any script on any client can read the current state of any vehicle — no server round-trip required.

Entity state bags

Read with Entity(vehicle).state['key'] from either client or server.

KeyTypeDescription
tels:activebooleanEmergency lights active
tels:patternIdxnumberPattern index (1-based; 0 = lights-only)
tels:stagenumberCurrent stage (0 = off, 1–3)
tels:sirenOnbooleanMain siren playing
tels:sirenTonenumberMain siren tone index
tels:auxSirenOnbooleanAux siren playing
tels:auxSirenTonenumberAux siren tone index
tels:sirenBurstbooleanBurst tone currently held
tels:hornActivebooleanHorn / airhorn active
tels:cruiseOnbooleanCruise mode on
tels:takedownOnbooleanTakedown mode on
tels:taModestring"off", "left", "right", "center"
tels:presenceEnabledbooleanPresence detection armed
tels:presenceDetectedbooleanPresence condition currently satisfied (pushed by the owning client)
tels:chirpActivebooleanChirp tone running
tels:rumblerOnbooleanRumbler variant active
tels:argesOnbooleanArges spotlight active
tels:argesAimYawnumberArges spotlight aim (horizontal, degrees)
tels:argesAimPitchnumberArges spotlight aim (vertical, degrees)
tels:ownedBynumberServer ID of the player who claimed ownership of this vehicle (set by tels:claimOwnership when a player takes control)

Player state bag

KeyTypeDescription
tels:ownerbooleantrue on the local player while they own any tELS vehicle. Used to filter out other officers from presence detection.

Example

-- On the client: react to a nearby vehicle going Code 3
CreateThread(function()
    while true do
        Wait(500)
        local veh = GetClosestVehicle(coords.x, coords.y, coords.z, 30.0, 0, 71)
        if veh ~= 0 and Entity(veh).state['tels:active']
                    and (Entity(veh).state['tels:stage'] or 0) >= 2
                    and Entity(veh).state['tels:sirenOn'] then
            -- code 3 behavior
        end
    end
end)

Network events

Server → client

EventPayloadPurpose
tels:config_receiveconfigs (table: modelName → config)Broadcast full vehicle configs after a save or server start
tels:serverDefaultsdefaults (table)Admin display defaults + available layouts + isAdmin flag
tels:stateSyncsenderSrc, netId, deltaRelayed local-state delta for remote clients when ownership changes
tels:presenceSyncClientsenderSrc, netId, detectedPresence state broadcast from the owning client
tels:notifymsgServer-initiated on-screen notification

Client → server

EventPayloadACEPurpose
tels:requestDefaultsRequest current server defaults and available layouts
tels:saveServerDefaultsdatatlib.adminPersist new server defaults
tels:claimOwnershipnetIdClaim vehicle ownership for state relay
tels:stateBagRelaynetId, deltaRelay a state delta when the client loses network-entity ownership
tels:presenceSyncnetId, detectedOwner client pushes its presence state for other clients
tels:ref_edit_pattern_deltamodel, patternName, editDatatlib.adminApply a pattern delta to a referenced source vehicle
tels:ref_edit_triggermodel, triggerId, newTriggertlib.adminReplace a trigger in a referenced source vehicle
tels:ref_edit_sirenmodel, newSirenConfigtlib.adminUpdate siren tones / airhorn / chirp on a referenced source
tels:ref_edit_settingsmodel, newConfigtlib.adminUpdate siren behavior settings on a referenced source

Configs auto-registered by Discovery

tELS uses tLib's Discovery module, which registers its own event set in addition to the above. The relevant ones from a consumer's perspective:

EventDirectionPurpose
tels:config_receiveS → CAuthoritative config broadcast
tels:externalSourceInfoS → CWhich resource bundled each model's config
tels:exportTargetsS → CList of models available for export / bundling

Discovery metadata

Vehicle resources that ship a bundled config declare it via fxmanifest metadata:

FieldValue
Metadata keytels_config
Default filenametels.json
Local storagedata.json at the tELS resource root
Event prefixtels

See Configuration → Vehicle-developer export for the full setup.


Internal globals (advanced)

These are Lua globals exposed across tELS client files. They're intended for internal use but can be read from scripts that merge into the tELS resource. Do not rely on them from other resources — signatures and names may change.

GlobalSourcePurpose
lbarGetLocalState(vehicle)cl_lights.luaLocal state table for a vehicle (returns nil for remote)
lbarGetMaxStage(modelName)cl_lights.luaMax configured stage for a vehicle model
getVehicleConfig(modelName)cl_lights.luaFull resolved config for a model
getCustomPatterns(modelName)cl_lights.luaResolved patterns list (refs dereferenced)
getResolvedTriggers(modelName)cl_lights.luaResolved triggers list
getSirenConfig(modelName)cl_lights.luaResolved siren config
resolveColorIndex(led, index, frame)shared/utils.luaPattern-cell lookup with legacy fallback
renderLEDSet(veh, leds, colors, opts)cl_renderer.luaUnified LED render entry point

If you're building tooling or extensions inside the tELS resource, these are the right hooks. External integrations should stick to the exports and state bags above.

On this page

Need help?

Ask on Discord