LogoLogo
SupportServer Hosting
  • Sonoran CAD
  • 📱Download The App
    • Steam Browser - Workaround
    • Web Browser - Clear Cache
    • Desktop App - Clear Cache
    • GTA RP Tablet - Clear Cache
    • Steam Browser - Clear Cache
  • Why Choose Sonoran CAD?
    • 🏆Why Choose Sonoran CAD?
  • Other Products
    • 🖥️FiveM Hosting
    • 📝Sonoran CMS
    • 📡Sonoran Radio
  • Tutorials
    • Getting Started
      • Registering Your Account
      • Registering Your Community
      • Inviting Users to Your CAD
      • Granting Account Permissions
      • View Your Limits
      • Community ID and API Keys
      • Troubleshooting
    • Customization
      • Custom Domain & Login Page
      • Customizing Your Layout
      • Community Branding and Settings
      • Creating Custom Record and Report Types
      • Sharing Custom Records
      • Custom Search Types
      • Geographical Settings
      • Penal Codes
      • 10-Codes
      • Addresses and Street Names
      • Unit Status Codes
      • Tone Board
      • Custom Audio Notifications
      • Custom Emails
      • Quick Links
      • Custom Page Colors
      • User Account Restrictions
      • Configuring Multiple Servers
      • Advanced Query Strings
    • Dispatching
      • Creating a Call
      • Self Dispatch
      • Timers
      • Command Line Interface (CLI)
    • Records Management
      • Record Lookups
      • Adding a Record
      • PDF Records
      • Scene Diagram Builder
    • Administration
      • System Logs
      • Remove User Account
      • Deleting or Transferring your CAD
    • Other Features
      • Configurable Hotkeys
      • Voice Commands
      • Volume and Language
  • Integration Capabilities
    • 🗃️Paid Integration Resources
      • Mobile Command Center
      • ATM Robbery
      • In-Vehicle Radar
      • Evidence Camera
      • Power Grid
      • Speed Cameras
      • Shot Spotter
    • 🛠️Integrated Vendors
    • 📺Twitch Bodycam, Bot, & Lighting Integration
    • Database Sync and Merge
      • Database Sync Credentials
      • QB Core Mapping Tutorial
      • Troubleshooting
    • Discord Bot Integration
    • Discord Rich Presence
    • Discord Webhooks
    • TeamSpeak 3 Integration
    • Stream Deck Integration
    • 🎮FiveM
      • FiveM Installation
        • Submodule Configuration
          • Submodule Troubleshooting
          • Submodule Configuration Updates
        • FiveM Submodules
          • Body Camera
          • Call Commands
          • Check API ID
          • Civilian Integration
          • Dispatch Notify
          • Emergency Response Simulator (ERS)
          • Framework Support (ESX/QBCore) and Auto Fines
          • FivePD
          • ForceReg
          • Kick
          • Locations
          • Live Map
          • Lookups
          • Postals
          • Smart Signs
          • Sonoran Radio (sonrad)
          • Station Alert
          • Tablet & Mini-CAD
          • TeamSpeak 3
          • Traffic Stop
          • Unit Status
          • VehReg
          • WraithV2
      • FiveM Development Documentation
        • Client Functions
        • Shared Functions
        • Server Functions
        • Server Events
        • HTTP Request Handling
      • Error Codes
    • 🎮Roblox ER:LC
  • Developer API Documentation
    • 📖API Integration
      • Getting Started
        • Retrieving Your Credentials
        • Integration API ID
        • Account Secret ID
      • Push Events
        • Event Restrictions
        • Record Events
          • Record Added
          • Record Edited
          • Record Removed
        • Unit Events
          • Unit Panic
          • Unit Login
          • Unit Logoff
          • Unit Status Update
          • Unit Group Name Change
          • Unit Group Add
          • Unit Group Remove
        • Dispatch Events
          • New Dispatch
          • Modified Dispatch
          • Closed Dispatch
          • Dispatch Note
          • Attach Unit
          • Detach Unit
          • Toggle Bodycam
        • Event 911
        • Remove 911
        • Sign Updated
        • Tone Played
        • Civilian
          • Character Selected
        • ERS
          • New Callout
        • Station Alert
          • New Station Alert
      • API Endpoints
        • API Restrictions
        • Emergency
          • Identifiers
            • Get Identifiers
            • Modify Identifier
            • Set Identifier
            • Unit Panic
            • Kick Unit
            • Unit Status
            • Get Active Units
            • Update Unit Location
          • Dispatch and Emergency Calls
            • Get Calls
            • New Dispatch
            • Attach Unit
            • Detach Unit
            • Update Call Postal
            • Add Call Note
            • Update Call Primary
            • Close Dispatch
            • New 911 Call
            • Remove 911
          • Custom Blips
            • Get Map Blips
            • Add Blip
            • Modify Blip
            • Remove Blip
          • Street Signs
            • Set Street Sign Config
            • Update Street Sign
          • ERS
            • Set Available Callouts
          • Station Alert
            • Set Stations
        • Civilian
          • Set Character
          • Get Characters
          • New Character
          • Edit Character
          • Remove Character
          • DB Sync: Get Character Links
          • DB Sync: Link Character
        • General
          • Get Servers
          • Set Servers
          • Get Version
          • Set Penal Codes
          • Set API IDs
          • Custom Records
            • API Options for Adding and Modifying Records
            • Get Record Templates
            • New Record
            • Edit Record
            • Remove Record
          • Lookup By Value
          • Lookup Name or Plate
          • Get Account
          • Get Accounts
          • Check API ID
          • Apply Permission Key
          • Modify Account Permissions
          • Kick or Ban User
          • Verify Secret
          • Auth Street Signs
          • Set Postal Config
          • Set Clock Time
          • Send Photo
          • Leave Community
          • Join Community
        • Local Endpoints
          • Smart Lighting
        • Internal
          • FiveM Download
      • API Examples
        • Emergency
          • LUA Examples
            • Dispatch and Emergency Calls
              • New 911 Call
              • Remove 911
              • Add Call Note
              • Set Call Postal
            • Custom Blips
              • Add Blip
              • Add Blips
              • Add Temp Blip
              • Get Map Blips
              • Remove Blip
              • Remove Blip With Subtype
            • General
              • Lookup Name or Plate
          • JavaScript Examples
            • Dispatch and Emergency Calls
              • New 911 Call
              • Remove 911
              • Add Call Note
              • Set Call Postal
            • Custom Blips
              • Add Blip
              • Add Blips
              • Add Temp Blip
              • Get Map Blips
              • Remove Blip
              • Remove Blip With Subtype
            • General
              • Lookup Name or Plate
      • Development Branch
    • 💵Developer Bounties
    • 🌎Translation Support
  • Pricing
    • Pricing FAQ
      • Military and First Responder Discount
      • Expert Installation
      • Accessing the Payment Center
      • Create and Manage a Subscription
      • Request Discord Role
    • View and Compare Plans
  • Roadmap
    • 📋Changelog
  • Other
    • AI QA
    • Contact Us
    • Policy
      • Rocket CAD Closure
      • Terms of Service
      • Privacy Policy
      • Refund and Purchase Policy
      • Discord Bot
    • Archive
      • Fire Siren
