Skip to content
RPScripts

FiveM Vehicle Scripts

Smart Motorways

London Studios Smart Motorways

London Studios

  • ESX
  • QBCore
  • QBOX
  • vRP

Description

Smart Motorways by London Studios adds motorway gantries with dynamic speed limit and lane signs to your FiveM server. You control them in real time from an in-game control panel.

Video Preview

Features

  • Control Panel - Our in-game control panel allows your players to easily set the icon or speed used above lanes in real time.
  • Remote Changes - Motorway gantries can be updated all around the map using one command, with a map allowing you to select your intended location to edit.
  • CCTV System - Easily view and move CCTV cameras on gantries all over the map from the control panel.
  • US / UK / EU Mode - Smart Motorways has support for three modes, including US, UK and EU. This means we support a wide range of different speeds straight out of the box for your server.
  • Smart Signs Integration - Smart Motorways is integrated with Smart Signs, meaning if you have a copy of both you will be able to add messages/icons on a new board above each gantry.
  • Smart Speed Cameras Integration - Smart Motorways is integrated with Smart Speed Cameras, meaning if you have a copy of both, the cameras on all gantries will become active and will adjust dynamically to the speed limit set above each individual lane, helping with speed enforcement.
  • Icon Support - As well as support for the speeds, we have icons including arrow left and lane closed.
  • Discord Logging - Our resource can integrate into Discord with logging by webhooks. This can log any changes on the motorway gantries and keep a record for the future.
  • Pre-Configured Signs - We’ve pre-configured over 60 locations around the map, meaning Smart Motorways is ready to use straight out of the box.
  • Persistent Changes - Speed, text and icon changes are saved to locations.json (configurable with saveSpeedsOnChange, saveTextOnChange and saveIconOnChange), so they are still there after a restart. You can clear all signs with the /resetsmartmotorway command.
  • Emissive Textures - These icons are bright both at day and night, making them bound to grab the attention of drivers at all times of the day.
  • Multi Lane Support - We have support for two, three and four laned roads.
  • Add Locations Easily - With our developer command, you can easily add new locations in-game which are automatically saved for the next restart.
  • Permissions - The /selectsign and reset commands can be limited with ACE permissions or ESX, QBCore, QBX and vRP job, group or permission checks.

Config

