Overview
Access viaJobs (server-side only).
Multiple Jobs
Characters can hold multiple jobs at once (Jobs array)
Grade System
Each job has workplaces and grades with levels
On-Duty Status
Clock in/out system per job
Permissions
Job-based access control via Permissions sub-component
Job Data Structure
Characters store jobs as an array:Job Management
Get
Get a job definition by its ID.string
required
Job identifier (e.g., ‘police’, ‘ems’, ‘mechanic’)
table|nil
Job definition data or
nil if job doesn’t existGiveJob
Assign a job to a character. Characters can have multiple jobs.number
required
Character SID
string
required
Job identifier (e.g., ‘police’, ‘ems’, ‘mechanic’)
string
Workplace identifier within the job
string
Grade/rank identifier within the workplace
RemoveJob
Remove a job from a character.number
required
Character SID
string
required
Job identifier to remove
Permissions
TheJobs.Permissions sub-component handles job-based access checks.
HasJob
Check if a player has a specific job.number
required
Player server source
string
required
Job identifier to check. Can pass multiple job IDs as additional arguments.
boolean
true if the player has the specified jobGetJobs
Get all jobs for a player.number
required
Player server source
table
Array of job objects the player has
Duty System
TheJobs.Duty sub-component manages on-duty/off-duty status.
On
Clock a player in (set on-duty) for a specific job.number
required
Player server source
string
required
Job identifier to clock in for
Off
Clock a player out (set off-duty) for a specific job.number
required
Player server source
string
required
Job identifier to clock out of
GetDutyData
Get duty information for a specific job, including all on-duty players.string
required
Job identifier
table
Duty data including
DutyPlayers arrayAccessing Character Jobs Directly
You can also access a character’s jobs through the DataStore:While you can read
char:GetData('Jobs') directly, always use Jobs:GiveJob() and Jobs:RemoveJob() to modify jobs, and Jobs.Permissions:HasJob() for checking job access. Do NOT use char:SetData('Jobs', ...) directly.Best Practices
Use Permissions for Access Control
Use Permissions for Access Control
Always use
Jobs.Permissions:HasJob() for access checks:Clean Up on Clock Out
Clean Up on Clock Out
Check Multiple Jobs
Check Multiple Jobs
Next Steps
Jobs - Events
Job-related events
Jobs - Configuration
Job definitions and setup
Characters API
Character management
Job System Guide
Complete job system guide