All important questions about RoadPhone-Pro — setup, troubleshooting, and tips
Use this page to quickly find answers to common questions and fixes. If something is missing, reach out on our Discord server.
I found a bug — what should I do?
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.
My Music app says the Music Server is offline
The Music Server requires a valid Tebex Transaction ID to authenticate your purchase.
Solution:
Open API.lua in your RoadPhone resource
Enter your TebexTransactionID in the designated field
Open /public/static/config/config.json, search for Business, then copy an example job and change: job, name, shortName, icon, number, openingHours, minGradeToManage and the coords.
Add my own notifications
In ClientAPI.lua, find sendNotification(text) and replace Bridge.Notification.Show(text) with your notification trigger.
Talk on the radio and voice at the same time
If you use SaltyChat, set EnableHardCoreMode to false in your SaltyChat config.
Mouse stuck in the center when opening the phone
Go to Settings → Keyboard/Mouse → Mouse Input Method → Raw Input.
Notify EMS when someone is down
ESX
QBCore / Qbox
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()
Copy
function SendDistressSignal() exports['roadphone']:sendDispatch("Injured person", "ambulance", nil)end
This example refers to qb-ambulancejob. If you use a different script, adapt accordingly.
In qb-ambulancejob/client/dead.lua, search for “hospital:server:ambulanceAlert” and replace with:
If you’re using an old Ambulancejob or a custom one, go to bridge/modules/events/shared.lua and change the PlayerSpawn events from your framework you using to the custom event.
Disable cryptocurrency
In config.lua, set Config.Crypto = false.
Lock radio channels
In config.lua, configure Config.lockedRadioChannels with the channel list.
Change the phone language
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.
SaltyChat: Radio doesn’t work
If you have SaltyRadio on the server, remove it.
If not, try our SaltyChat version.
Car is locked after delivery
Edit the GiveCarKeys function in clientAPI.lua.
ESX
QBCore
GiveCarKeys (ESX)
Copy
function GiveCarKeys(plate, model) TriggerEvent("vehiclekeys:client:SetOwner", plate)end
GiveCarKeys (QBCore)
Copy
function GiveCarKeys(plate, model) TriggerEvent("qb-vehiclekeys:client:AddKeys", plate)end
GetExtendedPlayers error (es_extended 1.1/1.2)
Add this to es_extended/server/functions.lua:
GetExtendedPlayers helper
Copy
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 xPlayersend
Problems with VideoCall
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.
Use a fixed prefix for phone numbers
Edit server/serverAPI.lua function getPhoneRandomNumber. If you change the prefix to more than two digits, also update the string.format.
Phone number prefix
Copy
function getPhoneRandomNumber() local prefix = 49 local numBase = math.random(1000000, 9999999) -- 7 digits local num = string.format("%02d%07d", prefix, numBase) return numend-- Output example: 497649867
I forgot my phone PIN ( only without metadata )
Clear your cache once — this will remove the PIN lock.
Add jobs to the Jobs App
Open /public/static/config/config.json, search for JobsApp, then copy an example and change the name, coords, and icon.
Finding IconsVisit Iconify, search for an icon, choose Vue + Components, and copy the icon name from the shown code.
OxInventory snippets ( metadata )
Go to the metadata description.
OxInventory snippets
If you don’t use metadata with OxInventory, use these snippets to block/unblock the phone based on inventory.The following example items block will block/unblock the phone based on inventory.
OxInventory items
Copy
['phone'] = { label = 'Phone', weight = 190, stack = false, consume = 0, client = { add = function(total) if total > 0 then pcall(function() return exports['roadphone']:unblockPhone() end) end end, remove = function(total) if total < 1 then pcall(function() return exports['roadphone']:blockPhone() end) end end } },['purple_phone'] = { label = 'Handy', weight = 190, stack = false, consume = 0, client = { add = function(total) if total > 0 then pcall(function() return exports['roadphone']:unblockPhone() end) end end, remove = function(total) if total < 1 then pcall(function() return exports['roadphone']:blockPhone() end) end end }},['green_phone'] = { label = 'Handy', weight = 190, stack = false, consume = 0, client = { add = function(total) if total > 0 then pcall(function() return exports['roadphone']:unblockPhone() end) end end, remove = function(total) if total < 1 then pcall(function() return exports['roadphone']:blockPhone() end) end end }},['red_phone'] = { label = 'Handy', weight = 190, stack = false, consume = 0, client = { add = function(total) if total > 0 then pcall(function() return exports['roadphone']:unblockPhone() end) end end, remove = function(total) if total < 1 then pcall(function() return exports['roadphone']:blockPhone() end) end end}},['blue_phone'] = { label = 'Handy', weight = 190, stack = false, consume = 0, client = { add = function(total) if total > 0 then pcall(function() return exports['roadphone']:unblockPhone() end) end end, remove = function(total) if total < 1 then pcall(function() return exports['roadphone']:blockPhone() end) end end }},['black_phone'] = { label = 'Handy', weight = 190, stack = false, consume = 0, client = { add = function(total) if total > 0 then pcall(function() return exports['roadphone']:unblockPhone() end) end end, remove = function(total) if total < 1 then pcall(function() return exports['roadphone']:blockPhone() end) end end }},