Browse docs

Changelog

Full change history for sky_jobs_base.
Before updating, make sure sky_base is up to date.
Latest

Version 1.21.0

Highlights

  • rcore_clothing wardrobe / job-changing-room backend — the configurable wardrobe (introduced in 1.20.0) now supports rcore_clothing. It is picked up automatically by Config.Cloakroom.backend = "auto", or you can pin it with "rcore". A clear notification is shown if rcore_clothing is selected but not running.
  • Job Configurator enhancements — added an Instant Tuning settings page (Behavior, Marker, Blip, and Locations tabs) with current-position capture and teleport support, clearer Tuning Prices inputs (values rounded to two decimals with a % / $ unit suffix so it is obvious whether a cost is percentage- or money-based), and a transport-mode selector (e.g. Engine Hoist) for Carry Items.

Notable Changes

  • Player names in duty / identity displays now prefer the framework RP / character name, falling back to the Steam/FiveM name only when no character name is available.
  • Improved job & duty state synchronization — client job/duty state is re-evaluated more reliably on load and when jobs are registered, ESX on-duty / off-duty job aliases stay consistent across related job entries, and jobs now fully refresh after creator location changes (no more stale job states).
  • CCTV camera app access is now strictly per-job — jobs sharing a job group (e.g. FIB / LAPD) no longer automatically inherit another job's camera network.
  • Added configurable per-job bodycam visibility via the new optional bodycamViewJobs setting.
  • Added a client-side event that fires when the helicopter camera is entered or exited, so other scripts can react (e.g. toggle HUD elements).
  • Fixed job identification for jobs created through the creator.

Other Changes

  • Fixed bodycam saves occasionally getting stuck on "Saving", and item-gated bodycams appearing active without a recording buffer.
  • Fixed creator interaction labels falling back to raw point IDs; station-blip-only points no longer spawn interactions.
  • Fixed the "salary paid" entry showing a raw key instead of translated text in job logs.
  • The UI now waits for localization to finish loading before rendering, avoiding missing-text flashes on first load.
  • Added server-side duty diagnostics to help trace duty / multi-job conflicts in support cases.
  • Added Portuguese (pt) locale, and extended panic-button and Job Configurator localization across languages (cn, de, en, es, fi, fr, nl, pl, rs, ru, se).

Version 1.20.0

Highlights

  • In-game Job Configurator — a new /jobconfig admin command opens a unified in-game interface to create and manage jobs live: general settings, locations, interactions (markers, blips, peds), vehicles, shops, props, features, and per-job settings. Changes are stored in the database and applied without editing config files by hand. Access is controlled via the new jobconfig entry in Config.CommandPermissions.
  • Configurable wardrobe / cloakroom backend — the cloakroom now works with a wide range of clothing systems through Config.Cloakroom.backend. "auto" detects supported systems (qb-clothing, 17movement, qs-appearance, ak47-clothing, tgiann-clothing, nf-skin, bl-appearance, izzy-appearance, codem-appearance, hex-clothing, illenium-appearance, ESX skinchanger/esx_skin, and more), or you can pin a specific one. A custom hook lets you wire up any other clothing resource. (Supersedes the ESX-only wardrobe from 1.18.0.)
  • Dynamic currency formatting — job payroll and finance amounts now use sky_base's configurable currency formatting, and payouts can target a chosen account via Config.Salary.accountType ("money" / "bank") or a custom sky_base currency via Config.Salary.currency. Requires the matching sky_base release.

Notable Changes

  • Added a global duty toggle Config.DutySystem — set to false to make all job members always count as on duty.
  • Added Jobs Creator support for player duty and job changes — jobs managed through an external Jobs Creator are now recognized for duty state and job switching.
  • The panic feature can now be restricted to specific jobs via Config.Panic.allowedJobs (e.g. police, ambulance); set it to nil to fall back to all registered job-related jobs.
  • Limited vehicle trunk props — job vehicles can carry a configured, limited set of placeable props (e.g. cones, barriers) via per-vehicle props / propCounts in Config.JobGarage.
  • Tablet apps are now configurable per app — hide an app by setting it to false, or use a table (e.g. cctv = { enabled = true, isNew = true }) to show a "new" badge. Tablet apps can also be opened directly from notifications.
  • Added comprehensive validation and logging to job finance operations.
  • Interaction points now support a configurable marker size (per-point markerSize) and an optional per-point interaction distance (e.g. on the duty terminal).
  • Tablet gallery images can now be zoomed with dedicated zoom controls.
  • ox_target actions now support entity-type filtering for more precise targeting.

