FiveM HUD and speedometer script

Interface documentation

The complete interface for your server: HUD, car HUD, chat and settings panel in one resource, and it ships with rolo_notify (notifications, "[E]" bubbles and progress bars). Every player sets it up their own way in /hud, and everything follows their rolo_notify colours.

  • Version 1.1.1
  • Requirements: FXServer build 35245+, OneSync (the manifest declares /onesync), ox_lib and oxmysql.
  • Frameworks: QBCore · Qbox Legacy · standalone · 'custom' (see Integrations / Custom)
  • Languages: es · en
  • No lock-in: rolo_notify (shipped with it) and every other ROLO SCRIPT resource are optional. Without rolo_notify the notifications go through ox_lib or the base game, and the "Notifications" tab of the settings panel only offers rolo_notify's own settings when it runs. With rolo_mechanic the car HUD also shows mileage and nitro; without it those parts simply don't appear.
  • No tickets needed: everything you may want to adapt is in open files (see Escrow: what is open).

What's new in 1.1.1: money validation for paid ads (no NaN, infinity or <= 0 amounts); with the HUD hidden (/togglehud) the chat can still be opened with T; new key Config.ToggleHudKey (F10) to hide / show the HUD; Config.Notify ('auto', 'rolo_notify', 'ox_lib', 'custom'); Config.Voice ('auto' or 'custom') for your own voice script; 'custom' framework from the open bridge files. New keys to merge in your config.lua: Config.Notify, Config.Voice, Config.ToggleHudKey.

Features