Powered by GitBook
On this page
  • Video Showcase
  • Installation Guide
  • 1. Download the Resource
  • 2. Install the Resource
  • 3. Add Requirements to Server.cfg file
  • 4. Configure options to your liking
  • 5. Configure your Discord Webhook URL (optional)
  • 6. Set your Game Server IP/Port
  • How to use
  • In-Game Usage
  • Modifying Signs in the CAD
  • Live Map
  • Full Feature List
  • Smart Signs Configuration
  • Main Configuration
  • Permission Checks
  • Sonoran CAD Permission Integration
  • Ace Permission Integration
  • vRP Integration
  • ESX Integration
  • QB Core Integration
  • Locations.json file
  • Adding new Signs
  • Updating from v1.4.1 to v1.5.1 or newer

Was this helpful?

Edit on GitHub
  1. Integration Capabilities
  2. 🎮FiveM
  3. FiveM Installation
  4. FiveM Submodules

Smart Signs

Our smart signs integration resource allows you to update roadway signs in-game directly from the CAD!

PreviousPostalsNextSonoran Radio (sonrad)

Last updated 5 months ago

Was this helpful?

This resource utilizes API endpoints that require the Pro version of Sonoran CAD or higher. For more information, view our pricing page.

Looking for VPS, web, or dedicated hosting? Check out our official server hosting!

Video Showcase

View our video showcase of the Smart Signs resource here!

Installation Guide

If you have the original London Studios Smart Signs resource please remove and/or disable it from running. Our resource completely replicates the functionality of the original resource and they will conflict if both are running at the same time.

1. Download the Resource

Purchase the resource for free from our store.

