How Integrations Work#
The race itself knows nothing about your framework, inventory or phone. Everything server-specific goes through small open-source files in custom/, so it can be read and changed without touching the rest.
Layer | Supported | File | Without it |
|---|---|---|---|
Framework | es_extended · qb-core · qbx_core |
| Required — the resource does not start. |
Notifications | ox_lib by default, any system by editing one function |
| — |
Quests | qs-inventory |
| No quests; racing is unchanged. |
Phone | qs-smartphone | Built into the phone | Racing from the tablet only. |
Database | oxmysql | — | Required. |
Optional integrations are checked when they are used, so qs-inventory and qs-smartphone work whatever order they start in. Only the framework has to start before Advanced Racing.
Frameworks#
The bridge is chosen by the framework resource that is started: es_extended loads custom/esx/, qb-core and qbx_core load custom/qb/. Racing profiles belong to the character — the ESX identifier or the QBCore citizen id — so each character has its own rating, tracks and results.
Each bridge answers the same questions:
Function | Used for |
|---|---|
| Whose racing profile this is. Server id 0 stands for the Automated organiser. |
| The character's first and last name; the first name becomes the driver's starting name. |
| Buy-ins, refunds and prizes, in |
| Verifying tracks, deleting any race, organising competitions without the rating. |
| The tablet item. |
| Helpers for the functions above. |
Money accounts#
Config.MoneyType | ESX | QBCore · Qbox |
|---|---|---|
| Cash | Cash ( |
| Bank | Bank |
| Dirty money — street racing for criminal servers | Only if your QBCore has a money type of that name |
Notifications#
Every message shown over the game — joined, refunded, eliminated, a driver finished — goes through one function, Notification in custom/client.lua. It uses ox_lib out of the box:
-- custom/client.lua
function Notification(msg, type) -- type is 'info', 'error' or 'success'
lib.notify({
title = msg,
type = type
})
endReplace the body to use your own system. For example, okokNotify:
function Notification(msg, type)
exports['okokNotify']:Alert('Racing', msg, 5000, type)
endMessages from the server arrive at the same function, so this one change covers all of them. The pop-ups inside the tablet are the tablet's own and are not affected.
Quasar Smartphone#
With qs-smartphone running, the phone's Racing app reads straight from Advanced Racing — the same profile, races and results as the tablet. There is nothing to configure.

In the app | What it does |
|---|---|
Races | Upcoming races, joining and leaving them, a waypoint to the start line, and creating a normal race. |
Tracks | Every track, favourites, and each track's best times. |
Leaderboard and events | The top 20, the recent events and completed competitions. |
Profile | Name, avatar and colours, and whether the driver is in a race right now. |
The app looks for the resource by its name,
qs-advancedracing. If the folder is renamed, the app reports that racing is not started.
Quasar Inventory Quests#
With qs-inventory running, every player is given two racing quests when their character loads:
Quest | Name | Completed when | Reward · level |
|---|---|---|---|
Race Entry |
| The player joins a race. | 150 · level 1 |
Race Winner |
| The player finishes in a paid position. | 300 · level 2 |
Titles, descriptions, rewards and levels are in custom/missions.lua.
Adding a Framework#
A framework that is not on the list takes one folder and one line:
Copy the closest bridge
Duplicate
custom/qb/orcustom/esx/ascustom/myframework/, with itsclient.luaandserver.lua.Fill in the functions
Rewrite each function of
server.lua— the table under Frameworks — with your framework's calls. KeepgetIdentifierreturning'automated'for server id 0, and keep thereturn frameworkline at the end.Register it
In
shared/config.lua, map your framework's resource to the folder name:lua local frameworks = { ['es_extended'] = 'esx', ['qb-core'] = 'qb', ['qbx_core'] = 'qb', ['my_core'] = 'myframework', -- your resource → custom/myframework/ }
Run only one framework: if two from the list are started, either may be picked.
Languages#
28 translations ship in locales/, and the same file drives the tablet, the start-line text, the map cards and the notifications:
ar · bg · ca · cs · da · de · el · en · es · fa · fr · hi · hu · it · ja · ko · nl · no · pl · pt · ro · ru · sl · sv · th · tr · zh-CN · zh-TW
Config.Locale = 'es' -- the file name without .jsonTo add a language, copy locales/en.json to a new name such as locales/eu.json, translate the values — never the keys — and set Config.Locale to 'eu'. Any key your file is missing is taken from English, and the console names it so you can add it.



