RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

Server CommandsGE UtilitiesGame Engine MainNavigation GraphScreenshot CaptureServerServer ConnectionSpawnpoint ManagerSimulation TimeVehicle SpawningSuspension Frequency Tester
Freeroam Big Map MarkersFreeroam Big Map ModeFreeroam Big Map POI ProviderFreeroam Crash Cam ModeFreeroam Crash Cam Mode LoaderFreeroam Drag RaceFreeroam FacilitiesFreeroamFreeroam ConfiguratorFreeroam Gas StationsFreeroam Level StatsFreeroam OrganizationsFreeroam Special TriggersFreeroam Vue Big Map

UI

Resources

BeamNG Game Engine Lua Cheat SheetGE Developer RecipesMCP Server Setup

// RLS.STUDIOS=true

Premium Mods for BeamNG.drive. Career systems, custom vehicles, and immersive gameplay experiences.

Index

HomeProjectsPatreon

Socials

DiscordPatreon (RLS)Patreon (Vehicles)

© 2026 RLS Studios. All rights reserved.

Modding since 2024

API ReferenceGE Extensionsfreeroam

Freeroam Special Triggers

Event-driven system for toggling scene objects (statics, lights) when vehicles enter/exit BeamNGTriggers or site zones. Supports delayed activation, random ordering, nested SimGroups, and Lua command

Event-driven system for toggling scene objects (statics, lights) when vehicles enter/exit BeamNGTriggers or site zones. Supports delayed activation, random ordering, nested SimGroups, and Lua command execution.


State Fields

FieldTypeDefaultDescription
M.activebooleantrueGlobal enable/disable flag for all trigger processing
M.debugModebooleanfalseEnables debug logging for trigger events

Public API

FunctionSignatureReturnsDescription
M.loadTriggers(filePath?)nilLoads triggers from JSON; defaults to level's triggers.json
M.setupTriggers(data)nilProgrammatically sets up triggers from a data table
M.addTrigger(key, data)nilAdds a single trigger definition
M.removeTrigger(key, useOrigState?)nilRemoves a trigger; optionally restores original states
M.getTriggers()tableReturns all trigger definitions
M.setTriggerActive(tName, active, instant?)nilManually activates/deactivates a trigger
M.reset(useOrigState?)nilClears all triggers
M.onClientStartMission()nilAuto-loads level triggers on mission start
M.onBeamNGTrigger(data)nilHandles BeamNGTrigger enter/exit events for vehicle detection
M.onVehicleSwitched(oldId, newId)-
M.onVehicleDestroyed(vehId)-
M.onVehicleActiveChanged(vehId, active)-
M.onClientEndMission()-
M.onUpdate(dt, dtSim)-
M.onSerialize()-
M.onDeserialized(data)-

Trigger Definition

{
  type = "trigger",          -- "trigger" or "zone"
  triggers = {"t1", "t2"},   -- optional grouped trigger names
  subjectType = "player",    -- "player", "notPlayer", "all"
  subjectIds = {id1, id2},   -- optional specific vehicle IDs
  enterCommand = "lua code", -- GE Lua on enter
  exitCommand = "lua code",  -- GE Lua on exit
  enterVehCommand = "cmd",   -- Vehicle Lua on enter
  exitVehCommand = "cmd",    -- Vehicle Lua on exit
  objects = {
    ["SimGroupName"] = {
      enterDelay = 0.5,
      exitDelay = 1.0,
      enterRandomMin = 0.1,
      enterRandomMax = 0.3,
      randomOrder = true
    }
  }
}

How It Works

  1. Loading: Auto-loads triggers.json from level root on onClientStartMission
  2. Detection: BeamNGTrigger events fire onBeamNGTrigger; zone detection runs on a 0.25s tick
  3. State Change: When a valid vehicle enters/exits, toggles linked objects from their original state
  4. Delayed Toggle: Objects can have enter/exit delays; SimGroup children toggle sequentially with random timing
  5. Nested Groups: If a SimGroup contains only child SimGroups, all children are processed in parallel at each index step
  6. Original State: First access stores each object's original hidden/enabled state for proper reset

Object Types

  • TSStatic / other: Toggles hidden field
  • PointLight / SpotLight: Toggles isEnabled field

Subject Filtering

  • player: Only player vehicle triggers
  • notPlayer: Only non-player vehicles
  • all: Any vehicle
  • subjectIds: Specific vehicle ID whitelist

Usage Examples

-- Load level triggers
freeroam_specialTriggers.loadTriggers()

-- Add a custom trigger
freeroam_specialTriggers.addTrigger("myTrigger", {
  subjectType = "player",
  enterCommand = "print('entered!')",
  objects = { ["lightGroup"] = { enterDelay = 0.5 } }
})

-- Manually toggle
freeroam_specialTriggers.setTriggerActive("myTrigger", true, true)

Notes

  • Grouped triggers (via triggers array) create aliases; exit only fires when all grouped triggers are inactive
  • Multiple vehicles tracked independently per trigger
  • Zone-based triggers require gameplay_city sites data
  • M.active and M.debugMode flags control global behavior

See Also

  • Freeroam Big Map Markers - Related reference
  • Freeroam Big Map Mode - Related reference
  • Freeroam Big Map POI Provider - Related reference
  • Freeroam Guide - Guide

Freeroam Organizations

Loads and manages organization data used in career mode. Organizations have reputation levels, associated facilities, and delivery capabilities.

Freeroam Vue Big Map

M.dependencies = {'gameplay_missions_missions','freeroam_bigMapMode', 'gameplay_rawPois'}

On this page

State FieldsPublic APITrigger DefinitionHow It WorksObject TypesSubject FilteringUsage ExamplesNotesSee Also