NR_Scoreboard
A multi-framework scoreboard (ESX, QBCore, QBX) with auto-detection, configurable theme colors, highlighted job counters, admin badges, ping display, overhead server IDs, and a custom Svelte UI.
Features
- Multi-framework support - Auto-detects ESX, QBCore, and QBox with a bridge system
- Fully configurable theme - 16+ color variables to customize accent, header, cards, badges, and ping indicators via config
- Highlighted job counters - Configurable job badges in the header showing live counts (Police, Medics, Mechanics, etc.) with icon, color, and optional on-duty filtering
- Job type matching - Match highlighted jobs by job name or QBCore/QBox job type (e.g. all "leo" jobs count as Police)
- Admin-only player list - Full player grid with names, jobs, and ping is restricted to admins; regular players see only the header and job counters
- Admin badges - Configurable admin star badge with customizable Bootstrap Icon
- Ping display - Color-coded ping indicators (green/yellow/red) on each player card
- Server IDs above heads - 3D world text showing server IDs above player heads while scoreboard is open (staff-only or everyone)
- Character names - Option to show character names (first + last) or FiveM usernames
- Job duty status - Optional "(on duty)" / "(off duty)" display next to job badges
- Player card grid - Responsive 4-column card layout with server ID circles, job badges, and ping
- Current player highlight - Your own player card is displayed in the header for quick reference
- Configurable keybind - Toggle scoreboard with any key (default: HOME)
- Mouse cursor support - Optional cursor when scoreboard is open for easy interaction
- Custom Svelte 5 UI - Modern, performant UI built with Svelte 5 and Vite
Dependencies
| Resource | Description | Required |
|---|---|---|
| es_extended / qb-core / qbx_core | Core framework (auto-detected) | One of these |
NR_Scoreboard has no dependencies beyond your core framework. No ox_lib, ox_target, or database required.
Installation
Step 1: Download
Download NR_Scoreboard from your Tebex purchase and extract it to your resources folder:
server/
└── resources/
└── [echo]/
└── NR_Scoreboard/
Step 2: server.cfg
Add the resource to your server configuration. Your framework must start before NR_Scoreboard:
ensure qbx_core # or qb-core / es_extended
ensure NR_Scoreboard
Step 3: Configure
Edit config.lua to set your server name, colors, keybind, and highlighted jobs (see Configuration section below).
Step 4: Restart
Restart your server to load the resource. No database imports needed.
How It Works
1. Opening the Scoreboard
Press HOME (configurable) to toggle the scoreboard. The client requests fresh player data from the server each time it opens.
2. Header
The header displays your server name, logo, current player count, and highlighted job badges showing live counts of players in each configured job category.
3. Player List (Admin Only)
Admins see a full grid of player cards with server IDs, character names, job badges, admin stars, and color-coded ping. Regular players only see the header with job counters.
4. IDs Above Heads
While the scoreboard is open, server IDs are drawn above nearby player heads in the 3D world. This can be restricted to staff only or shown to everyone via config.
5. Closing
Press HOME or ESC to close the scoreboard, or click outside the panel.
Configuration
General Settings
Config.Framework = "auto" -- "auto", "QBCore", "ESX", or "QBox"
Config.KeyBind = "HOME" -- key to toggle the scoreboard
Config.ServerName = "My Server" -- displayed in the header
Config.EnableCursor = true -- show mouse cursor when open
Theme Colors
Every color in the UI is configurable via hex codes:
Config.Colors = {
Accent = "#00ffff", -- header border, scrollbar, player ID circle, glow
HeaderBg = "#0f0f0f", -- header background
HeaderText = "#ffffff", -- server name text
HeaderSubtext = "#cccccc", -- player count text
BodyBg = "#222222", -- player grid background
BodyTint = 0.06, -- accent tint opacity over the body (0.0 - 1.0)
CardBg = "#0f0f0f", -- player card background
CardText = "#ffffff", -- player name text
CardIdText = "#bbbbbb", -- player ID number color
PingGood = "#198754", -- ping <= 50ms
PingWarn = "#ffc107", -- ping 50-100ms
PingBad = "#dc3545", -- ping > 100ms
AdminBadge = "#ffc107", -- admin badge background
AdminBadgeText = "#000000", -- admin badge icon/text color
DefaultJobBadge = "#0d6efd", -- job badge for non-highlighted jobs
NoPlayersText = "#888888", -- "No other players online" text
}
Player Display
Config.ShowPlayers = true -- show the player list grid (admin only)
Config.UseCharacterNames = true -- true = character name, false = FiveM username
Config.ShowPlayerIds = true -- show server ID badge on each card
Config.ShowPlayerJob = true -- show job badge on each card
Config.ShowPlayerJobDutyStatus = false -- show "(on duty)" / "(off duty)"
Config.ShowPing = true -- show ping on each card
Config.ShowAdminBadges = true -- show admin star badge
Config.AdminBadgeIcon = "star-fill" -- Bootstrap Icon name (without bi- prefix)
IDs Above Heads
Config.ShowIdsAboveHeads = true -- draw server IDs above heads while open
Config.ShowIdsToEveryone = false -- true = everyone, false = staff only
Highlighted Jobs
Configure job categories to display as counter badges in the header. Each entry supports matching by job name and/or QBCore/QBox job type:
Config.HighlightedJobs = {
[1] = {
jobs = {"police"}, -- job name(s) from your framework
jobTypes = {"leo"}, -- QBCore/QBox job types (matches any job with this type)
label = "Police", -- display label
icon = "shield", -- Bootstrap Icon name (without bi- prefix)
color = "#135dd8", -- badge background color
countOnDutyOnly = false, -- only count on-duty players
},
[2] = {
jobs = {"ambulance"},
jobTypes = {"ems"},
label = "Medics",
icon = "heart-pulse",
color = "#27ae60",
countOnDutyOnly = false,
},
[3] = {
jobs = {"mechanic"},
label = "Mechanics",
icon = "wrench-adjustable",
color = "#e67e22",
countOnDutyOnly = false,
},
}
The jobTypes field is optional and only applies to QBCore/QBox. It lets you match all jobs that share a type (e.g. "leo" matches both police and bcso if they share the leo type). ESX does not have job types.
Adding a New Highlighted Job
Add a new entry to Config.HighlightedJobs:
Config.HighlightedJobs = {
-- ... existing entries ...
[5] = {
jobs = {"realestate"},
label = "Real Estate",
icon = "house",
color = "#9b59b6",
countOnDutyOnly = true,
},
}
Browse available icons at Bootstrap Icons (use the name without the bi- prefix).
Admin Detection
Admin status is checked differently per framework:
| Framework | Server-side Check | Client-side Check |
|---|---|---|
| QBox | exports.qbx_core:HasPermission(src, 'admin') |
pData.metadata['permission'] = admin/god/mod |
| QBCore | QBCore.Functions.GetPermission(src) = admin/god/mod |
pData.metadata['permission'] = admin/god/mod |
| ESX | xPlayer.getGroup() = admin/superadmin/mod |
pData.group = admin/superadmin/mod |
The player list visibility and overhead ID display both rely on admin status. For QBox, players need the qbx.admin ACE permission. For QBCore, set the player's permission level. For ESX, set the player's group to admin or superadmin.
File Structure
NR_Scoreboard/
├── config.lua -- All configuration (editable)
├── fxmanifest.lua -- Resource manifest
├── client.lua -- Client: keybind, NUI, overhead IDs
├── server.lua -- Server: player data, job counts
├── bridge/
│ ├── init.lua -- Auto-detect framework
│ ├── qbox/
│ │ ├── client.lua -- QBox client bridge
│ │ └── server.lua -- QBox server bridge
│ ├── qbcore/
│ │ ├── client.lua -- QBCore client bridge
│ │ └── server.lua -- QBCore server bridge
│ └── esx/
│ ├── client.lua -- ESX client bridge
│ └── server.lua -- ESX server bridge
└── html/ -- Compiled Svelte UI
├── index.html
├── my-logo.png -- Server logo (replace with your own)
└── assets/
Changing the Logo
Replace html/my-logo.png with your own server logo. The image is displayed as a circle in the header, so square images work best.
Troubleshooting
Scoreboard not opening
- Check that the resource is started in
server.cfg - Verify the keybind isn't conflicting with another resource (default:
HOME) - Check F8 console for errors
- Ensure your framework is started before NR_Scoreboard
Framework not detected
- Set
Config.Frameworkmanually to"QBox","QBCore", or"ESX"instead of"auto" - Ensure your framework resource is started before NR_Scoreboard in
server.cfg - Check the server console for the auto-detection message
Player list not showing
- The player list is admin-only. Check that your account has admin permissions in your framework
- For QBox: ensure you have the
qbx.adminACE permission - For QBCore: ensure your permission level is set to
admin,god, ormod - For ESX: ensure your group is
admin,superadmin, ormod
Highlighted job counts wrong
- Verify job names in
Config.HighlightedJobsmatch your framework's job names exactly (case-sensitive) - If using
jobTypes, this only works with QBCore/QBox - If
countOnDutyOnly = true, off-duty players won't be counted
Overhead IDs not showing
- Check that
Config.ShowIdsAboveHeads = true - If
Config.ShowIdsToEveryone = false, only admins see overhead IDs - IDs only display for players within 50 units
Colors not applying
- Ensure all color values in
Config.Colorsare valid hex codes (e.g."#00ffff") - Clear your FiveM cache after changing colors: delete
cache/files/NR_Scoreboard/ - Restart the resource or server after config changes
Support
For paid script support, open a ticket in our Discord server for priority assistance.