HUD

  • 5 styles: hexagon, circle, square, bars, minimal. Row or column, scale 60-160%.
  • Edit mode: drag every piece (status, info bar, speedometer, weapon, chat) anywhere on the screen.
  • Components: health, armour, hunger, thirst, voice (talking, radio, range with pma-voice), stress, oxygen, stamina. Each one on / off.
  • Hide when full: icons appear only when they matter. Low values pulse.
  • Info bar: server ID, job + grade, cash, bank (they pulse when they change), time, players online. 4 styles: pills, bar, minimal, column.
  • Minimap with a neon border in the theme colour. Show the minimap: always / only in a vehicle / never (on foot the map and its border hide). The GTA health bars under the map are hidden.
  • The minimap never gets stuck in GTA's big mode: it redraws once you are really in the game (after the loading screen and the multicharacter) and a watchdog puts it back to small (Config.KeepMinimapSmall).
  • Neon frames: a light runs around the minimap, speedometer, info bar and chat frames. Modes: static, light, double, rainbow, pulse. Speed and which frames are chosen per player.
  • Colours: main colour (or the player's rolo_notify theme) and one colour per icon.

Car HUD

  • 5 styles: digital (big speed, gear, RPM segments), analog (neon gauge with an RPM ring), minimal, sport and bars. KM/H or MPH.
  • Fuel (ox_fuel, lc_fuel, LegacyFuel, cdn-fuel, ps-fuel, okok, Renewed…), engine damage, lights, cruise.
  • Seatbelt: B. Without it you fly out in hard crashes. Blinking warning while driving.
  • Cruise control: Y.
  • With rolo_mechanic: the car's mileage and the nitro bottle.

Weapon HUD (only with a weapon in the hands)

  • Weapon name and an icon by type (pistol, SMG, rifle, shotgun, sniper, heavy, melee, throwable).
  • Bullets in the clip / in reserve with a clip bar. Turns red and pulses when the clip is low (25 %), and shows RELOADING while reloading.
  • Grenades / throwables show how many are left; melee weapons show only the name.
  • 2 styles: card and minimal. Name, reserve and icon on / off. Movable in edit mode.
  • The weapon name comes from ox_inventory or QBCore's shared weapons. Add-on weapons: add them to WEAPON_NAMES in bridge/client.lua.
  • GTA's own weapon icon + ammo stay hidden (Config.HideGtaHud 2 and 20). Remove them from that list if you prefer GTA's.

Chat (replaces FiveM's chat, and keeps every other script working)

  • Tabs: all, OOC, job radio, staff, with unread counters.
  • /me /do with 3D bubbles over the head (nearby players only), /ooc, /looc, /anuncio (paid ad), /staff, /radiochat (your job).
  • Badges: STAFF, VIP (ace or Tebex with interface_vip) and per job (LSPD, EMS, MEC…).
  • 4 looks: modern, clean, bubbles, classic. Size, opacity and fade time per player.
  • @mentions light up with a sound. Command suggestions with autocomplete (Tab), ^1 colour codes.
  • History with ↑ / ↓: your last 50 commands and messages, kept on your PC (they survive reconnects and restarts), without repeats. What you were typing comes back with ↓.
  • Word filter, slow mode, /mutechat, Discord logs.
  • Same events as FiveM's chat: chat:addMessage, chatMessage, chat:addSuggestion(s), chat:removeSuggestion, chat:addTemplate, chat:clear.

Settings panel (/hud or F7)

  • Tabs: HUD, status, info, vehicle, weapon, minimap, chat, colours and notifications. The notifications tab opens rolo_notify's own settings: position, size, sounds, colours of the notifications, [E] and progress bars. It works with older rolo_notify versions too (it falls back to its settings command, Config.NotifySettingsCommand).
  • Live preview; saved per player.

Extras

  • /togglehud hides everything, /cine gives cinematic black bars.
  • Stress (off by default): speeding and shooting raise it (jobs can be exempt), it goes down by itself, and blur / shake appear when high. Items reduce it with TriggerServerEvent('rolo_interface:server:relieveStress', amount).
  • Spanish and English. QBCore, Qbox, ESX, standalone or 'custom'. Light: data only goes to the page when it changes.

Installation

  1. Put rolo_interface and rolo_notify in your resources.
  2. In server.cfg, remove ensure chat, and remove your old HUD (qb-hud, Quasar Interface…) and seatbelt script if you use ours. Then:
    ensure ox_lib
    ensure oxmysql
    ensure rolo_notify
    ensure rolo_interface
    
  3. Optional aces:
    add_ace group.admin rolo_interface.staff allow   # staff chat, badge, /mutechat
    add_ace group.vip rolo_interface.vip allow       # VIP badge
    
  4. Tebex VIP badge: interface_vip {sid} 30 (days) in the package commands.

Configuration (config.lua)

Option What it does
Config.Framework, Notify, Fuel, Voice, Locale 'auto' detects them; 'custom' = your own in the open bridge/ files (see Integrations / Custom). Notify: 'auto' / 'rolo_notify' / 'ox_lib' / 'qbcore' / 'esx' / 'okok' / 'custom'
Config.SettingsCommand, SettingsKey, ToggleHudCommand, ToggleHudKey, CinematicCommand Commands and keys (ToggleHudKey = '' = command only)
Config.Defaults What every player starts with: style, components, infoStyle, info, car (style), weapon (style = 'card' / 'minimal', name, reserve, icon), minimap (mode = 'always' / 'vehicle' / 'never'), chat (style), neon (mode, speed, frames), colours, positions
Config.NotifySettingsCommand rolo_notify's settings command (fallback for the Notifications tab)
Config.HideGtaHud, HideGtaHealthBars GTA HUD pieces hidden
Config.MinimapBorder, KeepMinimapSmall Fine tuning of the neon border over the map; keep the radar small
Config.Seatbelt, Cruise Keys, eject speed, damage, warning, Seatbelt.excludedClasses (vehicle classes without a belt)
Config.LowThresholds fuel (15 %) and ammoPercent (25 %): when the fuel bar / ammo counter turn red
Config.Stress Off by default: sources, relief, effects
Config.Chat Key, plain text mode, channels, commands, ad price, badges, filter, slow mode
config_server.lua Discord logs (chat, staff), server only

Exports

-- client
exports.rolo_interface:IsSeatbeltOn()
exports.rolo_interface:SetHudVisible(bool)
exports.rolo_interface:isOpen()            -- chat open
-- server
exports.rolo_interface:addMessage(target, message)   -- same as the chat resource
exports.rolo_interface:SetStress(src, value)
exports.rolo_interface:GetStress(src)

The seatbelt state is also in LocalPlayer.state.seatbelt.

Integrations / Custom

Everything you may want to adapt is in open files (config.lua, locales/, bridge/): you never need the escrowed code.

Exports (the first block is already in Exports above):

-- client
exports.rolo_interface:IsSeatbeltOn()        -- true while the seatbelt is on
exports.rolo_interface:SetHudVisible(false)  -- hide everything (true = show); e.g. during your own cutscene
exports.rolo_interface:isOpen()              -- chat open
-- server (the same API as FiveM's chat resource, so other scripts keep working)
exports.rolo_interface:addMessage(target, { args = { 'Name', 'text' }, color = { 255, 255, 255 } })  -- target = id or -1
exports.rolo_interface:addSuggestion(target, 'command', 'help text', { { name = 'id', help = 'player id' } })
exports.rolo_interface:SetStress(src, value)   -- 0-100
exports.rolo_interface:GetStress(src)

registerMessageHook and registerMode exist only so scripts written for the default chat don't fail; they do nothing.

Events and state:

  • Seatbelt: LocalPlayer.state.seatbelt (replicated). Use Bridge.OnSeatbelt(on) in bridge/client.lua to run your own code when it changes. With Config.Seatbelt.enabled = false (another seatbelt script) the HUD reads state.seatbelt or state.harness, see Bridge.ExternalSeatbelt().
  • Chat events kept from FiveM: chat:addMessage, chatMessage, chat:addSuggestion(s), chat:removeSuggestion, chat:addTemplate, chat:clear.
  • Stress from your own item / action code (server side, recommended): exports.rolo_interface:SetStress(src, exports.rolo_interface:GetStress(src) - 20). From a client script: TriggerServerEvent('rolo_interface:server:relieveStress', amount) (limited to 100 per call) and rolo_interface:server:gainStress (limited to 5 per call and rate limited). Stress is stored by Bridge.GetStress / Bridge.SetStress in bridge/server.lua.
  • Tebex VIP: console command interface_vip <id|license> <days>.

Where to plug in your own system ('custom')

System config.lua Open file and function
Framework: character name / job, staff check, money for ads Config.Framework = 'custom' bridge/server.lua: Bridge.Char(src) (return { name, job, onDuty }), Bridge.IsStaff(src), Bridge.RemoveMoney(src, account, amount) (return true when the money was taken). Client, bridge/client.lua: Bridge.Data() (return { loaded, hunger, thirst, stress, cash, bank, job, jobName, grade }) and Bridge.OnLoaded(cb)
Notifications Config.Notify = 'custom' Bridge.Notify(message, kind, duration) in bridge/client.lua
Voice icon (talking, radio, range) Config.Voice = 'custom' Bridge.Voice() in bridge/client.lua: return { talking, radio, range } (range 1-3)
Fuel Config.Fuel = 'custom' Bridge.GetFuel(vehicle) in bridge/client.lua (return 0-100)
Weapon names (add-on weapons) WEAPON_NAMES and Bridge.WeaponLabel in bridge/client.lua
Seatbelt from another script Config.Seatbelt.enabled = false Bridge.ExternalSeatbelt() in bridge/client.lua
Stress storage Bridge.GetStress / Bridge.SetStress in bridge/server.lua
Discord logs config_server.lua Bridge.Log(category, title, description) in bridge/server.lua
Chat channels, commands, badges, filter, ad price, job radio jobs Config.Chat in config.lua
Texts locales/*.lua

Examples:

-- bridge/client.lua  (Config.Voice = 'custom')
function Bridge.Voice()
    return { talking = exports['my_voice']:IsTalking(), radio = exports['my_voice']:OnRadio(), range = exports['my_voice']:GetRange() }
end

-- bridge/client.lua  (Config.Framework = 'custom')
function Bridge.Data()
    local d = MyFramework.GetPlayerData()
    return { loaded = d ~= nil, hunger = d.hunger, thirst = d.thirst, stress = d.stress, cash = d.cash, bank = d.bank, job = d.jobLabel, jobName = d.job, grade = d.gradeLabel }
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 and config_server.lua (Discord webhooks, server only);
  • locales/*.lua: every text;
  • bridge/*.lua: bridge/client.lua (needs, money + job, fuel, voice, seatbelt hooks, weapon names, notifications) and bridge/server.lua (character name, staff, money for ads, stress storage, Discord logs).

The rest of the Lua code (client/, server/, shared/) is encrypted. Everything a buyer may need to adapt has a 'custom' hook in the open files above.

Compatibility

  • Frameworks: QBCore, Qbox, ESX Legacy, standalone, 'custom'.
  • Fuel: ox_fuel, lc_fuel, LegacyFuel, cdn-fuel, ps-fuel, okokGasStation, Renewed-Fuel, native, 'custom' (Config.Fuel).
  • Voice: pma-voice state bags (talking, radio, range) or the game's own talking flag, 'custom' (Config.Voice).
  • Notifications: rolo_notify, ox_lib, the base game, 'custom' (Config.Notify).
  • Weapon names: ox_inventory, QBCore shared weapons, ESX, or the built-in list (WEAPON_NAMES).
  • Optional ROLO SCRIPT resources: rolo_notify (colours + notifications), rolo_mechanic (mileage, nitro), rolo_multicharacter (the HUD waits for it); never required.

ROLO SCRIPT · Support and updates on our Discord.

Secrets: config_server.lua

Discord webhooks and API keys go in config_server.lua, not in config.lua. config.lua is sent to every player's game (FiveM shares it), so anything in it can be read by a cheater; config_server.lua is loaded only by the server. Paste your webhooks there and leave config.lua without secrets.

Stuck?

Write to us in the Discord support channel with the script, your framework and the console error.