Other Changes

  • Fixed bodycam saving occasionally getting stuck.
  • Fixed free (0-cost) garage vehicle purchases.
  • Smoother card-sliding UX on the duty terminal.
  • Expanded and updated job localization strings across multiple languages (cn, de, en, es, fi, fr, nl, pl, rs, ru, se).

Version 1.19.0

Highlights

  • Configurable garage behavior - server owners can now disable garage license plate changes globally via Config.JobGarage.allowPlateChange, and optionally warp players directly into spawned garage vehicles with Config.JobGarage.warpIntoVehicle.
  • Panic button in the job radial menu - the panic alert can now be exposed as a radial action with Config.Panic.useRadial, while Config.Panic.useKeybind lets you disable the default panic keybind registration if you want players to trigger panic only through your preferred flow.

Notable Changes

  • Fixed tablet Map zone interactions so zone points and alert markers can be clicked reliably without the map drag handling intercepting the input.
  • Improved tablet Map layout sizing so the map and sidebar stay aligned on more tablet aspect ratios.
  • Fixed map exclusion-zone cleanup so player-owned or occupied vehicles are not removed just because they are inside a zone.
  • Corrected German locale text for the garage and plate-change flow.

Other Changes

  • No additional changes.

Version 1.18.0

Highlights

  • ARGB color hex support — theme color values now accept FiveM-style 8-char hex (FFRRGGBB); the alpha channel is stripped before parsing, so existing 6-char hex colors keep working unchanged. Applies to the tablet Boss Menu theme as well as the matching server-side color handling.

