Skip to main content
lation_interact is a drop-in replacement for ox_target. Every export - addBoxZone, addModel, addLocalEntity, all of it - is answered under the ox_target name, with the same behavior your scripts expect: named replacement and removal, distances, canInteract signatures, dispatch payloads, cleanup when a resource stops. No consumer script needs editing. The switch:
  1. Remove (or stop) the real ox_target
  2. ensure lation_interact after your framework core, before every script that uses targeting
Scripts that check for ox_target see it as installed, and everything they register shows up in the new interaction UI automatically. Coordinates arrive the way ox_lib takes them - a vector3, a vector4, or a plain { x, y, z } table from JSON or a database row.

What You Might Notice

A few things don’t translate one-to-one from a crosshair to an attention model. Each of these prints a one-time console note if a script actually uses it:
  • Zones reach from a step away - ox targets a zone wherever its raycast lands inside it; here the stack goes live within Config.Stages.reach (2.4m) of the zone’s surface, never farther than the option’s own distance. A zone wrapped around a desk or a marker on the floor works from where an ox player would stand.
  • Poly zones become spheres - addPolyZone shapes are approximated as a sphere around the polygon’s center, so a long thin poly gains a little coverage at its corners.
  • Nested menus flatten - options grouped under a menuName all render in one list. openMenu rows that do nothing but switch submenus are dropped; openers that also carry a handler keep working as normal rows.
  • Option offsets are ignored - the anchor sits at the bone or entity center.
  • Icon styles render solid - fa-regular/fa-brands styles aren’t carried over; every icon renders as its solid variant. iconColor is honored.
  • No qtarget legacy surface - scripts written against the ancient qtarget export name (not ox_target) are not served.

Vehicle Doors

The door, hood and trunk toggles ox_target’s defaults provided are built in: one chip per door, on the door itself, hidden while the door is locked, damaged, or you’re sitting in a vehicle. Config.VehicleDoors = 'passive' keeps them hidden until the interact control is held; false turns them off - as does the ox_target:defaults convar, if your server already set it to 0.

Reveal Mode

Bridged targets render nothing until you look at them by default. If you’d rather every bridged target get a grain (a point of light marking it from a distance), set Config.Reveal.bridged = 'ambient' in config.lua.

Per-Script Behavior

Two things you can set without touching the script itself:
  • Passive - list a resource in Config.PassiveResources and everything it registers stays hidden until the interact control is held, like a classic target. See passive mode.
  • In a vehicle - options a script flags with allowInVehicle = true stay live from a seat; everything else follows Config.InVehicle. See in a vehicle.

Updating

After updating lation_interact, do a full server restart so every script that depends on it registers its targets correctly.