This resource is managed through Tebex and will require you to login with FiveM. Be sure to login using the account that has the keymaster license for your server.

Once "purchased" you can download the asset from your keymaster account.

2. Install the Resource

We suggest installing the smartsigns_sonoran and smartsigns_sononran_helper folders within the [sonorancad] folder your integration framework is installed in. The final result would look like the image below...

3. Add Requirements to Server.cfg file

In your server.cfg add the following new line after/below your ensure sonorancad line:

ensure smartsigns_sonoran

# Permissions for Sonoran Smartsigns Auto-updater (REQUIRED)
add_ace resource.smartsigns_sonoran command allow
add_ace resource.smartsigns_sonoran_helper command allow

4. Configure options to your liking

Rename config_RENAMEME.lua to config.lua.

In the config.lua file, you can enable options depending on your framework you are using or permissions you would like to integrate with.

The smart signs resource also has support with ESX, VRP, Discord logging, ace permissions, and more. View the documentation from London Studios for the most up to date information.

5. Configure your Discord Webhook URL (optional)

Rename sv_discordConfig_RENAMEME.lua to sv_discordConfig.lua .

In the sv_discordConfig.lua file, you can specify the discord webhook URL you would like log messages sent to from Smart Signs. Additional settings and to enable webhook logging is found in the config.lua file you renamed in the previous

6. Set your Game Server IP/Port

In the Admin panel, navigate to Advanced > In-Game Integration > Push Events and Live Map

Ensure your game server's IP and game port are set. The CAD will use this to push sign updates to your server.

Differing Inbound/Outbound IP Addresses

Error: Server ID: 123 has IP set to: 1.2.3.4 -> your IP: '2.3.4.5'

Some hosting providers may have your game server sending traffic out from a different IP address than is used to connect to your game server. If this is the case, toggle the Differing Outbound IP checkbox for this server and fill in the Outbound IP field.

How to use

In-Game Usage

This script works by approaching a sign. When a player approaches a sign and are in the range of the control panel, they are able to edit the text of the sign if they meet the required permission checks. The resource has been optimized so that the signs will load and unload for players based on how close they are to each sign which is perfect for larger servers as it means that server resources will not be used unnecessarily.

Modifying Signs in the CAD

The street sign panel can be found on both the Dispatch and DMV pages. Users will need the Modify Street Signs permissions in order to update them.

Here, you can easily search to filter sign labels. Sign text can also be easily duplicated from one sign to another.

Live Map

You can also modify smart signs right from the live map!

Users will need both the Modify Street Signs and the Self Dispatch permissions in order to view and edit signs from the live map.

Full Feature List

Signs – This is the main element of the resource, allowing you to walk up to a sign and change the text from an in-game control panel at the bottom of the sign. This can be used to open a world of roleplay opportunities. Word Denylist – You are able to set the resource up so that users cannot use specific words on a sign. Discord Logs – You can choose to send logs to your Discord server via a webhook each time a player sets the text on a sign. Custom Model – This resource includes high-quality letters and a custom sign model created by Beaver Mods. This will ultimately enhance realism. Highly Configurable – This resource is highly configurable, allowing you to setup each sign separately. You can adjust the location of each sign, all messages and even add extra characters from other languages. Permission Checks – You can easily enable permission checks in the configuration file for ACE permissions, framework jobs/groups or SonoranCAD active unit checking.

We understand that it may be confusing to use for some of our users. If you need support please feel free to open a ticket in the official London Studios Discord.

Smart Signs Configuration

You can easily open the config.lua and configure the script to your liking in either notepad, notepad ++ or using Visual Studio Code.

The config examples below are not the full configuration file and further explanation comments of what each setting does can be found in the config.lua file.

Main Configuration

The first section is called main, allowing you to set the following:

