A full-screen NUI overlay for FiveM that appears while a player's SaltyChat plugin is not connected. It shows a logo, a headline, a subtitle and two buttons that open a link, typically the server's TeamSpeak and Discord, and it can hold the player's input until voice is working again.
Published as-is and no longer actively maintained — issues and pull requests may not get a response.
These scripts were written for a private GTA V roleplay server and ran there in production. They are published here so the work stays available rather than sitting on a disk, and so anyone who finds them useful can build on them.
Because they were built for one specific server rather than for general release, they expect other resources that are not included here. You will need to supply these yourself, or adapt the code around them:
| Requirement | Why |
|---|---|
| A FiveM server on a recent artifact | The manifest uses fx_version "cerulean" and lua54 "yes" |
| SaltyChat for FiveM | The overlay is driven entirely by the SaltyChat_PluginStateChanged event. Without it the overlay is shown on resource start and never hidden again |
| Internet access from the game client | nui/index.html loads Font Awesome 5.10.0 from a CDN for the button icons, and the stylesheet loads the Montserrat font from Google Fonts. Both fall back to system defaults if unreachable |
There is no framework dependency: no ESX, no QBCore, no database, no items and no inventory integration.
- Copy the
mrfrost-saltynuifolder into your server'sresources/directory. - Add
ensure mrfrost-saltynuito yourserver.cfg, after the line that starts SaltyChat. - Edit
mrfrost-saltynui/shared/config.lua. The shipped button URLs are placeholders (ts3server://your.teamspeak.hostandhttps://discord.gg/your-invite) and the shipped title and subtitle are German, so both need changing for most servers. - Optional: replace
mrfrost-saltynui/nui/img/logo.svgwith your own logo, or pointConfig.LogoUrlat an external URL.
No SQL and no item definitions are needed.
Everything configurable lives in shared/config.lua. The whole Config table
is sent to the NUI page as-is, so the key names are part of the interface
between the Lua side and the compiled page and cannot be renamed without
rebuilding it.
| Key | Default | Purpose |
|---|---|---|
Config.UseCursor |
true |
Take NUI focus while disconnected. Required for the buttons to be clickable; it also blocks all game input |
Config.LogoUrl |
"./img/logo.svg" |
Logo above the title, relative to nui/index.html or an absolute URL |
Config.TitleText |
"SaltyChat nicht verbunden!" |
Headline |
Config.SubTitleText |
"Bitte verbinde mit unserem TeamSpeak um weiter zu spielen." |
Line below the headline |
Config.ButtonLeftUrl / Config.ButtonRightUrl |
placeholder URLs | Opened in the player's external browser when the button is clicked |
The full list, including the icon and label keys, is in docs/configuration.md.
The resource exposes no exports, no commands and no net events. It only listens, all on the client:
| Event | Fired by | Effect |
|---|---|---|
onResourceStart |
FiveM | Sends the config to the page and shows the overlay, so a restart while players are in game restores it |
SaltyChat_PluginStateChanged |
SaltyChat | Plugin state 2 or 3 hides the overlay and releases NUI focus; any other value shows it |
SaltyChat_SoundStateChanged |
SaltyChat | Stored in a local flag that nothing currently reads |
Internally the client talks to the page with two NUI messages, config and
toggleWindow; both are described in docs/nui.md.
| Page | Contents |
|---|---|
| docs/configuration.md | Every config key, its type, default and effect |
| docs/nui.md | The interface page: message protocol, styling, replacing the logo, and how the compiled build relates to its React source |
| docs/known-issues.md | Findings from a read-through of the code |
