Version 1.55.0
Highlights
- Added shared hostage and gag interactions with configurable job/civilian access, items, controls and supported voice restrictions.
- Added directional invoice visibility between authorized jobs and a fleet vehicle-fines view in garages and boss menus.
- Improved Dispatch incident routing so receiving departments can share one incident across their responsible centers.
Notable Changes
- Added live primary-job-group selection in the job configurator while preserving existing file mappings on upgrade.
- Added an optional direct inventory search interface with separate search and confiscation permissions.
- Added an optional job/group allowlist for opening Sky's radial menu and a setting for preinstalling the Dispatch phone app.
- Fixed an issue where pending Creator jobs could fail to activate after a restart or lose their saved resource labels.
- Fixed an issue where removing one combined-job link could remove the surviving registration or break off-duty group access.
- Fixed an issue where editing permissions or payroll required contiguous rank numbers.
- Fixed an issue where older locale files could prevent the role-permissions screen from opening.
- Fixed an issue where LB Phone restarts or invalid saved app settings could leave the Dispatch app unavailable.
- Fixed an issue where station announcement text containing encoded spaces or special characters could fail.
Other Changes
- Improved job-configuration navigation, search, location placement and Farming field explanations.
- Fixed an issue where valid delivery-pallet replies were discarded while a newer refresh was pending.
- Fixed an issue where shared target actions could use stale job, duty or selected-player context.
- Fixed an issue where placed equipment owners could lose their existing props after a restart.
- Fixed an issue where RoadPad apps were not generated at startup or custom Dispatch center names were replaced.
- Added optional presentation of received Sky invoices in compatible Sky Phone finance screens.
- Improved search and GPS notifications so they use the selected language.
Changed Files
sky_jobs_base/INSTALL.mdsky_jobs_base/config/config.luasky_jobs_base/config/inventory/README.mdsky_jobs_base/config/inventory/gag.pngsky_jobs_base/config/inventory/items_ox.luasky_jobs_base/config/locales/*sky_jobs_base/fxmanifest.luasky_jobs_base/import.sqlsky_jobs_base/source/*— delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.54.11.55.0
Simplified update
Update sky_jobs_base safely
Read the complete update instructions in one continuous guide.
1. Back up and stop
Database prerequisite for the shared configurator: when Jobs Base uses Config.UseIngameConfigurator = true (the supplied default), this upgrade's primary-group migration requires oxmysql transactions. Install oxmysql for your existing FiveM database and start it before Base. In sky_base/config/config.lua, find the existing sql = "auto" / sql = "mysql-async" entry and set sql = "oxmysql", preserving the same database connection and all data. Then follow the Base and Jobs Base update guides. This requirement applies before the first updated start; disabling automatic schema creation does not replace the transaction requirement.
These steps update sky_jobs_base from 1.54.1 to 1.55.0. If your installed version is older, complete its intervening update guides first.
- Download and extract the new resource. Back up the installed resource, customized configuration and translations, and the FiveM database.
- Finish active interactions and stop the server for the coordinated update. Keep the backup until the checks below pass.
2. Install the matching files
- Delete the installed
sky_jobs_base/source/folder and insert the complete newsource/folder, including the interface files. - Replace
fxmanifest.luaandINSTALL.mdfrom the same download. - Replace the complete
config/locales/folder. Copy only your customized wording into the matching new entries, keeping every supplied key and language file. - Follow the remaining file and configuration actions below before restarting.
Replace the supplied import.sql and refresh the complete config/inventory/ folder, including items_ox.lua and gag.png. Keep your customized config/config.lua and apply the exact additions below instead of overwriting it with defaults. Preserve saved jobs, locations, salary/permission assignments, invoices and Dispatch records.
3. Keep settings and configure the update
Normal setup — the ingame configurator is enabled. Keep Config.UseIngameConfigurator = true and your existing saved settings. Do not run /jobconfigimport or reset the settings for this update. After the first updated start, open /jobconfig → Jobs Base. Existing Config.PrimaryJobGroups file mappings are copied into saved settings once on upgrade when no saved mapping exists. Keep the old file mappings intact until this first start finishes; afterwards edit Jobs & Storage → Primary job groups and save to apply changes immediately. A later whole-file import replaces managed settings and is not a routine update step.
Hostage and Gag are new actions and both are enabled in the supplied defaults. Before allowing players to use the updated server, either keep each action and complete its setup, or disable it in Jobs Base → Interactions → Hostage / Gag during the first maintenance start. In file mode, set Config.Hostage.enabled = false and/or Config.Gag.enabled = false for actions you do not want. Civilian access keeps its existing master switch (supplied default: off); job permissions must still allow the action.
The following other additions keep existing behavior by default: Economy → Billing → Invoice visibility by job is empty; Dispatch & Tracking → Dispatch → Phone → Preinstalled phone app is on; Interactions → Player search → Search interface remains Sky interface; Tablet & Apps → Radial menu → Allowed jobs for radial is empty. Leave them unchanged unless choosing one of the optional features below.
Only when Config.UseIngameConfigurator = false: open sky_jobs_base/config/config.lua and keep all existing settings. Add these missing fields inside the existing blocks at the positions shown; do not create a second copy of a block:
- In
Config.Billing, immediately aftermaxAmount, addjobViewJobs = {},. - In
Config.Dispatch.phone, immediately afterenabled, adddefaultApp = true,. - In
Config.PlayerSearch, immediately afterenabled, addinventoryMode = "sky",. - In
Config.JobRadial, immediately afterenabled, addallowedJobs = {},. - In the existing
Config.JobPlayerInteractions.groups.policeand.crimetables, immediately afterheadBag, addhostage = true,andgag = true,. Keep your existing group names, duty requirements and other permissions. Add these permissions to additional custom groups only if those groups should use them. - In
Config.CivilianUse, immediately afterheadBag, addhostage = true,andgag = true,. Keep its existingenabledvalue; the supplied default remainsfalse. - Immediately before the existing
Config.LegRestraintsblock, insert both complete new blocks below. Their supplied defaults enable the feature for permitted users; set the relevantenabled = falseif you do not want it. KeepConfig.PrimaryJobGroupsin its existing place; with the configurator disabled it remains file-owned and changes require a restart.
Config.Hostage = {
enabled = true,
commands = { "takehostage", "th" },
maxDistance = 3.0,
allowKill = true,
releaseKey = "G",
killKey = "H",
allowedWeapons = {
"WEAPON_VINTAGEPISTOL", "WEAPON_SNSPISTOL", "WEAPON_PISTOL", "WEAPON_PISTOL_MK2",
"WEAPON_CERAMICPISTOL", "WEAPON_COMBATPISTOL", "WEAPON_HEAVYPISTOL", "WEAPON_PISTOL50", "WEAPON_REVOLVER"
}
}
Config.Gag = {
enabled = true,
item = "gag", -- Required when applying through inventory AND radial.
useItem = "both", -- "radial", "inventory", or "both"
consumeItem = true,
returnOnRemove = true,
requireRestrained = true,
allowSelfRemove = true,
maxDistance = 2.0,
mode = "soft", -- "soft" limits proximity; "hard" blocks outgoing voice, including radio/calls.
softRange = 1.0, -- Metres, 1.0 to 100.0; the player cannot change this range.
pmaMuffled = true, -- Optional muffling when pma native audio is enabled.
propModel = "prop_rolled_sock_01",
propOffset = { x = -0.02, y = 0.06, z = 0.0 },
propRotation = { x = 0.0, y = 90.0, z = 0.0 }
}
Optional — hostage and gag interactions: after the updated server starts, open Jobs Base → Interactions → Hostage / Gag. Choose commands, allowed pistols, release/kill controls and gag item/voice rules. Review Civilian use and each intended job's player-interaction permissions before allowing access. Hostage defaults are /takehostage and /th, release G, execution H, with a loaded allowed pistol; players retain existing personal FiveM key bindings. The default gag requires an already restrained target, consumes one gag, and returns it to the person removing it. Self-removal requires the person to be unrestrained. Soft locks local voice range to 1 metre by default while radio/calls remain usable; Hard blocks outgoing speech, including radio/calls. PMA muffling requires pma native audio. Keep your supported voice provider; do not enable a mode its provider cannot perform.
Optional — invoice visibility: in Jobs Base → Economy → Billing → Invoice visibility by job, add the viewer job and the jobs whose issued/received invoices it may view. Sharing is directional: for mutual visibility configure both directions. It grants viewing only; payment, issue and cancellation permissions remain separate. File mode uses Config.Billing.jobViewJobs = { police = { "sheriff" }, sheriff = { "police" } } with your real job names.
Optional — inventory search interface: in Jobs Base → Interactions → Player search → Search interface, select Inventory system only when using a supported direct-search adapter (currently ox_inventory). Users require both search and confiscation access; the inventory keeps its own proximity/access and transfer rules. Other providers should keep Sky interface. File mode changes only Config.PlayerSearch.inventoryMode from "sky" to "inventory".
Optional — radial opening allowlist: select the intended jobs/groups in Tablet & Apps → Radial menu → Allowed jobs for radial. An empty list retains the previous action-based access. It controls opening Sky's own radial; direct action keybinds, target actions and external integrations retain their existing access checks. File mode uses, for example, Config.JobRadial.allowedJobs = { "police" }.
Optional — Dispatch phone installation: change Preinstalled phone app only if your phone supports the intended app-store behavior. Existing installations remain provider-controlled. Keep valid existing app identifier, route, icon and developer settings. Invalid empty values now use the supplied defaults and produce a warning, so repair the affected value in this same Phone screen rather than importing all settings.
4. Database, items and assets
The primary-group settings migration requires Base's sql = "oxmysql" whenever Config.UseIngameConfigurator = true. Complete the database prerequisite in Prepare before starting the updated libraries. If you deliberately keep Config.UseIngameConfigurator = false, that settings migration does not run; other installed features can still require oxmysql.
Keep Config.AutoExecuteQuery at its existing value in sky_jobs_base/config/config.lua. With true, startup adds primary_groups_migrated to the existing sky_jobs_configurator_settings table automatically and copies the legacy primary-group mapping once. With false, open the supplied sky_jobs_base/import.sql against the correct FiveM database before starting the resource. In its upgrade statements, find the following line and execute it only if that column does not already exist:
ALTER TABLE `sky_jobs_configurator_settings` ADD COLUMN `primary_groups_migrated` TINYINT(1) NOT NULL DEFAULT 0;
The supplied ADD COLUMN IF NOT EXISTS form is suitable for database versions that support it; on other MySQL versions check for the column first and run the statement above once. Do not delete the settings row, clear the migration flag afterwards, or replay historical seed data.
Required while Gag is enabled (the new supplied default): register the configured gag item and its icon before reopening the server. If you do not want this feature, disable Jobs Base → Interactions → Gag → Enabled during the first maintenance start before admitting players; file mode uses Config.Gag.enabled = false. Register the configured gag item in your inventory. For ox_inventory, open ox_inventory/data/items.lua, add the gag entry from the new sky_jobs_base/config/inventory/items_ox.lua inside its existing item table, and copy gag.png into ox_inventory/web/images/. Keep consume = 0; Jobs Base handles consumption and return. For other inventories use their normal item registration with the same configured item name and supplied icon. Do not register a second usable-item callback. If you explicitly disable Gag, no gag item setup is required. Keeping the new default enabled requires this item setup; it is not automatically installed in an external inventory.
No other new item, image registration or native model is required. Preserve invoices, balances, jobs, grades and existing items. Crime's Camper migration has its own separate instructions; updating Jobs Base alone does not perform that migration.
5. Start and check the result
Start the framework, database connector, inventory and configured providers first, then sky_base 1.52.0, then sky_jobs_base 1.55.0 and wait for initialization. Start the installed job resources afterwards; keep Creator after both libraries. Reconnect clients after the full restart. Complete optional menu configuration from the previous section now.
Open /jobconfig, confirm existing jobs, primary-group choices and saved locations remain present, then open a normal employee's permissions/payroll screen, including jobs with non-contiguous grades. Check that a combined job keeps its surviving registration when one resource link is removed and that off-duty access follows the intended group.
With authorized users, check invoice directions, shared viewing and any fleet Vehicle fines screen in the garage or boss menu. Fleet fines remain scoped to the actual recipient job and need the matching Police speed-camera feature. With Dispatch enabled, check an incident routed to departments using different centers, existing custom center names, the phone app after a planned phone restart, and a station announcement containing spaces/special characters. Optional RoadPad apps should be present after startup.
If you keep the new Hostage/Gag defaults enabled, or select provider-owned searches, test those with two consenting test players and the configured items, permissions and voice provider. Confirm release/removal restores normal controls and voice. These are the final operator checks after installing your packages.