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