> ## Documentation Index
> Fetch the complete documentation index at: https://lationscripts.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Interact - ox_target

> Remove ox_target, keep every script - and the few differences you might notice

`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](/docs/interact/how-it-works#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](/docs/interact/how-it-works#in-a-vehicle).

## Updating

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