config = {
    configVersion = 1.5, -- Do not change, used to see if config file is requiring updates.
    auto_update = true, -- Enable automatic updates from Sonoran Software for Smart Signs.
    main = {
        -- Here you are able to define how far the sign will load in from.
        -- If the player has loaded in the sign and goes out of this range the sign will unload on their client.
        loadInDistance = 300.0,

        -- Here you are able to define how close the player must be to the signs keypad in order to edit the text.
        -- 3.0 is the ideal value for "arms reach"
        accessPointDistance = 3.0,

        -- Here is the prop for the sign.
        -- You can change this if you wish but we recommend leaving this unless you are highly experienced.
        signModelName = {
            left = `prop_led_trafficsign_left`,
            right = `prop_led_trafficsign_right`,
        },

        -- This is the text that appears when you are changing the message. You could use this to translate to another language.
        instructionalText = "Press [E] to adjust sign",

        -- This will bring every sign back to default
        resetSignCommand = "resetsmartsigns",
        resetSignCommandEnabled = true,
        resetSignSuggestion = "Reset all smart signs around the map!",

        changeSignCommand = "editsmartsigns", -- To edit signs across the map
        changeSignSuggestion = "Edit all smart signs around the map!",
        changeSignCommandEnabled = true,

        -- Here you can change which button must be pressed to change the text on the sign
        -- A list of controls can be found on the official FiveM documentation @ https://docs.fivem.net/docs/game-references/controls/
        adjustButton = {0, 103}, -- {control group, control}

        -- This will change whether users can use /newsmartsign to automatically add signs into the locations.json file
        -- This will also enable debug printing on both the client and the server. This should be set to false most of the time.
        developerMode = false,

        -- Blips for all signs are automatically enabled on developer mode. This allows you to keep blips while disabling developer mode
        enableBlips = true,
        shortRangeBlips = true,

        -- Here you can define a list of words which cannot be placed on signs.
        -- These are automatically removed and replaced with blank text
        bannedWords = {
            "fuck",
            "shit",
        },

        -- This setting will toggle automatic centering of text
        -- Please note that centering may not be perfect due to the even amount of characters accepted by the sign
        centerText = false,

        -- This setting will utilize Sonoran CAD's Integration in order to determine if users are an active unit
        -- in the cad before allowing them to change smartsigns in game. Active units are any units with the CAD open
        -- to police, ems, fire or dispatch panels.
        useUnitPermission = false,

        -- Enable this to use Ace Permissions.
        -- This requires you to give groups or individual users the permission set below
        -- If you want to add further Ace Permission integration, edit sv_smartsigns.lua
        acePermissions = {
            enabled = false,
            permission = "update.sign"
        },

        -- 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
        -- If you want to add further vRP integration, edit sv_smartsigns.lua
        vRP = {
            enabled = false,
            checkGroup = {
                enabled = true, -- Enable this to use vRP group check
                groups = {"police", "emergency", "admin"}, -- 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.menu", "player.kick"} -- A user can have any of the following permissions, allowing you to add multiple
            },
        },

        -- We've added ESX integration. All you need to do is enable it below
        -- Then, configure which jobs you want to check for
        -- If you want to add further ESX integration, edit sv_smartsigns.lua
        ESX = {
            enabled = false,
            checkJob = {
                enabled = true, -- 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 QBCore integration. All you need to do is enable it below
        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 = {"god"}, -- A user can have any of the following permissions, allowing you to add multiple
            },
        },

        -- Here is the animations which are played when entering text for a sign.
        -- It is unlikely that this will need to be changed but you can disable the animation if you wish to do so.
        -- Find the animation list here: https://alexguirre.github.io/animations-list/
        animation = {
            enabled = true,
            dict = "anim@heists@prison_heiststation@cop_reactions", -- This is the animation dictionary (these show in bold on the animation list)
            name = "cop_b_idle", -- This is the animation name (these show below bold dictionaries on the animation list)
        },

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

            -- This section will work regardless of logging being enabled
            -- Make sure to set this to false in order to disable all logging
            bannedWordLogs = {
                enabled = true,
                colour = 16711680,
            }
        },

        soundEffect = {
            enabled = true,
            name = "CONFIRM_BEEP",
            dict = "HUD_MINI_GAME_SOUNDSET",
        },

        -- This allows you to move the position of every sign to a certain offSet, such as 1m down, if you feel they are all too high for example
        signOffset = {0.0, 0.0, 0.0}, -- x, y, z
    },

To change the activation key (adjustButton), replace it with your desired key code from here.

You can see from the above config just how configurable the resource is, allowing you to set many features such as the load in the distance and access points to edit the text of the signs, the different denied words and the animations played while the player is typing.

Secondly, the instructionalText section allows you to convert the access message to another language.

Permission Checks

We’ve made it simpler than ever to integrate permissions into the resource. This can be Ace Permissions, VRP or even ESX Integration (built-in).

This means that you can restrict certain players, permissions or even jobs/groups from setting the message on a sign.

Sonoran CAD Permission Integration

In the config.lua file, you can easily enable a permission check to allow "active units" in the CAD to change smartsigns in game.

