Suty
Tap Pay

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:

  • QBXexports.qbx_core:GetJobs()
  • QB-CoreQBCore.Shared.Jobs
  • ESXESX.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-bossmenu with dynamic creation
  • esx_society with 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.