Configuration
Edit the existing fields in config.lua, then apply them during your normal resource maintenance process. The examples below are settings from the inspected implementation, not replacements for the entire file.
App identity
Config.App = {
id = 'nurio_multijob',
name = 'Employment',
tagline = 'Los Santos Labor Office',
description = 'Clock in, track pay, and run your crew',
developer = 'Nurio',
defaultApp = true,
size = 28000,
}Name, tagline, description and developer are display text. Keep id unique across LB Phone custom apps. Changing a resource folder name, app ID and SQL table names are separate changes; a branding edit should not silently rename persistent tables.
Job rules
| Setting | Supplied value | Purpose |
|---|---|---|
OffDutyJob | { name = 'unemployed', grade = 0 } | Framework job used when clocked out |
MaxJobs | 7 | Saved-job limit for new additions |
SwitchCooldown | 8 | Seconds between successful clock changes |
HireDistance | 12.0 | Maximum nearby-hiring distance in metres |
RefreshMs | 30000 | App refresh interval in milliseconds |
MaxTransaction | 500000 | Maximum amount in one society transfer |
DepositAccount | 'bank' | Character account used for society deposits |
WithdrawAccount | 'bank' | Character account receiving society withdrawals |
Blacklist, DutyLock and Locked are maps of exact framework job names:
Config.Blacklist = { prisoner = true }
Config.DutyLock = {}
Config.Locked = {}- Blacklist: excludes jobs from saving, display and taking them through the app. The off-duty job is also treated as excluded from saved employment.
- DutyLock: prevents a player from clocking out or switching away while the matching job is active; it also prevents quitting that saved job.
- Locked: prevents quitting a saved job without imposing the same active-duty switch restriction.
An empty map adds no restrictions of that type.
Public openings and tile colors
The supplied openings list is empty. Add an existing framework job and grade to expose it publicly:
Config.Openings = {
{ job = 'miner', grade = 0,
description = 'Mine materials and sell what you pull out of the ground.' },
}This example requires a real miner job and grade 0 in your framework. It does not create those definitions.
Config.JobLook optionally overrides tile codes and hues:
Config.JobLook = {
police = { code = 'PD', hue = 250 },
}Jobs without an override receive a stable color derived from their name.
Paycheck modes
Config.Paycheck = {
mode = 'track',
interval = 15 * 60,
account = 'bank',
offDutyAmount = 0,
fromSociety = false,
}| Mode | Money movement | Display/statistics |
|---|---|---|
track | Does not pay money | Records configured salary cycles and updates the pay display |
pay | This resource pays the salary | Records the salary it processes |
off | No payments from this loop | No paycheck ring or earnings updates from this loop |
interval is in seconds and is clamped to at least 30 seconds. Match it to your framework cycle in track mode; ESX paycheck intervals commonly use milliseconds and QB's timeout uses minutes, so convert the configured value rather than copying it blindly.
In pay mode, disable the other paycheck mechanism for the same salary before enabling this one. account selects the payout account. offDutyAmount = 0 is the supplied off-duty amount; nil uses the configured off-duty job grade's salary.
fromSociety applies only in pay mode. When enabled for an eligible working job, the society account must exist and cover the wage; otherwise that wage cycle is skipped and the player is notified. In track mode it does not debit the society account.
Bridge selection
Config.bridge = {
framework = 'auto',
notify = 'auto',
society = 'auto',
customNotify = { event = 'nurio-multijob:customNotify' },
}Framework IDs are esx, qb and qbx. Society IDs are auto, esx, qb, management, renewed, okok, custom and off. See Integrations for resource names, detection order and custom adapters.