Simply ensure that useUnitPermission is set to true to enable this check

useUnitPermission = true,

Ace Permission Integration

In the config.lua file, you can easily enable ace permissions and set the required permission.

You could then add this to certain players in the server.cfg or even groups as part of a server framework.

For more help on that, see some documentation on Ace Permissions here.

acePermissions = {
    enable = false,
    permission = “update.sign”
},

vRP Integration

In the config.lua file, you can easily enable vRP Integration including both vRP.hasPermission checks and vRP.hasGroup checks. This can allow you to restrict it to a police job for example, or highways maintenance job, if that exists on your server.

Simply changed enabled to true to enable vRP integration. This will then generate the necessary vRP Proxy on the server, enabling global vRP functions such as GetUserId.

In the checkGroup = {} section, you can set it up to check if the user has a required group. In the groups box, you can enter all the groups you would like to have permission, such as adding both police and administrators, as they may need to access them.

In the checkPermission = {} section, you can do the same as a group, but for a permission instead. As you use the vRP framework you should be familiar with permissions and how to issue them.

You should check your vRP groups.lua file to view your groups and the permissions for each group.

vRP = {            
    enabled = false,            
    checkGroup = {                
        enabled = true, — Enable this to use vRP group check                
        groups = {“police”, “emergency”, “admin”}, — 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.menu”, “player.kick”} — A user can have any of the following permissions, allowing you to add multiple            
        
    },        
    
}

ESX Integration

In the config.lua file, you can easily enable ESX Integration using a job check.

Simply change enabled to true to enable ESX integration. This will then generate the necessary ESX Shared Object on the server, enabling you to use ESX functions.

In the checkJob = {} section, you can set it up to check if the user has a required job. For example, by keeping it as “police”, it will only work if the user has the police job. Alternatively, you may choose to add more such as “admin”.

You should check your ESX jobs database table to be familiar with what jobs are configured on your server.

ESX = {            
    enabled = false,            
    checkJob = {                
        enabled = true, — Enable this to use ESX job check                
        jobs = {“police”} — A user can have any of the following jobs, allowing you to add multiple            
    }        
},

QB Core Integration

In the config.lua file, you can easily enable QB Core Integration using a job or permission check.

Simply change enabled to true to enable the QB Core integration.

In the checkJob = {} section, you can set it up to check if the user has a required job. For example, by keeping it as “police”, it will only work if the user has the police job. Alternatively, you may choose to add more such as “admin”.

In the checkPermission = {} section, you can do the same as a job, but for a permission instead.

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 = {"god"}, -- A user can have any of the following permissions, allowing you to add multiple
    },
},

Overall, we think we’ve made it easy for you to add permission checks into the resource. If you need additional help setting it up, our support team is here to help. You can open a support ticket here.

Locations.json file

All sign locations and texts are now visible in the locations.json file, a dynamic file that will update every time players are on your server.

This means that any text set by players on signs will also be saved each time your server is restarted.

Adding new Signs

To make it easier to set signs up we have added a /createsmartsign command which will only work while developerMode is set to true in config.lua. You can select left or right on the command depending on what side you want the sign to be.

This command will then spawn a sign prop that can be repositioned with the following controls:

R -- rotates the sign Right Mouse Button -- Exits Spooner Menu Left Mouse Button -- Allows you to move the sign as needed ENTER -- finish placement

Once you press ENTER the new sign location will automatically be added to the locations.json file. You will need to restart your server to see the sign after setting it up.

Updating from v1.4.1 to v1.5.1 or newer

With the release of v.1.5.1 we have made the decision to not push an auto-update to users using v.1.4.1 or older. This is due to the change in configuration of sign locations and major refactoring of systems that would make automatically updating your config challenging. To update follow the steps below:

  1. Move your old smartsigns_sonoran folder to a safe location to reference your old config for any settings you would like to migrate over.

  2. Download the new version from your keymaster account, you should have "10870 - SmartSigns" (v1.4.1) and the new "339435 - Sonoran Store - Smart Signs (Sonoran CAD Edition)" asset in keymaster. Please download the newer one only as the old one will not receive updates going further.

  3. Follow the 2. Install the Resource steps to install the updated resource. When configuring your settings refer back to your previous config file you have moved out of your server resources folder.

Sonoran CAD x London Studios
Smartsigns installed to [sonorancad] folder
Sonoran CAD - Push Event Panel
Sonoran CAD - Street Signs UI
Sonoran CAD - Live Map Smart Signs