🔍ZoneCues
ZoneCues is a FiveM script designed for immersive roleplay. It allows players to place ambient notifications in the game world that trigger when another player enters a defined radius around a player.
🚀 Features
📍 Create roleplay-based cues (e.g. "You smell cannabis")
🔘 Attach cues to:
Yourself
Vehicles
Objects
Static world positions
🎯 ox_target integration for intuitive third-eye target selection
👀 Preview radius with live marker during cue placement
📋 Manage active cues via a modern, stylish NUI menu
🕒 Automatic timeout if no selection is made
🛑 Cues attached to players are removed if they leave the server
🧱 Installation
Follow instructions in Getting Started
Ensure that the dependancies are started BEFORE this resource in server.cfg
📦 Dependancies
🕹️ Usage
Open the Menu
Use the command:
/zonecues
Creating a Cue
Enter your message (e.g. "You smell cannabis").
Set the radius (1-50 meters).
Choose an attachment type:
Self — attaches to you
Vehicle/Object — requires selection with third eye
Static — places it where you stand
If Vehicle/Object is chosen, click Select Target and use the third eye to select your target.
A radius marker will preview the area before finalizing.
Click Create to place the cue.
Managing Cues
Your active zones appear in the bottom panel
Edit or remove cues at any time
💡Tips & Notes
Only the creator sees their own cues in the management panel
Notifications display using a clean, modern UI overlay
The menu auto-closes when selecting a target, and auto-reopens once selected
If no target is selected within 30 seconds, the process is cancelled with a notification
Cues follow vehicles and objects if they move (via network ID tracking)
📤 Exports
ZoneCues provides several server-side exports for interacting with zones programmatically from other resources:
addZone(data: table) → number
addZone(data: table) → number
Adds a new zone and returns its unique ID.
Example:
local zoneId = exports.zonecues:addZone({
message = "Heavy smell of fuel",
radius = 10.0,
attach = "static",
coords = vector3(123.4, 456.7, 78.9)
})
Data Parameters:
message
string
The message shown when entering the zone
radius
number
Radius (in meters) of the zone
attach
string
"static"
, "vehicle"
, "object"
, "self"
coords
vector3
Required if using "static"
netId
number
Required if using "vehicle"
or "object"
removeZone(id: number) → boolean
removeZone(id: number) → boolean
Removes a zone by its ID.
Example:
exports.zonecues:removeZone(zoneId)
getAllZones() → table
getAllZones() → table
Returns a table of all currently active zones.
Example:
local zones = exports.zonecues:getAllZones()
for id, zone in pairs(zones) do
print(zone.message, zone.radius)
end
⚙️ Configuration
Located in config.lua
:
Config = {}
-- How often (in milliseconds) to check if a player is inside any zone
Config.CheckInterval = 1000
-- Distance used for ray-based entity selection (deprecated in favor of ox_target)
Config.EntitySelectDistance = 8.0
-- Key used to confirm entity selection (when using raycast mode)
Config.ConfirmKey = 38 -- E (no longer used with ox_target)
-- Time in milliseconds before selection via ox_target times out
Config.SelectionTimeout = 30000
Last updated