config = {

    -- We've included speed options for the UK, EU, and US based servers 
    -- Simply type "UK", "EU", or "US" to change the speed options 
    iconPack = "UK",

    -- If you add custom icons, you can add them here
    -- Speed-related icons will be used for speed cameras, and must contain the speed limit in the name as numbers only.
    -- E.g. an icon of speed_60 will be used for a speed limit of 60. An icon of 3_speed_40 would result in a speed limit of 340.
    -- Do NOT edit this section unless you know what you are doing and have modelled custom icons.
    iconPacks = {
        ["UK"] = {
            "arrow_left",
            "arrow_right",
            "red_x",
            "speed_20",
            "speed_30",
            "speed_40",
            "speed_50",
            "speed_60",
            "national_speed",
        },
        ["EU"] = {
            "arrow_left",
            "arrow_right",
            "red_x",
            "speed_20",
            "speed_30",
            "speed_40",
            "speed_50",
            "speed_60",
            "speed_70",
            "speed_80",
            "speed_90",
            "speed_100",
            "speed_110",
            "speed_120",
            "speed_130",
            "speed_140",
            "speed_150",
        },
        ["US"] = {
            "arrow_left",
            "arrow_right",
            "red_x",
            "bv_motorway_speed_15",
            "bv_motorway_speed_20",
            "bv_motorway_speed_25",
            "bv_motorway_speed_30",
            "bv_motorway_speed_35",
            "bv_motorway_speed_40",
            "bv_motorway_speed_45",
            "bv_motorway_speed_50",
            "bv_motorway_speed_55",
            "bv_motorway_speed_60",
            "bv_motorway_speed_65",
            "bv_motorway_speed_70",
            "bv_motorway_speed_75",
            "bv_motorway_speed_80",
            "bv_motorway_speed_85",
        },
    },


    cctvKeys = {
        up = {0, 172},
        down = {0, 173},
        left = {0, 174},
        right = {0, 175},
        leaveCam = {0, 200},
    },

    -- The distance in which the sign and its speed limits will load/unload at
    loadDistance = 200.0,

    -- This will enable debug printing on both the client and the server. This should be set to false most of the time.
    developerMode = false,

    integrations = {

        smartSpeedCameras = {
            enabled = false, -- Only enable if you have the Smart Speed Cameras resource installed and up to date 
            resourceName = "SmartSpeedCameras", -- This is the name of the resource which Smart Speed Cameras is installed under
            cooldown = 60, -- This is the cooldown in seconds between speed camera detections. This is to prevent spam fines.
        },

        smartSigns = {
            enabled = false, -- Only enable if you have the Smart Signs resource installed and up to date 
            resourceName = "SmartSigns", -- This is the name of the resource which Smart Signs is installed under
        }

    },

    saveSpeedsOnChange = true, -- If this is set to true, the speeds will be saved to locations.json when changed. If false, the speeds will reset on restart.
    saveTextOnChange = true, -- If this is set to true, the text will be saved to locations.json when changed. If false, the text will reset on restart.
    saveIconOnChange = true, -- If this is set to true, the icon will be

    
    closeMenuButton = {0, 177},

    -- This allows you to enable Discord logging for the signs
    -- You must add your webhook in sv_utils.lua
    logging = {
        enabled = false,
        displayName = "Smart Motorways",
        colour = 31487,
        title = "**New Sign Log**",
        icon = "https://i.imgur.com/dcOQmpA.jpg",
        footerIcon = "https://i.imgur.com/n3n7JNW.png",
        dateFormat = "%d-%m-%Y %H:%M:%S", -- Day-Month-Year Hour-Minute-Second
    },

    resetSignsCommand = {
        enabled = true,
        commandName = "resetsmartmotorway",
        Permissions = {
                EnablePermissions = false, -- If set to false, all below job checks will be disabled, even if they are enabled in the config.lua
                AcePermissions = {
                    Permission = "update.motorway.sign",
                    Enabled = false,
                },
            
                ESX = {
                    Enabled = false,
                    CheckJob = {
                        Enabled = false, -- Enable this to use ESX job check
                        Jobs = {"police"} -- A user can have any of the following jobs, allowing you to add multiple
                    }
                },
                -- We've added vRP integration. All you need to do is enable it below. Then, configure if you wish to check for groups or permissions, or even both
                vRP = {
                    Enabled = false,
                    CheckGroup = {
                        Enabled = false, -- Enable this to use vRP group check
                        Groups = {"police"}, -- A user can have any of the following groups, meaning you can add different jobs
                    },
                    CheckPermission = {
                        Enabled = false, -- Enable this to use vRP permission check
                        Permissions = {"police"} -- A user can have any of the following permissions, allowing you to add multiple
                    },
                },
                -- We've added QBCore integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
                QBCore = {
                    Enabled = false,
                    CheckJob = {
                        Enabled = false, -- Enable this to use QBCore job check
                        Jobs = {"police"}, -- A user can have any of the following jobs, meaning you can add different jobs
                    },
                    CheckPermission = {
                        Enabled = false, -- Enable this to use QBCore permission check
                        Permissions = {"police"}, -- A user can have any of the following permissions, allowing you to add multiple
                    },
                },
                -- We've added QBX integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
                QBX = {
                    Enabled = false,
                    CheckJob = {
                        Enabled = false, -- Enable this to use QBX job check
                        Jobs = {"police"}, -- A user can have any of the following jobs, meaning you can add different jobs
                    }
                },
        },
    },

    selectSignCommand = {
        commandName = "selectsign",
        Permissions = {
                EnablePermissions = false, -- If set to false, all below job checks will be disabled, even if they are enabled in the config.lua
                AcePermissions = {
                    Permission = "update.motorway.sign",
                    Enabled = false,
                },
            
                ESX = {
                    Enabled = false,
                    CheckJob = {
                        Enabled = false, -- Enable this to use ESX job check
                        Jobs = {"police"} -- A user can have any of the following jobs, allowing you to add multiple
                    }
                },
                -- We've added vRP integration. All you need to do is enable it below. Then, configure if you wish to check for groups or permissions, or even both
                vRP = {
                    Enabled = false,
                    CheckGroup = {
                        Enabled = false, -- Enable this to use vRP group check
                        Groups = {"police"}, -- A user can have any of the following groups, meaning you can add different jobs
                    },
                    CheckPermission = {
                        Enabled = false, -- Enable this to use vRP permission check
                        Permissions = {"police"} -- A user can have any of the following permissions, allowing you to add multiple
                    },
                },
                -- We've added QBCore integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
                QBCore = {
                    Enabled = false,
                    CheckJob = {
                        Enabled = false, -- Enable this to use QBCore job check
                        Jobs = {"police"}, -- A user can have any of the following jobs, meaning you can add different jobs
                    },
                    CheckPermission = {
                        Enabled = false, -- Enable this to use QBCore permission check
                        Permissions = {"police"}, -- A user can have any of the following permissions, allowing you to add multiple
                    },
                },
                -- We've added QBX integration. All you need to do is enable it below. Then, configure if you wish to check for jobs or permissions, or even both
                QBX = {
                    Enabled = false,
                    CheckJob = {
                        Enabled = false, -- Enable this to use QBX job check
                        Jobs = {"police"}, -- A user can have any of the following jobs, meaning you can add different jobs
                    }
                },
        },
    },

    directionColours = {
        ["north"] = 17,
        ["south"] = 18,
        ["east"] = 17,
        ["west"] = 18,
    },

    -- Here you can translate the resource into another language
    translations = {
        selectSignHelp = "Select a smart motorways sign",
        editingSign = "Now editing sign ID: ",
        hasBeenSetTo = " has been set to: ",
        speedLimitOfLane = "Speed limit of lane ",
        symbolOfLane = "Symbol of lane ",
        speedUnit = "mph",
        resetAll = "All lanes have been reset.",
        resetSignsHelp = "Reset all Smart Motorways",
    },

    -- We do not recommend editing below this section:
    -- The offsets which the signs are placed at in comparison to the sign
    spawnOffsets = {
        -- Offsets for two lane setups
        [2] = {
            [1] = {x = -3.9, y = -2.1, z = 3.65},
            [2] = {x = 1.61, y = -2.1, z = 3.65}
        },
        -- Offsets for three lane setups
        [3] = {
            [1] = {x = -6.04, y = -2.2, z = 3.65},
            [2] = {x = -0.925, y = -2.2, z = 3.65},
            [3] = {x = 3.82, y = -2.2, z = 3.65}
        },
        -- Offsets for four lane setups
        [4] = {
            [1] = {x = -9.7801, y = -2.2, z = 3.65},
            [2] = {x = -3.21, y = -2.2, z = 3.65},
            [3] = {x = 2.52, y = -2.1, z = 3.65},
            [4] = {x = 8.0501, y = -2.1, z = 3.65}
        }
    },

    -- Here you can define the various locations of the signs around the map.
    -- Here you can configure the sound effect which is played when a sign is successfully updated
    soundEffect = {
        enabled = true,
        name = "CONFIRM_BEEP",
        dict = "HUD_MINI_GAME_SOUNDSET",
    },

    gantryModels = {
        [2] = `2_lane`,
        [3] = `3_lane`,
        [4] = `4_lane`,
    },
}

Installation

  • Copy the SmartMotorways folder into your resources and add ensure SmartMotorways to your server.cfg.
  • Choose your icon pack (UK, EU or US) and permissions in config.lua.
  • For Discord logging, add your own webhook in sv_utils.lua and set logging.enabled to true.

Details

Frameworks
ESX, QBCore, QBOX, vRP
File size
10 MB
Creator
London Studios
Updated
Oct 14, 2026
How to install it

Installation

  1. Unzip the download into your server's resources folder.
  2. Add these lines to server.cfg, in this order:
    ensure SmartMotorways

Checked: the one resource of this download.

From a static check of the files by the RPScripts Lab. It is not a test that your server starts.

London Studios Smart Motorways

$30.00€26.99£22.99A$43.99R$152.99CHF 24.99¥4,750

Can't find the exact script? Generate it.

Describe a custom script. 3 free credits per day, up to 15 per calendar month; no card needed.

Try the FiveM AI Script Generator