Notable Changes

  • Config.Nui.itemImageBase default reverted to the Sky-Systems CDN"https://cdn.sky-systems.net/items" is the default again (was nui://ox_inventory/web/images in 1.17.0). Set it explicitly if you prefer the ox_inventory path.
  • Wardrobe is now ESX-only — wardrobe creator interaction points are blocked on non-ESX frameworks with the new localized notification WardrobeUnsupportedFramework. Prevents partial wardrobe flows on unsupported setups.
  • /setboss argument hints — the /setboss command now declares optional job and grade parameters, so framework command-help displays the expected arguments.
  • Added graceful fallback handling for job-registry queries — integrations that look up registered jobs or per-job info before the registry is fully populated no longer error out.
  • Hardened duty-state lookups and made webhook key resolution nil-safe, preventing runtime errors with a partial Config.Webhooks setup.

Other Changes

  • Expanded job localization strings across 9 languages (cn, de, es, fi, fr, nl, pl, rs, ru) — new keys cover faction management (invites, role creation), vehicle garage (purchase, plate changes), cloakroom, interaction labels, and tablet features (CCTV, compass waypoints, station blips).
  • Refined Swedish (se) translations for improved clarity and consistency.

Version 1.17.0

Highlights

  • Management UI revamp — Dashboard, Finance, Members, Roles, Transactions, and Logs views have been redesigned with a more responsive layout, and the Tablet Boss Menu picks up the matching light theme. Role management is now fully flexible: create, reorder, and delete job grades from the UI, and item-based permissions can be assigned per role alongside the existing vehicle, app, and document permissions. ESX servers can now add new grades above the current highest grade — the previous "highest grade is read-only" limitation is gone.
  • Global salary toggle — new Config.Salary.enabled (default true) turns payroll on or off server-wide, and a new server export Sky_Jobs.SetJobSalaryEnabled(jobKey, false) lets you override it per registered job. When salary is disabled the management UI hides the related settings and the server throttles payout-counter writes to reduce database load.
  • Per-job society accounts — registered jobs can now point at a custom shared society account instead of the default society_<jobKey> convention, so multiple jobs can share a single society account (e.g. a city-services group sharing one balance across several sub-jobs).
  • Colleague map blips overhaul — colleague blips are now strictly pause-menu only and use server-snapshot coordinates (including vehicle type and heading) for every blip, instead of switching between live entity blips and stale coordinate blips. Single-instance tracking with explicit cleanup on duty end, pause-menu close, and resource stop. Fixes duplicate blips lingering on the map and the "blip stuck where the colleague used to be" lag for fast-moving colleagues out of streaming range. Configurable via Config.ColleagueMapBlips.pauseMenuSnapshotIntervalMs and pauseMenuRenderIntervalMs.
  • Direct duty status exports — new exports.sky_jobs_base:isPlayerOnDuty(source) (server) and exports.sky_jobs_base:isOnDuty() (client). Integrations can check on-duty state directly instead of reaching into the Sky_Jobs root table.

Notable Changes

  • Fixed setOfflineJob running both the QBCore and ESX update helpers on every non-Qbox framework, which spammed Table doesn't exist warnings in oxmysql logs whenever the wrong helper queried the missing framework table. The function now branches explicitly on Sky.Config.framework.
  • Fixed tablet prop cleanup deleting third-party prop_cs_tablet props (other phone or tablet resources) within ~1s of closing the Sky tablet. Cleanup is now restricted to the tablet prop sky_jobs_base actually spawned.
  • Fixed the tablet keeping NUI focus during its close animation — focus is now released as soon as the close animation starts, so chat and vehicle controls return immediately.
  • Standardized item image lookup — the legacy Config.Nui.useOxInventoryImages toggle was removed. The default Config.Nui.itemImageBase is now nui://ox_inventory/web/images; set it to "https://cdn.sky-systems.net/items" (or any other base path) if you want the Sky-Systems CDN icons or a custom source.
  • Removed the Billing Presets section from the management menu — the section is no longer part of the management flow.
  • Cloakroom outfit list now scrolls internally instead of growing the whole cloakroom view when many outfits are configured.

Other Changes

  • Internal: job grade calculation was consolidated through the shared Job.GetHighestGrade helper across the server and the role editor. Behaviour change is limited to the next-grade default being more reliable when the job currently has no grades.

Version 1.16.0

Highlights

  • Wardrobe outfits can now be restricted by role / job grade - outfit editors can define which grades may use an outfit. The cloakroom UI shows unavailable outfits as disabled, and the server enforces the restriction when an outfit is applied.
  • Mechanic carry props can now integrate with station storage - when sky_mechanicjob is running, supported carried props can be deposited into station storage from the storage interaction and withdrawn back into the carry system.
  • Added server exports AddStorageItem(...) and AddStorageItems(...) so trusted integrations can add one or many items directly to station storage while respecting storage capacity.

Notable Changes

  • CCTV tablet app access now works for every job in the same registered job group instead of only one exact job key.
  • Tablet map labels no longer clip in tight layouts.

Other Changes

  • Added Russian (ru) translation.
  • Enhanced tablet homescreen details

Version 1.15.0

Highlights

  • New admin permission system/setboss no longer uses Sky.FW.IsAdmin; it now resolves via FiveM ACE (sky_jobs_base.setboss) auto-wired from Config.CommandPermissions at server start. Sky_Jobs.RegisterCreator accepts a new opts.permission parameter (e.g. "sky_policejob.stationcreator") that the creator command and the openCreatorByJob NUI path consume directly; the legacy permissionResource / permissionCommand pair is preserved for backward compatibility. Fixes admin commands silently denying admins on QBox after qbx_core:HasPermission was 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_policejob into sky_jobs_base under the neutral name Config.ColleagueMapBlips (was Config.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 new Config.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 matching exports.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 forceMarkerInteraction flag 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 marked public = true; those are now exempt while non-public entries stay job-locked as before.
  • /dutytest (debug command) now resolves via Config.CommandPermissions.dutytest instead of a hardcoded group.admin ACE lookup. Server owners can broaden access (e.g. add supporter) 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.PlayerCache instead of Sky.FW.* — silences the per-second debug spam (Sky.FW.GetName(N), Sky.FW.GetJobData(N, grade), …) that flooded the console on servers with Sky.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 allowedJobs filter 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 customized Config.Panic.allowedJobs / Config.Ping.allowedJobs are unaffected.
  • New Sky_Jobs.IsJobRelated(jobKey) server helper + sky_jobs_base:isJobRelated callback 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.

Version 1.14.0

Highlights

  • Security fix: the server now enforces job ownership on every creator-interaction request (boss menu, wardrobe, storage, garage, …). Players whose current job doesn't match the station's assigned job can no longer reach those interactions.

Notable Changes

  • Garage: simplified the vehicle reclamation logic — reclamation now follows only the offline-and-unresolvable check introduced in 1.13.0, so vehicles no longer flip back to "stored" in additional edge cases.
  • A misconfigured pedHash in Config.Interactions now skips just that one NPC with a warning instead of aborting the rest of the interaction rebuild.
  • Boss menu / job-data lookups now handle unknown jobs or malformed grade tables gracefully instead of failing with a runtime error.

Other Changes

  • Tablet map dispatch details: action button labels now wrap inside their boxes so longer translations no longer overflow.

Version 1.13.0

Highlights

  • Added a new sky_jobs_base:creator:pedSpawned client event — consuming resources can react to creator NPC spawns through a single event handler instead of registering hooks per interaction.
  • Custom storage UI now accepts .webp background images alongside PNG/JPG.
  • CCTV tablet app is now only shown for police and ambulance jobs.

Notable Changes

  • Fixed garage vehicles flipping back to "stored" status when a player parked out and the vehicle briefly lost server scope. Reclaim now requires the owner to be offline AND the vehicle unresolvable for ~90 seconds before being marked stored, instead of triggering after a single 30 s tick.
  • Fixed Config.Interactions[*].scenario and onSpawn not re-applying when an existing NPC was reused on creator rebuild (job / duty change). Hooks now also run on reuse, not only on fresh spawns.
  • Fixed helicopter cam target lock not releasing in some cases.

Other Changes

  • No additional changes.

Version 1.12.0

Highlights

  • Job radial menu and target integration now work under both ox_target and qb-target — follows the new Config.target selector introduced in sky_base 1.11.0.
  • Added a tablet push-notifications API — external resources can push notifications onto the tablet home screen.
  • Free items (price 0) are now allowed in per-job shops and the wholesale shop. Negative prices are still rejected.
  • Trunk prop placement is now exposed as a reusable export with optional confirmation callback, so external resources can consume an item only after placement is confirmed.

Notable Changes

  • Fixed Config.Interactions[*].onSpawn callbacks not firing for interaction NPCs. The scenario option was unaffected. External resources that need spawn-time customization (outfits, props, weapons) should register hooks via the documented client-side API.
  • Fixed garage vehicle purchase confirmation modal showing English fallback text — added the missing confirmPurchaseTitle, Confirm, Cancel, Message, purchaseSuccessTitle, and Message keys to all 9 locales.
  • Locale drift cleanup across CN, ES, FI, FR, NL, PL, RS — restored missing keys for the garage plate editor, CCTV / Map waypoint actions, station creator job-blip modals, tablet missingItem state, panic / ping mapping descriptions, and CameraUploadFailed.
  • Fixed speedcam image capture failure.
  • Config.JobRadial comments updated to reference the new Config.target from sky_base instead of the removed enableOXTarget flag (no behaviour change for existing values).

Other Changes

  • No additional changes.

Version 1.11.1

Highlights

  • Tablet now reopens the last-used app automatically after closing and reopening the tablet.
  • ox_target interaction labels are now fully localized — added a new InteractionLabels table in all 9 languages (CN, DE, EN, ES, FI, FR, NL, PL, RS). Manual overrides via Config.Interactions[id].label still take precedence.
  • Interaction NPCs now support optional scenario and onSpawn fields in Config.Interactions — NPCs can play a GTA scenario on spawn and run custom setup code (outfits, props, extra tasks).
  • Security fix: helicopter spotlight events are now validated against Config.HeliCam.allowedJobs and duty status, blocking non-authorized players from griefing with spotlights.

Notable Changes

  • Default Config.JobRadial.mode changed from hold to toggle.
  • Grade change notifications now show richer info and update live.
  • Fixed ox_target radial actions becoming unclickable after the first trigger.
  • Station creator blip handling refined.
  • Map exclusion zones now require police-group access.
  • Fixed rare server errors during public forms, gallery, and chat interactions.
  • Dispatch now cleans up correctly when a player disconnects.

Other Changes

  • CCTV bodycam cache is released when a player disconnects.
  • Refreshed mechanic and tuner card artwork.
  • Table header rendered transparent again.
  • General server-side performance improvements.

Version 1.11.0

Highlights

  • Storage, locker, and vehicle trunk now track item metadata as a separate stack — items with different metadata no longer collide under the same unique key (new metadata_key column and refreshed unique indexes).
  • Added ox_target integration for job radial actions (Config.JobRadial.oxTarget.enabled) so non-tablet actions can be triggered through ox_target without opening the radial menu.
  • Added optional tablet item requirement (Config.Tablet.requireItem + Config.Tablet.item) — when enabled, the tablet is registered as a usable item and required to open.
  • Added openCreatorByJob server export (Sky_Jobs.OpenCreatorByJob) to open the station creator by job key with per-job permission checks.

Notable Changes

  • Boss menu salary input rebuilt with an improved SliderInput component (unit labels, direct numeric entry, validation).
  • Weapon metadata is now preserved through garage and storage add/remove operations.
  • CCTV network is now shared across police sub-jobs.
  • Storage metadata-index migration now auto-resolves the correct prefix length from each column's declared type (VARCHAR/CHAR/TEXT/BLOB).

Other Changes

  • Added missing translations across all 9 locales (CN, DE, EN, ES, FI, FR, NL, PL, RS).
  • Fixed spurious error notification on every shop weapon purchase.

Version 1.10.0

Highlights

  • Added prop placement with in-game editor to the station creator.
  • Added license plate change feature in the garage menu with permission checks and DB sync.
  • Added per-job blip configuration directly from the creator UI (sprite, color, scale, display, short range).
  • Added garage vehicle grade restrictions — vehicles can now be locked behind job grades.

Notable Changes

  • Map App now has a button to set waypoints to station markers.
  • Added tablet:openHome event for external scripts to open the tablet to the home screen.
  • Creator placement settings for fine-tuning marker/interaction point positions.
  • Improved InputModal component with better validation and layout.

Other Changes

  • Comprehensive translation update across all 8 languages (CN, ES, FI, FR, NL, PL, RS, DE).
  • Fixed missing garage plateEditor and status locale keys in EN and DE.
  • Fixed merge conflicts in ES and FI locale files.
  • Fixed missing translation keys in garage interface.

Version 1.9.0

Highlights

  • Added auto database migration (Config.AutoExecuteQuery) — missing tables and columns are created automatically on resource start.
  • Added dedicated fuel and fuel_type columns for job vehicles, persisted via the sky_base fuel bridge.
  • Added salary pause/resume exports (pausePlayerSalary, resumePlayerSalary, isPlayerSalaryPaused) to prevent paycheck farming via AFK.
  • Added unsaved changes confirmation popup in the Roles view.

Notable Changes

  • Roles can now only manage roles with a lower rank.
  • Management interfaces now rebuild client-side when a player's job or grade permissions are updated via boss command.
  • Vehicle mods and liveries are now safely persisted in the garage system.
  • Migration logic now uses centralized Sky.DB.Migrate() from sky_base.
  • Preserved NPCs are now repositioned when creator points are moved.
  • Added retry logic for Sky_Jobs export loading.

Other Changes

  • Added radial menu open sound.
  • Fixed "not on duty" notify not appearing.
  • Disabled default station blips for hospital creator points.
  • Added missing translation keys for wardrobe, billing, finance, garage, and management views.

Version 1.8.0

Highlights

  • Added external garage integration exports for trunk/prop functionality with third-party garage systems.
  • Radial menu default changed from toggle to hold mode.

Notable Changes

  • Station map blips are now visible for all players; interaction points remain job-filtered.
  • Optimized CCTV bodycam validation with native framework functions and preserved cache on duty transitions.
  • Panic button now notifies off-duty players within notification scope.
  • NUI focus is disabled in creator menu to prevent input conflicts.

Other Changes

  • Garage location is now automatically set when clicking Add in creator menu.
  • Creator menu now plays navigation sounds for UX feedback.
  • Station blips set to short range to reduce map clutter.
  • Fixed station creation failing in creator menu.
  • Added missing CCTV config section (Config.Cctv).

Version 1.7.0

Highlights

  • Fixed SIGSEGV crash caused by screenshot-basic server export; uploads now go directly from client via presigned URL.
  • FiveManage API migrated from V2 (fmapi.net) to V3 (api.fivemanage.com) with unified baseUrl.
  • Removed hard screenshot-basic dependency from fxmanifest.

Notable Changes

  • FiveManage API key is no longer sent to the client during video uploads.
  • Fixed trunk transfer failures caused by incorrect return-value comparison.
  • Item metadata is now preserved through trunk transfers.
  • Garage now retries alternative spawn points when primary is blocked.
  • Server now tracks occupied spawn points to prevent concurrent spawn collisions.
  • Duty state is persisted by identifier and restored on rejoin.

Other Changes

  • NPC entities are preserved during job interaction rebuilds instead of being respawned.
  • Managers are now notified of member list changes on disconnect.
  • Reduced CPU overhead by increasing sleep intervals in non-time-sensitive loops.
  • Added TTL caching for CCTV plate lookups.
  • Added early exits in idle threads (CCTV, panic alerts, salary processing).
  • Replaced many direct framework calls with PlayerCache-first helpers.
  • Added Finnish translation.

Version 1.6.0

Highlights

  • Shop items now support quantity input for bulk purchases.
  • Locker and station storage now support item metadata for ox_inventory.

Notable Changes

  • Added CCTV/speedcam waypoint button to set GPS markers from tablet.
  • Added configurable station map blips.

Other Changes

  • Updated German translations and added new English locale keys.

Version 1.5.0

Highlights

  • Radial menu now supports hold and toggle modes with improved input blocking.
  • Added infinite scrolling and backend pagination for transaction logs.
  • Added localization and UI for vehicle selling feature.

Notable Changes

  • Table component now includes sticky headers, row limits, and text truncation tooltips.
  • Duty status changes now include retry logic with immediate UI feedback on failure.
  • Improved identifier resolution and job-data synchronization across resource starts.
  • Job creator now supports boat dock markers and interaction points.
  • Finance UI now refreshes in real-time through server triggers.
  • Refined duty-time tracking and salary payout calculations.

Other Changes

  • Player cache operations now gate on framework load state.
  • Calendar reminder polling now handles app availability more robustly.
  • Table timestamps now render in fixed German locale.
  • Hardened player cache refresh during initialization with protected calls.
  • Optimized server performance by caching job data and bodycam item status.
  • Removed calendar debug logging.
  • Added Chinese translation.
  • Added payroll localization strings across all languages.

Version 1.4.0

Highlights

  • Added image gallery and screenshot capture system with secure uploads.
  • Added boat garage support.
  • Added job invitation system with interactive popup.

Notable Changes

  • Added My submissions section in public forms.
  • Staff can now add internal or citizen-visible notes to public forms.
  • Added custom background image support for custom storage UI.
  • Added option to disable Go Back button in custom storage.
  • Panic ping and dispatch now use registered key mappings.
  • Ping and panic markers now auto-remove after configurable duration.
  • Radial menu now only shows for registered jobs.

Other Changes

  • CCTV now respects player visibility settings.
  • Improved unregistered-job duty handling.
  • Improved health percentage calculation to avoid negative values.
  • Improved member online/offline accuracy and multichar identifier resolution.

Version 1.1.1

Highlights

  • Hotfix: fixed storage bug.

Notable Changes

  • No additional notable changes documented.

Other Changes

  • No additional changes documented.

Version 1.1.0

Highlights

  • Added /setboss [job] [grade] command for boss/wholesale fallback access assignment.
  • Added option to disable tablet apps or entire tablet.
  • Added back off-duty job support.

Notable Changes

  • Fixed locale issues and missing locale entries for tablet apps.
  • Fixed duplicate NPC spawn on player join.
  • Fixed go-on-duty radial notify behavior when player lacks job.

Other Changes

  • Fixed NPC heading application.
  • Added image path config support.
  • Fixed dashcams and vehicles on map.

Screenshot & Webhook Update

Highlights

  • screenshot-basic is no longer a hard dependency.
  • Screenshot uploads now run client-to-FiveManage via presigned URLs (no server temp files).
  • FiveManage API updated from V2 to V3 endpoints.

Notable Changes

  • Video uploads now use presigned URLs for improved security.
  • Webhook config simplified to single baseUrl.

Other Changes

  • FiveManage SDK resource is no longer required for sky_jobs_base.