Notify documentation
The whole UI of your server in one style. Notifications, "[E]" bubbles floating over the NPC, progress bars, street and zone notices, key hints and announcements — and your other scripts keep working as they are: ox_lib, qb-core and other notify systems are taken over.
- Version 2.0.1
- Requirements: FXServer build 35245+. No database, no other resource needed (it takes over ox_lib / qb-core / okok notifications when they exist).
- Frameworks: QBCore · Qbox Legacy · standalone ·
'custom'(only used for admin permissions) - Languages: es · en · pt · fr
- No lock-in: every other ROLO SCRIPT resource is optional, and so is this one for them: they fall back to ox_lib or the base game when rolo_notify is not running.
- No tickets needed: everything you may want to adapt is in open files (see Escrow: what is open).
What's new in 2.0.1: key prompts fixed (in Open terminal · [G] counter · [H] duty, a · before a [KEY] starts a new key row, so the first action keeps its own key); Config.Framework = 'custom' for your own admin permission check.
Features
- 🔷 World bubbles: neon key tile + glass pill over the NPC / vehicle / object in front of you (or at exact coordinates). Several keys per bubble, the key reacts when pressed, texts like "Presiona [E] para abrir" are cleaned up by themselves.
- 🔔 Notifications: success, error, warning, info, money, police, phone, admin — icon, progress bar, sounds, duplicates grouped (x2, x3…), updatable by id.
- With image (item image from your inventory or any URL, phone app icons).
- Timers (
timer = 120→ countdown 02:00) and sticky ones with a progress bar you update.
- ⏳ Progress bar and circle with the same style: animations, scenarios, props, disabled controls, cancel with X. Same data as
lib.progressBar, plusQBCore.Functions.Progressbar. - 🛣️ Street notices (street, zone, compass, postal code with nearest-postal) and zone notices ("Entrando en · VINEWOOD") — never at every crossing.
- ⌨️ Key hints panel for any script.
- 📢 Announcements for everyone (
/aviso; rolo_interface's chat keeps/anunciofor player ads). - 🎛️ Player settings (
/ajustesnotify): drag the notifications and street card anywhere, size, dark background, duration, how many at once, volume, color theme, sounds, grouping, street / zone notices, do not disturb (/nomolestar) and muted types. Saved on each player's PC. - 👑 Admin panel (
/notifyadmin): server-wide defaults with live preview (position, color, background, sounds, bubble height, street / zone timing) — no config editing, applied to everyone instantly. - 🎵 Sounds: ROLO chimes made in the UI (no files), GTA sounds, your own
.oggfiles, or none. - 📜 History (
/notificaciones) and a test command (/notifytest) that shows everything in seconds. - 🌍 Spanish, English, Portuguese, French · QBCore / Qbox / standalone · 0.00 ms idle.
Installation
Put
rolo_notifyinresources. Start it right after your core:ensure ox_lib ensure qb-core # or qbx_core ensure rolo_notifyTurn off any other notify / text UI script doing the same job.
Recommended patches (1 line each, see
patches/) so 100% of your scripts use rolo_notify:ox_lib/resource/interface/client/textui.lua→patches/ox_lib_textui.lua(the "[E]" box → bubble)ox_lib/resource/interface/client/notify.lua→patches/ox_lib_notify.luaox_lib/resource/interface/client/progress.lua→ lines inpatches/snippets.luaqb-core/client/functions.lua→ Notify + Progressbar lines inpatches/snippets.luaqb-core/client/drawtext.lua→patches/qb-core_drawtext.lua
Every patch only acts while rolo_notify is started: stop it and everything goes back to normal. Updating those resources removes the patches — paste them again.
- Target menu (the eye), any framework: rolo_notify can't restyle another resource's screen by itself (FiveM gives each resource its own NUI), so the ROLO look for the target menu is one folder you copy once. Only that folder goes into the target resource; the rest of
patches/stays in rolo_notify.- qb-target (QBCore): copy the folder
patches/qb-target/htmlintoqb-target/(replace itshtmlfolder, back it up first) andrestart qb-target. GPL-3.0 like qb-target (patches/qb-target/NOTICE.md). - ox_target (Qbox, ox_core and any server that runs ox_target; also RSG's RedM fork): copy the folder
patches/ox_target/webintoox_target/(replace itswebfolder, back it up first) andrestart ox_target(patches/ox_target/NOTICE.md). It coversqtargettoo, because ox_target provides it. - Every target menu of every script gets the ROLO look; the target's code and options don't change. The console reminds you at start while qb-target or ox_target runs without it (
Config.TargetSkinHint). Updating the target resource puts its original menu back: copy the folder again. To undo, put your backup back.
- qb-target (QBCore): copy the folder
Scripts with their own "notify system" option in their config: set it to
ox_lib/oxlib/qbcore.Admins: framework groups in
Config.AdminGroups, or the acerolo_notify.admin. Another framework:Config.Framework = 'custom'and your check inbridge/server.lua.
Commands
| Command | |
|---|---|
/ajustesnotify |
the player's own settings |
/nomolestar |
do not disturb on / off |
/notificaciones |
history |
/notifytest |
shows every feature |
/aviso <text> |
announcement (admins) |
/notifyadmin |
server defaults panel (admins) |
Exports (client)
exports.rolo_notify:Notify('Texto', 'success', 5000, 'Título')
exports.rolo_notify:Notify({ text = 'Te dieron Agua x2', type = 'success', image = 'water' })
exports.rolo_notify:Notify({ id = 'heist', title = 'Robo en curso', text = 'La policía llega en', type = 'police', timer = 120 })
exports.rolo_notify:Notify({ id = 'dl', text = 'Descargando...', sticky = true, progress = 40 }) -- call again with the same id to update
exports.rolo_notify:CloseNotify('dl')
exports.rolo_notify:ShowPrompt('myscript:door', { text = '[E] Abrir puerta', coords = vector3(x, y, z) })
exports.rolo_notify:ShowPrompt('myscript:shop', { rows = { { key = 'E', text = 'Comprar' }, { key = 'G', text = 'Vender' } }, entity = ped })
exports.rolo_notify:HidePrompt('myscript:door')
exports.rolo_notify:ShowHints('driving', { title = 'Controles', keys = { { 'W', 'Acelerar' }, { 'X', 'Cancelar' } } })
exports.rolo_notify:HideHints('driving')
local ok = exports.rolo_notify:Progress({ label = 'Reparando', duration = 5000, canCancel = true,
anim = { dict = 'mini@repair', clip = 'fixing_a_ped' }, disable = { move = true, combat = true } })
Exports (server)
exports.rolo_notify:Notify(source, 'Texto', 'error')
exports.rolo_notify:NotifyAll('Texto', 'info')
exports.rolo_notify:CloseNotify(source, 'id')
exports.rolo_notify:Announce('Título', 'Mensaje', 9000)
Or TriggerClientEvent('rolo_notify:notify', source, 'Texto', 'success').
Integrations / Custom
Everything you may want to adapt is in open files (config.lua, locales/, bridge/, patches/): you never need the escrowed code.
Exports: see Exports (client) and Exports (server) above. More exports, used by the takeover patches and by other ROLO SCRIPT resources:
-- client
exports.rolo_notify:GetTheme() -- the colours this player sees: { accent, accentLight, accentDark, glow, border, text... }
exports.rolo_notify:OpenSettings() -- opens the player's settings panel
exports.rolo_notify:IsPromptOpen('myscript:door')
exports.rolo_notify:PressPrompt('myscript:door', 'E') -- animates the key as pressed
exports.rolo_notify:DrawText3D(x, y, z, 'Text') -- call every frame (QBCore-style DrawText3D); shown as a bubble
exports.rolo_notify:ProgressCircle({ label = '...', duration = 3000 })
exports.rolo_notify:IsProgressActive() / CancelProgress()
-- the ox_lib / qb-core entry points the patches call:
-- OxNotify, OxShowTextUI, OxHideTextUI, OxIsTextUIOpen, OxProgress, ProgressUI, ProgressUIEnd, QBNotify, QBProgress, QBProgressResource
Events: TriggerClientEvent('rolo_notify:notify', source, text, 'success', 5000, 'Title') (or a data table as the first argument), TriggerClientEvent('rolo_notify:closeNotify', source, id) and TriggerClientEvent('rolo_notify:announce', -1, 'Title', 'Text', 9000). Server defaults saved by the admin panel use rolo_notify:server:save (admins only, checked by Bridge.IsAdmin).
Where to plug in your own system
| What | Where (open file) |
|---|---|
Who is an admin (/aviso, /notifyadmin) with your own framework |
Config.Framework = 'custom' and your check in Bridge.IsAdmin(src) in bridge/server.lua (also Config.AdminGroups and the ace rolo_notify.admin) |
| Which other notify / text UI systems are taken over | Config.Capture in config.lua: oxTextUI, oxNotify, oxProgress, qbDrawText, okokNotify, okokTextUI, mythicNotify, pNotify, cdDrawTextUI, jgTextUI (set one to false to leave that system alone) |
| Take over one more system | Takeover.Install in bridge/client.lua: add Provide('other_resource', 'exportName', function(...) api.Notify({ text = ... }) end) (same pattern as the others) or register its event with RegisterNetEvent |
| The 1-line patches for ox_lib / qb-core / ESX | patches/*.lua (paste instructions in Installation) |
| Notification types, colours, icons, sounds | Config.Types, Config.TypeAliases, Config.Sounds (and your own .ogg files, see Custom sounds) |
| Postal codes on the street card | Config.Postal (any resource that exports getPostal) |
| Words cut from key hints ("Press [E] to open" shows "[E] Open") | Config.KeyHints.leadWords / linkWords in config.lua (add your language) |
| Colours and themes | Config.Theme, Config.ColorPresets |
| Commands, positions, durations, how many at once | Config.Notify, Config.Street, Config.Zones, Config.Progress, Config.Announce, Config.AdminCommand, Config.TestCommand |
| Texts | locales/*.lua |
Example, take over another notify resource:
-- bridge/client.lua, inside Takeover.Install
Provide('my_old_notify', 'Send', function(text, ntype, ms) api.Notify({ text = text, type = ntype, duration = ms }) end)
Escrow: what is open
These files stay open (editable) when the resource is escrowed, exactly as escrow_ignore in fxmanifest.lua says:
config.lua;locales/*.lua: every text;bridge/*.lua:bridge/client.lua(takeover of other systems) andbridge/server.lua(admin permissions);patches/*.lua: the one-line patches for ox_lib and qb-core;patches/qb-target/htmlandpatches/ox_target/web: the ROLO skins for the qb-target / ox_target menus (HTML / CSS / JS).
The rest of the Lua code (client/, server/, shared/) is encrypted. This resource has no webhooks, no database and no item definitions, so there is no config_server.lua, compat/ or items/.
Custom sounds
Set Config.Sounds.mode = 'custom' and put success.ogg, error.ogg, warning.ogg, info.ogg, money.ogg, police.ogg, phone.ogg, admin.ogg in html/sounds/.
ROLO SCRIPT · Support and updates on our Discord.
Write to us in the Discord support channel with the script, your framework and the console error.
