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:
- Remove (or stop) the real
ox_target
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.