Do my existing scripts need any changes?
Do my existing scripts need any changes?
No. Every
exports.ox_target:*, exports['qb-target']:* and exports.qtarget:* call from your existing resources works unmodified - options, condition checks, and events all behave as your scripts expect. The only requirement is start order: ensure lation_interact after your framework core, and before your inventory and every resource that registers targets.A target isn't showing - what should I check?
A target isn't showing - what should I check?
In order:
- Conditions - an anchor whose options are all gated off (job, item,
canInteract) is completely invisible to that player. Test with a character that passes the gates. - Suppression - the layer sleeps while the player is dead, cuffed, in the pause menu, or while another UI (inventory, phone) is open.
- You’re not looking at it - the label and options only show while the camera is on the thing itself. Distance alone gets you the point of light, and only on
'ambient'anchors. - It’s behind you, or behind something - nothing at the player’s back is ever focused, and line of sight is checked from their character, not the camera.
- Reveal mode - bridged ox_target / qb-target content renders nothing until you look directly at it. Anything moving faster than a jog leaves the layer until it slows down.
- Start order -
lation_interactmust start after your framework core and before your inventory and the resource that registered the target.ox_inventoryin particular switches its own targets off if it starts first, with anox_target is not loadedwarning. - In a vehicle - from a seat, anchors on other vehicles, peds and objects hide by default (
Config.InVehicle). - Still stuck? Add
debug = trueto the registration to draw its interaction shape in-world and confirm it’s where you think it is.
I see the label but never the key prompt
I see the label but never the key prompt
Before 1.1.0 a zone bridged from ox_target only went live with the player inside it - impossible for a zone wrapped around a desk or a marker on the floor. Zones now reach from
Config.Stages.reach (2.4m) outside their surface, so update and set reach back to its default if you raised it while troubleshooting.Can it behave like a classic target - only show while I hold a key?
Can it behave like a classic target - only show while I hold a key?
Yes: passive mode.
Config.Passive = true makes the whole server hold-to-see on the interact key (Left Alt by default), Config.PassiveResources = { 'qb-drugs' } does it for what those scripts register only - escrowed scripts included - and passive = true does it for a single registration. Hidden passive interactions have no grain, no label, and no input. See passive mode.Players can spam a key and repeat an action
Players can spam a key and repeat an action
The layer sleeps while a progress bar runs (ox_lib’s or qb progressbar’s, through their exports), so a key tapped on a chip can’t re-fire the action it just started -
Config.Suppress.progress. An instant action with no progress bar is the script’s own concern, exactly as with a target; a script that wants the layer quiet during something custom calls exports.lation_interact:suppress('mytag') and release('mytag').How do I change the interact key?
How do I change the interact key?
Config.ConfirmKey (default 'E') is the universal confirm key, and individual options bind their own with key = '...' - any keyboard key by name ('E', 'T', '5', 'F2', 'SPACE'). Config.InteractKey (default 'LMENU', Left Alt) is the target-style key: hold it and left click to get the cursor on a stack, right click to hand the camera back. It’s a FiveM key binding, so every player can rebind it under Settings > Key Bindings > FiveM; Config.InteractControl (default 19) is the same key on a controller. See Configuration.Does it work standalone, without a framework?
Does it work standalone, without a framework?
Yes. Anchors, zones, focus, input, and events need no framework at all. A framework (ESX, QBCore, Qbox, or ox_core - detected automatically) is only consulted for job/gang gates, item gates, and the dead/cuffed checks. Without one, gated options simply stay hidden and everything else works normally. Custom setups can adapt the checks in
bridge/client.lua - it’s open code, made to be edited.Which files are open to edit?
Which files are open to edit?
config.lua, bridge/client.lua (framework and inventory checks), the built-in vehicle doors (client/defaults.lua and server/defaults.lua), and the locales in locales/*.json ship un-obfuscated. Everything else is escrowed.Which inventories are supported for item gates?
Which inventories are supported for item gates?
Auto-detected:
ox_inventory, qb-inventory, qs-inventory, origen_inventory, codem-inventory, core_inventory, tgiann-inventory, and jaksam_inventory. If none is running, item checks fall back to the framework’s player data. Anything else can be wired in by editing HasItem in bridge/client.lua.What performance should I expect?
What performance should I expect?
Idle sits around
0.00-0.01ms - nothing runs until something interactable is actually near, so thousands of registered points cost nothing by themselves. Cost scales with what’s near the player and what’s on screen. Slow third-party code (like a heavy canInteract from another script) can never stutter the UI or your input.Do I need to restart anything after restarting lation_interact?
Do I need to restart anything after restarting lation_interact?
Do a full server restart. Scripts register their targets when they start, so restarting
lation_interact alone leaves every other script’s targets unregistered.My question or issue isn't listed here
My question or issue isn't listed here
Sorry about that! Please reach out to us on Discord or via email at support@lationscripts.com regarding your issue.
