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. The poly zone, nested menu and option offset approximations each print a one-time console note; the rest are silent:
  • 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 wide enough to reach the polygon’s farthest point, so a long thin poly is the worst fit: a 20m x 2m strip becomes a roughly 10m sphere.
  • 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.
  • Targets behind the player are ignored - ox’s crosshair reached anything the camera was pointed through. Here nothing at the player’s back is focused, and a camera pushed into a wall can’t see past it. Registrations are unaffected - only where a player stands and which way they face.
Scripts written against the old qtarget export name are served too - see qtarget.

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 key is held; false turns them off - as does the ox_target:defaults convar, if your server already set it to 0.

Reveal Mode

Bridged content renders nothing until you look at it. If you’d rather every bridged zone get a grain (a point of light marking it from a distance), set Config.Reveal.bridged = 'ambient' in config.lua. Bridged entities, models and globals always reveal on focus.

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 key 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.