Configuration
Configuration
All settings live in config.lua. Edit, save, restart the resource. Everything below is documented in load order.
Terminal
Config.TerminalProp = 'prop_cs_tablet'
Config.TerminalRange = 2.0
| Key | Default | What it does |
|---|---|---|
Config.TerminalProp |
'prop_cs_tablet' |
The prop attached to the merchant's right hand when the tablet is active. Swap to any other handheld prop hash. |
Config.TerminalRange |
2.0 |
Meters within which a customer's lb-phone app will discover this merchant's terminal. |
Framework
Config.Framework = 'auto'
| Value | Effect |
|---|---|
'auto' |
Detect at boot. Priority: qbx_core → qb-core → es_extended. |
'qbx' |
Force Qbox. Logs a warning + falls back to auto if qbx_core isn't started. |
'qb' |
Force QB-Core. Same fallback rule. |
'esx' |
Force ESX Legacy. Same fallback rule. |
Boot log shows which one was picked:
[suty-billing] Bridge initialized — framework: qbx (auto)
[suty-billing] Bridge initialized — framework: qbx (manual)
AllowedJobs
Config.AllowedJobs = 'all'
Config.ExcludeJobs = {
'unemployed',
}
Two modes:
Config.AllowedJobs value |
Behavior |
|---|---|
'all' |
Every job registered in the active framework is allowed, minus anything in Config.ExcludeJobs. New jobs you add to your framework later work automatically with no config change here. |
{ 'police', 'mechanic', ... } |
Legacy whitelist — only jobs in the array are allowed. |
Source of "all" per framework:
- QBX →
exports.qbx_core:GetJobs() - QB-Core →
QBCore.Shared.Jobs - ESX →
ESX.GetJobs()(ESX Legacy 1.10+)
Switching to a manual whitelist
Comment out the 'all' line and uncomment the manual array template:
Config.AllowedJobs = {
'police', 'ambulance', 'mechanic', 'pizzeria', 'taco', 'bahamas',
-- … etc
}
TrustPlayerJob
Config.TrustPlayerJob = false
Set this to true if your jobs are not registered in the framework's static jobs table.
By default, when Config.AllowedJobs = 'all', suty-tappay validates the player's job against the framework registry (exports.qbx_core:GetJobs() / QBCore.Shared.Jobs / ESX.GetJobs()). On stock QBX/QB/ESX where jobs live in shared/jobs.lua or equivalent, leave this false — the registry check filters out junk jobs like unemployed for free.
If you manage jobs dynamically through any of these systems, set it to true:
origen_masterjob(businesses in SQL)qb-management/qb-bossmenuwith dynamic creationesx_societywith DB-driven society list- Any custom SQL-backed job system
When true, suty-tappay trusts whatever PlayerJob.name the framework reports for the player. Config.ExcludeJobs still applies — anything you list there is still blocked.
| Setup | Config.TrustPlayerJob |
|---|---|
Vanilla QBX / QB-Core / ESX with shared/jobs.lua |
false |
origen_masterjob or other SQL-backed dynamic jobs |
true |
The job check is a UX gate, not a security boundary — the actual bank charge is server-validated through the framework's
removeBank/ equivalent and will still fail if the player doesn't really have a job or funds.
Payment caps
Config.MinAmount = 1
Config.MaxAmount = 100000
Customer attempts outside this range are rejected by the server.
Notifications (Spanish)
Config.Notifications = {
terminalActive = 'Terminal de pago activa',
terminalClosed = 'Terminal de pago cerrada',
paymentSent = 'Pago de $%s enviado exitosamente',
paymentReceived = 'Pago de $%s recibido',
noTerminalNearby = 'No hay terminal de pago cerca',
insufficientFunds = 'Fondos insuficientes',
invalidAmount = 'Monto invalido',
}
Translate the strings as needed. The %s in paymentSent and paymentReceived is required — it's where the amount is interpolated.
