Version 1.15.0
server.cfg (see sky_base 1.14.0 changelog), otherwise /setboss and every creator command will deny everyone except the server console.Highlights
- New admin permission system —
/setbossno longer usesSky.FW.IsAdmin; it now resolves via FiveM ACE (sky_jobs_base.setboss) auto-wired fromConfig.CommandPermissionsat server start.Sky_Jobs.RegisterCreatoraccepts a newopts.permissionparameter (e.g."sky_policejob.stationcreator") that the creator command and theopenCreatorByJobNUI path consume directly; the legacypermissionResource/permissionCommandpair is preserved for backward compatibility. Fixes admin commands silently denying admins on QBox afterqbx_core:HasPermissionwas deprecated in qbx_core v1.8.0. - Live colleague map blips for every Sky job — the world-map blip system that shows on-duty colleagues moved from
sky_policejobintosky_jobs_baseunder the neutral nameConfig.ColleagueMapBlips(wasConfig.OfficerMapBlips). The implementation was already job-agnostic; it now ships in the right resource so every Sky job (ambulance, mechanic, custom jobs, …) gets the feature without copy-pasting code. Blips now render whenever the player is on-duty — visible on the minimap during normal gameplay, on the pause-menu map, and on the tablet map. Server owners who prefer a clean minimap can opt out via the newConfig.ColleagueMapBlips.showOnMinimap = false(blips then stay on the big maps only). The server pushes a fresh per-job snapshot every ~1s instead of each client polling every 3.5s — fixes the customer-reported "blip at the place where the person was but isn't anymore" lag for fast-moving colleagues out of streaming range. - Added
Sky_Jobs.OpenCreatorByJobWithoutPermission(source, jobKey)server export (and matchingexports.sky_jobs_base:openCreatorByJobWithoutPermission) — opens the station creator for a player by job key without running the permission check. Intended for admin tooling and trusted integrations that have already authorized the caller upstream. - Interaction points now respect a
forceMarkerInteractionflag on the creator entry definition — that single interaction always uses marker + help notification, even if a target backend (ox_target/qb-target) is active on the server. Pairs with the matching sky_base 1.14.0 feature.
Notable Changes
- Fixed public interactions being unreachable for players whose current job didn't match the creator entry's
jobKey. The 1.14.0 job-locking security check was too strict and also blocked entries explicitly markedpublic = true; those are now exempt while non-public entries stay job-locked as before. /dutytest(debug command) now resolves viaConfig.CommandPermissions.dutytestinstead of a hardcodedgroup.adminACE lookup. Server owners can broaden access (e.g. addsupporter) or restrict it via the same table as every other admin command.- Server-side map broadcast now routes name and grade lookups through
Sky_Jobs.PlayerCacheinstead ofSky.FW.*— silences the per-second debug spam (Sky.FW.GetName(N),Sky.FW.GetJobData(N, grade), …) that flooded the console on servers withSky.Config.debug = true. No behaviour change. - Wholesale shop purchases now accept free items (price
0) — parity with the per-job shop change shipped in 1.12.0. - Tablet Boss Menu and Tablet Chat views: fixed content overflow and inconsistent scrolling on long member/message lists.
- Tablet Map app is now responsive — layout adapts cleanly to different tablet aspect ratios, the marker list pane resizes properly on narrow widths, and the Home view exposes the Map app at the correct size for tablets running in alternate UI scales.
- Fixed panic / ping alerts being delivered to players of unrelated jobs. When a channel's
allowedJobsfilter was left empty, the system previously allowed any on-duty player to receive the alert; it now restricts delivery to players whose current job is a registered Sky job (or a linked off-duty variant). Setups that customizedConfig.Panic.allowedJobs/Config.Ping.allowedJobsare unaffected. - New
Sky_Jobs.IsJobRelated(jobKey)server helper +sky_jobs_base:isJobRelatedcallback for integrators that need to check whether a job is registered with Sky_Jobs (covers both on-duty and linked off-duty job keys). - Server console now prints a clearer info message when the FiveManage API key is missing, instead of a silent fallback.
Other Changes
- Added Swedish (
se) translation.
- Download sky_jobs_base from the CFX Portal.
- Create a backup.
- Replace the
/sourcefolder. - Replace the
/config/localesfolder (newse.lua). - Required — update sky_base to 1.14.0 or newer first, and add the three permission bootstrap ACEs to your
server.cfg:
add_ace resource.sky_base command.add_ace allow
add_ace resource.sky_base command.add_principal allow
add_ace resource.sky_base command.remove_principal allow
Without these, /setboss and every creator command will deny everyone except the server console.
6. The new Config.CommandPermissions block in config/config.lua controls who can use /setboss and /dutytest:
Config.CommandPermissions = {
-- /setboss <job> <grade> - Set the boss grade for a job
setboss = { "god", "superadmin", "admin" },
-- /dutytest [playerId] [on|off] - Debug command to force a duty state on a player
dutytest = { "god", "superadmin", "admin" },
}
Adjust the allowed groups if needed — defaults match the previous behaviour.
7. The new Config.ColleagueMapBlips block in config/config.lua controls the colleague map blip system that previously lived in sky_policejob as Config.OfficerMapBlips:
Config.ColleagueMapBlips = {
enabled = true,
showSelf = true,
showOnMinimap = true, -- false = blips only on the big map (pause / tablet), hidden from minimap
updateIntervalMs = 500,
display = 4,
shortRange = false,
scale = 0.85,
color = 3,
colorLights = 3,
sprites = { foot = 1, car = 225, boat = 427, heli = 64, car_lights = 56, boat_lights = 427, heli_lights = 43 }
}
If you had customized Config.OfficerMapBlips in sky_policejob/config/config.lua, copy those values here and remove the old block from the police config (it is no longer read). refreshIntervalMs is no longer needed — the server now pushes positions automatically every ~1s.
8. Optional — third-party scripts calling Sky_Jobs.RegisterCreator(...) should migrate from the legacy permissionResource / permissionCommand pair to the new unified permission field:
Sky_Jobs.RegisterCreator("mycreator", "myjob", {
title = "My Creator",
- permissionResource = GetCurrentResourceName(),
- permissionCommand = "mycreator",
+ permission = "myresource.mycreator",
})
The legacy pair still works (no immediate breaking change for 3rd-party scripts).