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

Dependencies

Resource Description Required
es_extended / qb-core / qbx_core Core framework (auto-detected) One of these
💡 No Extra Dependencies

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,
    },
}
💡 Job Types

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
💡 Admin Permissions

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

Framework not detected

Player list not showing

Highlighted job counts wrong

Overhead IDs not showing

Colors not applying

Support

For paid script support, open a ticket in our Discord server for priority assistance.