☎️Client API (Exports)
HandleTextUI (id, data) -> duiHandler?
Purpose : Create or update a visible Text UI (sets LocalPlayer.state.TextUiBusy).
Data : Visible (bool), Message (string), Bind (string, default Shared.DefaultBind), UseOnlyBind (bool).
CloseTextUI(id)
Purpose : Hide a Text UI without removing its DUI instance.
Example :
exports['Var-Interact']:CloseTextUI('shop_1')
RemoveTextUIs() / RemoveTextUI(id)
Purpose : Force cleanup (all or one) in case you need to reset state.
Example :
exports['Var-Interact']:RemoveTextUIs()
Draw3DSprite({duiHandler, coords, maxDistance})
Purpose : Render the DUI as a 3D sprite with smart scaling/fading.
Example :
exports['Var-Interact']:Draw3DSprite({duiHandler=dui,coords=vec3(x,y,z),maxDistance=8.0})
IsDuiVisible() -> boolean
Purpose : Check if any Text UI is currently shown (guard against overlaps).
Example :
if exports['Var-Interact']:IsDuiVisible() then return end
HandleHoldTextUI(id, data) -> duiHandler?
Purpose : Start a hold‑to‑interact UI with progress and callback on completion.
Data :
UI : Visible, Message, Bind, UseOnlyBind, Icon?, Intent?
Hold : BindToHold (control id, default 38=E), TimeToHold (seconds), DistanceHold (meters), Coords (vector3)
Logic : canInteract(id, distance) (return true/false), onCallback(id) (on completion)
Example :
exports["Var-Interact"]:HandleHoldTextUI(
"doorA",
{
Visible = true,
Message = "Hold E to open",
Bind = "E",
Icon = "DoorOpen",
Intent = "success",
BindToHold = 38,
TimeToHold = 2.0,
DistanceHold = 2.0,
Coords = GetEntityCoords(PlayerPedId()),
canInteract = function(_, d)
return d <= 2.0
end,
onCallback = function()
TriggerEvent("my:door:open", "doorA")
exports["Var-Interact"]:RemoveHoldTextUI("doorA")
end
}
)
RemoveHoldTextUIs() / RemoveHoldTextUI(id) / CloseHoldTextUI(id)
Purpose : Remove all/one hold interactions or just close current hold UI state.
Examples :
exports['Var-Interact']:RemoveHoldTextUIs()
exports['Var-Interact']:CloseHoldTextUI('doorA')
Notes
Simple Text UI sends Visible, Message, Bind, UseOnlyBind and sets progress = 100 by default.
Hold UI additionally supports Icon, Intent, and live Progress managed internally.
Visibility is centralized via LocalPlayer.state.TextUiBusy.
Last updated