Before You Begin#
Before installing Lifeguard Job, make sure your server meets the minimum requirements. Three things are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
oxmysql | Required | Database access. The tables create themselves. |
ox_lib | Required | Server callbacks, and the progress bars when qs-interface is not running. |
Framework | Required | ESX, QBCore or Qbox — auto-detected. The job, the pay and the levels all go through it. |
Clothing | Optional |
|
ox_target | Optional | Only with |
Vehicle keys | Optional | Hands the lifeguard the keys of the ATV or jetski they sign out. Eleven lock scripts are supported. |
Fuel | Optional | Fills the tank on sign-out when |
qs-interface · qs-textui | Optional | Quasar's progress bars and on-screen prompts, used automatically when they are running. |
qs-job-management | Optional | When running, call-out pay goes through Job Management + Multijob instead of straight into the player's cash. |
Everything framework- or third-party-specific sits behind a small, unencrypted bridge file, and the resource picks the right one by looking at what is already running:
Layer | Detection |
|---|---|
Framework |
|
Keys | qs-vehiclekeys · qb-vehiclekeys · qbx_vehiclekeys · wasabi_carlock · vehicles_keys · ti_vehicleKeys · xd_locksystem · mono_carkeys · glfp10_carkeys · fivecode_carkeys · F_RealCarKeysSystem |
Progress bars | qs-interface → ox_lib |
Prompts | ox_target (when enabled) → qs-textui → native 3D text |
Pay | qs-job-management → the framework's cash |
Every optional integration degrades silently. If a lock script is missing the keys step does nothing, and without a target the prompts are drawn on screen instead. Integrations has the details and how to add your own.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Lifeguard Job#
After purchasing Lifeguard Job, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Lifeguard Job.
After extracting the download, you should have the following folder:
qs-lifeguard/
├── config/ -- what you may edit
├── client/framework/ -- framework bridges (editable)
├── client/vehiclekeys/ -- lock-script bridges (editable)
├── server/framework/ -- framework bridges (editable)
├── locales/ -- 18 languages
├── data/stats.json -- the statistics board
├── web/ -- the interface, ready to use
└── qs-Lifeguard.sql -- optional: the same schema, by handInstalling the Resource#
Move the qs-lifeguard folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-lifeguard/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Lifeguard Job:
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Optional: target, keys, fuel, prompts, progress bars, job pay
ensure ox_target
ensure qs-vehiclekeys
ensure LegacyFuel
ensure qs-textui
ensure qs-interface
ensure qs-job-management
ensure qs-lifeguardThe loading order matters. Detection only sees resources that are already started, so a framework or a lock script that starts after Lifeguard Job is not found.
The Database#
There is no SQL file you have to import. Lifeguard Job creates what it needs on first start:
Table | Holds |
|---|---|
| Each lifeguard's level and experience — keyed by the ESX identifier, or by the citizen id on QBCore and Qbox, so every character levels on its own. |
| Every setting saved from the settings panel, one row per setting. Deleting a row gives that setting back to the config file. |
| ESX only. The |
The statistics board is kept in data/stats.json inside the resource, not in the database, so the server must be allowed to write to that folder.
qs-Lifeguard.sqldoes exactly the same work by hand, for preparing a database outside the server. Every statement in it isIF NOT EXISTSorINSERT IGNORE, so importing it on top of a running install changes nothing.
Registering the Job#
Out of the box only players holding the lifeguard job can work the beach. ESX keeps its jobs in the database, so it is done for you; QBCore and Qbox keep them in a file, so add it there once:
Nothing to do. The job and its grade are written to jobs and job_grades on the first start. Restart the server once afterwards so ESX loads the new job, then hand it out as usual:
/setjob <id> lifeguard 0Add the job to qb-core/shared/jobs.lua, restart, then /setjob <id> lifeguard 0:
['lifeguard'] = {
label = 'Lifeguard',
defaultDuty = true,
offDutyPay = false,
grades = {
['0'] = { name = 'Lifeguard', payment = 10 },
},
},Add the job to qbx_core/shared/jobs.lua, restart, then /setjob <id> lifeguard 0:
['lifeguard'] = {
label = 'Lifeguard',
defaultDuty = true,
offDutyPay = false,
grades = {
[0] = { name = 'Lifeguard', payment = 10 },
},
},Rather let anybody work as a lifeguard? Set Config.RequireJob = false. Using a job with a different name, or several? List them in Config.LifeguardJob:
Config.RequireJob = true
Config.LifeguardJob = { ['lifeguard'] = true, ['beachpatrol'] = true }Claiming Admin Access#
The settings panel (/lifeguardadmin) is guarded by the ACE command.lifeguard, checked on the server when the panel opens and again on every button inside it. Nearly every server.cfg already grants the whole command space to admins, so an existing admin usually has access with nothing to configure:
# Already in most configs — grants every command, this one included
add_ace group.admin command allow
# Or grant only the lifeguard panel
add_ace group.admin command.lifeguard allow
add_principal identifier.fivem:1234567 group.adminThe ACE and the command name are both in Config.AdminPanel, where the panel can also be switched off entirely.
Configuring the Resource#
Everything lives in config/ and locales/, and almost all of it can also be changed in game from the settings panel:
File | Contents |
|---|---|
| Who may work, target or prompts, language, currency, the uniform switch, the three stations, the captain, blips and marker, vehicles and their pay, fuel, the patrol routes, the experience curve, the settings panel, debug and Discord logs. |
| Every call-out — tier, level, route, pay, experience, time limit and where it happens — plus the chance of a call-out per level, the tier weights and the three cooperative rescues. |
| The uniform, for male and female characters. |
| Every line of text on screen, including the station names and the job guide. |
| The settings panel's help text, generated from the comments in the two config files. Not meant to be edited. |
The values worth reviewing first:
Config.Language = 'en' -- en · es · pt · fr · de · it · nl · ro · da · hu · tr · ru · bg · ar · hi · ja · ko · zh-CN
Config.RequireJob = true -- false lets anyone work as a lifeguard
Config.Target = false -- true = ox_target, false = walk up and press E
Config.Clothing = true -- put the uniform on when a shift starts
Config.CurrencyPosition = 'prefix' -- $500, or 'suffix' for 500 $
Config.Fuel = false -- true fills the tank on sign-out
Config.FuelExport = exports['LegacyFuel']
Config.AdminPanel = {
Enabled = true,
Ace = 'command.lifeguard',
ConfigCommand = 'lifeguardadmin',
}A setting saved from the panel wins over the file. The config files stay the defaults; anything changed in game is stored in
qs_lifeguard_configand laid on top at every start. If you editconfig.luaand nothing changes, that setting was probably saved from the panel — revert it there and the file's value comes back.
Verifying the Installation#
After completing the installation, restart your server and watch the console. A clean start prints nothing in red; with Config.Debug = true the script explains each step it takes, in the server console and in the client console (F8). Then join with the job and work through the first loop:
Visit a station
Three Lifeguard Station blips sit along Vespucci Beach. Walk up to the captain under the blue marker and press
E: the camera cuts to them and the station panel opens.Start a patrol
Pick the Land patrol, the Blazer ATV, and press Start Mission. You are on duty, in uniform, in the seat — and the first checkpoint is on your map.
Answer a call-out
Ride from checkpoint to checkpoint. At level 1 each one has a 40% chance of raising a call-out; finish it and the pay and experience arrive straight away.
Open the settings panel
/lifeguardadminopens every setting of the job. From there, Usage covers everything a lifeguard and an admin can do.
Settings saved from the panel take effect on the next restart of the resource, not straight away — the panel keeps saying so until you do. Restarting it ends every shift in progress, so pick a quiet moment.



