How Integrations Work#
Guitar Pro's core never talks to your framework, target or notification resource directly. Each of those sits behind a small, unencrypted file in custom/ or client/custom/, and the resource picks the right one by looking at what is already running:
Layer | Supported | Without it |
|---|---|---|
Framework | es_extended · qb-core · qbx_core | Standalone: machines are free, progress is kept per FiveM licence, and names come from the FiveM player name. |
Target | ox_target, with | A floating [E] prompt at each cabinet — the default. |
Notifications | qs-interface | ox_lib notifications. |
3D prompt | qs-textui | A text label drawn over the cabinet. |
HUD | qs-interface | Only the game's own HUD and radar are hidden at the cabinet. |
Weather and time | Renewed-Weathersync · qb-weathersync · vSync · av_weather · cd_easytime | The clock is overridden directly for the performer. |
Arcades | qs-arcades | Machines are placed with the creator only. |
There is no inventory, item or phone integration — nothing in Guitar Pro is an item. Every optional integration degrades silently: a missing resource makes its part fall back to the built-in behaviour, and nothing errors.
Frameworks#
The framework is detected once, when Guitar Pro starts, by looking for a started es_extended, qb-core or qbx_core. Qbox runs through the QBCore bridge. The framework is used for three things only — who the player is, what their name is, and taking the price to play:
Framework | Player key | Name shown | Money |
|---|---|---|---|
ESX | The ESX identifier | The character name | Cash, or the bank account |
QBCore / Qbox | The citizen id | First and last name |
|
Standalone | The FiveM licence | The FiveM player name | None — every machine is free |
Scores, levels, points and guitars are stored against the player key, so on a multi-character server each character has its own progress. If detection picks the wrong framework, force it in config/main.lua:
Config.Framework = 'qb' -- 'esx', 'qb' or 'standalone'Another framework#
Each framework is one folder in custom/ with a client.lua and a server.lua. To support one that is not listed, copy custom/standalone/ to custom/myframework/, fill in the server functions against your framework, and set Config.Framework = 'myframework':
-- custom/myframework/server.lua
local framework = {}
function framework:getIdentifier(source) end -- a stable id for this player
function framework:getName(source) end -- the name shown on boards
function framework:getMoney(source, method) end -- method: 'money' (cash) or 'bank'
function framework:removeMoney(source, amount, method) end
function framework:addMoney(source, amount, method) end
return frameworkInteracting with the Cabinet#
By default a floating [E] - Guitar Pro prompt appears within 2.2 m of a cabinet, drawn by qs-textui when it is running. To use ox_target instead:
Config.UseTarget = trueThe option is added to the cabinet model itself, so every machine — placed, configured or managed — gets it. The registration lives in client/custom/target.lua; for qb-target or another target, change the addModel call there and keep the game:join(m) line it runs.
Notifications and the HUD#
Every message — not enough money, partner left, a new server record — goes through one function in client/custom/main.lua. It uses qs-interface when it is running and ox_lib otherwise. To use your own notification resource, replace its body:
-- client/custom/main.lua
function Notification(msg, type) -- type: 'info', 'success' or 'error'
exports['okokNotify']:Alert('Guitar Pro', msg, 4000, type)
endWhile a player is at a machine the game's HUD and radar are hidden, and qs-interface's HUD with them; both come back when they leave. For another HUD, add its hide and show calls to SetCustomHud(visible) in the same file. PlayGameSound and DrawText3D live there too.
Weather and Time Sync#
The cinematic stage forces night for the performer so the lights read properly. A weather script that keeps pushing the server's time would fight that, so Guitar Pro pauses the known ones for that player while they perform and hands control back afterwards: Renewed-Weathersync, qb-weathersync, vSync, av_weather and cd_easytime. Only the performer's screen changes; the rest of the server keeps its weather and time.
For another weather script, add its pause and resume events to applyStageTime in client/custom/main.lua. To leave the time alone entirely, set Config.Stage.forceNight = false.
qs-arcades#
qs-arcades places Guitar Pro cabinets inside its own arcades as managed machines. They behave like any other cabinet — two pads, every mode, scores and progression — with three differences:
They are free to play here; the arcade charges for entry, if it charges at all.
Each player only sees the cabinets of the arcade they are in. Every arcade shares one interior, so two different arcades can have a cabinet at the same coordinates.
They are never written to the database and never appear in the creator. qs-arcades recreates them on every start, and they disappear when it stops.
Nothing needs configuring: start qs-arcades after Guitar Pro. The exports it uses are listed in Commands and Exports.
Languages#
41 translations ship in locales/: ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi and zh. Pick one with Config.Locale.
Locale files are read when the resource starts, so editing one needs a restart and nothing else. To add a language, copy locales/en.json, translate the values and name the file after its code. Any key missing from a translation falls back to English, with one console warning naming it.
Two things beyond plain interface text are translatable:
Venue names go under
stages.<id>and override thelabelinConfig.Stage.stages.Setlist names are
select.tier_1toselect.tier_7. The list is read upwards until a number is missing, so addingtier_8and beyond works with no code change, up to 60. With more sets than names, the names repeat and are numbered — OPENING LICKS 2 and so on.



