Use this page to quickly find answers to common questions and fixes. If something is missing, reach out on our Discord server.
Please post a detailed bug report in our Discord channel #errors. Include steps to reproduce, screenshots, and logs if possible. We’ll try to fix it as soon as we can.
Make sure you’re using our xSound version and start xSound before RoadPhone.
Checklist
  • Clear your client cache.
  • Check that GTA music is turned on.
  • Verify your Windows volume mixer isn’t at 0% (this is independent of FiveM).
If your loading screen uses YouTube and you muted it there, the sound is muted everywhere. Unmute the loading screen.
Music troubleshooting screenshot
Open /public/static/config/config.json, search for AppStore, and remove the block for the app(s) you want to disable.Remove apps from AppStore config
Open /public/static/config/config.json, search for Service, then copy an example job and change: number, name, img, jobname, and the coords.Service app jobs config
Follow the instructions in config.lua (ESX init).ESX nil fix
In ClientAPI.lua, find sendNotification(text) and replace ESX.ShowNotification(text) with your notification trigger.
If you use SaltyChat, set EnableHardCoreMode to false in your SaltyChat config.
Go to Settings → Keyboard/Mouse → Mouse Input Method → Raw Input.Raw input setting
This example refers to esx-ambulancejob. If you use a different script, adapt accordingly.
In esx_ambulancejob/client/main.lua, find SendDistressSignal() and replace:
SendDistressSignal()
function SendDistressSignal()
    exports['roadphone']:sendDispatch("Injured person", "ambulance", nil)
end
If you’re using an old ESX Ambulancejob or a custom one, change Config.ESXplayerSpawnEvent to playerSpawned.Spawn event setting
In config.lua, set Config.Crypto = false.
In config.lua, configure Config.lockedRadioChannels with the channel list.Locked radio channels config
App names are excluded from translation. To localize app names, change them in config.json.
In config.lua, set the locale to your preferred language.
If you have SaltyRadio on the server, remove it.
If not, try our SaltyChat version.
Edit the GiveCarKeys function in clientAPI.lua.
GiveCarKeys (ESX)
function GiveCarKeys(plate, model)
  TriggerEvent("vehiclekeys:client:SetOwner", plate)
end
Add this to es_extended/server/functions.lua:
GetExtendedPlayers helper
ESX.GetExtendedPlayers = function(key, val)
    local xPlayers = {}
    for _, v in pairs(ESX.Players) do
        if key then
            if (key == 'job' and v.job.name == val) or v[key] == val or v.variables[key] == val then
                xPlayers[#xPlayers+1] = v
            end
        else
            xPlayers[#xPlayers+1] = v
        end
    end
    return xPlayers
end
  • Clear your client cache.
  • On the first video call after clearing the cache, accept the F8 prompt to allow recording.
  • Accept the Windows Defender warning when it appears.
Edit server/serverAPI.lua function getPhoneRandomNumber. If you change the prefix to more than two digits, also update the string.format.
Phone number prefix
function getPhoneRandomNumber()
  local prefix = 49
  local numBase = math.random(1000000, 9999999) -- 7 digits
  local num = string.format("%02d%07d", prefix, numBase)
  return num
end

-- Output example: 497649867
Clear your cache once — this will remove the PIN lock.Clear cache to reset PIN
Open /public/static/config/config.json, search for JobsApp, then copy an example and change the name, coords, and icon.Jobs App config example
Finding IconsVisit Iconify, search for an icon, choose Vue + Components, and copy the icon name from the shown code.
Iconify example
The following example items block will block/unblock the phone based on inventory.
OxInventory items
['phone'] = {
    label = 'Handy',
    weight = 190,
    stack = false,
    consume = 0,
    client = {
        add = function(total)
            if total > 0 then
                exports['roadphone']:unblockPhone()
            end
        end,

        remove = function(total)
            if total < 1 then
                exports['roadphone']:blockPhone()
            end
        end
    }
},

['purple_phone'] = {
    label = 'Handy',
    weight = 190,
    stack = false,
    consume = 0,
    client = {
        add = function(total)
            if total > 0 then
                exports['roadphone']:unblockPhone()
            end
        end,

        remove = function(total)
            if total < 1 then
                exports['roadphone']:blockPhone()
            end
        end
    }
},

['green_phone'] = {
    label = 'Handy',
    weight = 190,
    stack = false,
    consume = 0,
    client = {
        add = function(total)
            if total > 0 then
                exports['roadphone']:unblockPhone()
            end
        end,

        remove = function(total)
            if total < 1 then
                exports['roadphone']:blockPhone()
            end
        end
    }
},

['red_phone'] = {
    label = 'Handy',
    weight = 190,
    stack = false,
    consume = 0,
    client = {
        add = function(total)
            if total > 0 then
                exports['roadphone']:unblockPhone()
            end
        end,

        remove = function(total)
            if total < 1 then
                exports['roadphone']:blockPhone()
            end
        end
    }
},

['blue_phone'] = {
    label = 'Handy',
    weight = 190,
    stack = false,
    consume = 0,
    client = {
        add = function(total)
            if total > 0 then
                exports['roadphone']:unblockPhone()
            end
        end,

        remove = function(total)
            if total < 1 then
                exports['roadphone']:blockPhone()
            end
        end
    }
},

['black_phone'] = {
    label = 'Handy',
    weight = 190,
    stack = false,
    consume = 0,
    client = {
        add = function(total)
            if total > 0 then
                exports['roadphone']:unblockPhone()
            end
        end,

        remove = function(total)
            if total < 1 then
                exports['roadphone']:blockPhone()
            end
        end
    }
},