Use the files from the same 1.41.0 download for every replacement. The following paths are inside your installed sky_policejob folder.
Delete the old source/ folder, then copy the complete new source/ folder into its place, including the interface files.
Replace fxmanifest.lua with the file from that download.
Replace the complete config/locales/ folder. If you changed translations, copy only your edited wording from the backup into the matching new entries; keep all new keys and files.
Keep your existing config/config.lua and other configuration files. The settings section below lists any separate file replacement required by this update.
No settings changes are required. Keep your existing config/config.lua, jobs, cameras, fines, billing provider, processing mode, saved creator entries and /jobconfig overrides. This applies both with /jobconfig and with Config.UseJobConfigurator = false.
Automatic immediate camera fines keep their normal payment notifications without opening a receipt. Manually issued immediate fines still show their acknowledgement receipt. No new switch needs to be enabled.
No new Police schema migration, inventory item, image or model is required. Do not replay import.sql for this update and do not run the destructive clear.sql reset.
When DOJ is available, Police automatically repairs pending automatic speed-camera documents whose author is missing, then retries delivery. Keep the existing document queue and history. Already delivered documents and manually issued fines retain their existing authors; do not delete or recreate fines to trigger recovery.
Start the framework, database connector and your configured providers first. Start sky_base 1.49.0, then sky_jobs_base 1.52.0, and wait for successful initialization before starting installed jobs.
Check the server console for the first startup or database error. Confirm that sky_policejob reports version 1.41.0.
Reconnect players so they load the new interface, then check the workflows below before reopening the server to everyone.
If DOJ is installed, update it to 0.7.0 and start it before sky_policejob 1.41.0. Police remains usable without the Job Creator product; its jail and community-service editors load their own stored data.
Check saved jail and community-service locations, an existing ankle monitor and a GPS tracker. With DOJ enabled, open a pending automatic speed-camera document after delivery. Test an automatic immediate camera fine on a test server: the payment notification should appear without a receipt taking driving controls. A manual immediate fine should still show its receipt.
Version 1.40.0
Highlights
Added the SKY SR-2 handheld radar gun with a physical screen, speed, plate and distance readings, peak speed and measurement locking.
Added configurable radar-gun units, access and a movable optional HUD.
Notable Changes
Fixed an issue where participant and suspect names were missing from shared Police records, including manual or offline directory profiles.
Improved rejected Police-to-DOJ delivery feedback by identifying the invalid field while preserving queued records.
Improved vehicle and person targets for clamps, impound, tackle, seating, extraction and disassembly so actions retain the chosen target.
Added selected-vehicle GPS tracker actions and selected jail-work pickup and drop-off targets.
Improved personal radio push-to-talk while using the tablet.
Other Changes
Improved shared document, billing and asset-selection controls.
Improved target access when the radial menu is disabled while retaining keyboard interaction paths.
Open the installed sky_policejob folder and the new download side by side. Copy from the download into the installed folder:
Delete the installed source/ folder, then copy the complete new source/ folder here.
Delete the installed config/locales/ folder, then copy the complete new config/locales/ folder here.
Replace fxmanifest.lua with the new file.
Copy the complete new meta/ folder here and replace matching files.
Copy stream/sky_speedradar.ydr to the same path.
Copy licenses/fivem_radargun-MIT.txt to the same path.
Copy config/inventory/README.md and config/inventory/weapon_sky_speedradar.png to the same paths.
Keep config/config.lua and your other configuration files. If you edited translations, copy your changed wording from the backup into the matching new language entries.
For your existing Police features, keep the current settings and department shops. No default import or permission reset is needed.
Only if you want the new radar gun: open sky_policejob/config/config.lua and find Config.UseJobConfigurator.
true (normal setup): no Lua additions are needed. After startup, open /jobconfig → Police Jobs → Radar Gun. Keep Enabled and Require duty on, check Allowed jobs, and choose Use MPH: off means KM/H and metres; on means MPH and feet. Save your settings.
false: copy the complete Config.RadarGun = { ... } block from the downloaded config/config.lua to the end of your installed file. In the installed Config.Keybinds table, add radarGunToggleUiKey = "F7", and radarGunClearKey = "R", beside the other key entries. Keep your existing departments and keybinds. To sell the radar in a department shop, add { name = "weapon_sky_speedradar", label = "SKY SR-2 Radar Gun", price = 1200 }, beside the existing items in that department's Config.Jobs → shop table before startup.
The inventory registration in the next step is also required before anyone can use the radar gun. Skip both radar setup sections if you do not want to introduce it yet.
Only if you want the new radar gun — choose your inventory, not your framework:
ox_inventory, including servers on QBCore/Qbox: open ox_inventory/data/weapons.lua. Add the following entry inside the existing Weapons table. Then copy sky_policejob/config/inventory/weapon_sky_speedradar.png to ox_inventory/web/images/weapon_sky_speedradar.png.
qb-inventory: open qb-core/shared/items.lua. Add the following entry beside the other weapon items inside its existing item table. Then copy the same image to qb-inventory/html/images/weapon_sky_speedradar.png.
For another inventory, follow its custom-weapon registration instructions using weapon name WEAPON_SKY_SPEEDRADAR. Adding an ordinary item or an ESX items SQL row alone will not register this weapon. The supplied config/inventory/README.md contains the weapon details.
Start the whole server. Keep this order in server.cfg: ensure sky_base, ensure sky_jobs_base, then ensure sky_policejob. If you use Sky DOJ, start sky_doj before Police.
Check the server console for startup errors, then reconnect to load the new files.
Open the Police tablet and an existing record. Check that your departments and participant names are present.
If you installed the radar gun: complete the Radar Gun settings from step 3. With /jobconfig enabled, to make it available in the Police shop, open /jobconfig → Police Jobs → Jobs → your department → Shop, add item weapon_sky_speedradar with a label and price, and save.
If you installed the radar gun: as an allowed on-duty officer, equip it and aim at a moving vehicle. Check the speed reading; F7 toggles the HUD and R clears the reading unless you have rebound those keys.
Skip the last two checks if you did not set up the radar gun. Keep the backup until the checks for your setup pass.
Version 1.39.0
Highlights
Added permission-controlled hiding of prison records while retaining their history and active sentences.
Improved speed-camera placement with shared placement tools and preserved the selected camera height.
Added a configurable filter for automatic officer-down and shots-fired alerts in activities such as FFA or paintball.
Notable Changes
Fixed an issue where a CCTV or speed camera could not be repaired with the player's last repair item.
Improved prison and community-service records with clearer editing, localized errors and preserved data during background updates.
Improved confiscation records so new entries appear automatically without clearing the current search.
Improved the radial menu by grouping Police actions and shared person interactions under one entry.
Fixed an issue where external radial menus could show actions for a different player or vehicle.
Improved invoice recipient selection with nearby player names and distances while preserving the invoice draft when the list updates.
Fixed an issue where external billing providers displayed payment controls intended for Sky Billing.
Improved tablet navigation and forms with consistent headers, clearer labels and better keyboard focus.
Other Changes
Updated the bundled translations for Police, custody and community-service workflows.
Improved the appearance of calendar popups inside tablet dialogs.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/functions.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.38.01.39.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare
These instructions cover sky_policejob1.38.0 → 1.39.0. Complete applicable earlier migrations first if you are upgrading from an older version. Back up the database, resources, custom configuration/translations and saved jobs, roles, locations and /jobconfig data. Test on staging and stop the server before replacing files. Start the framework, database connector and selected inventory, phone, banking and UI providers first, then sky_base 1.47.0 and sky_jobs_base 1.50.0, followed by the installed job resources. If you use DOJ with Police, start DOJ 0.5.0 before Police 1.39.0. If you use the Crime medical integration, start Ambulance 2.46.0 before Crime 0.10.0. Mechanic 1.36.0 and Fire 1.18.0 follow both libraries. Include only resources you have installed.
Replace files
Use the complete 1.39.0 customer package. Delete the entire sky_policejob/source/ folder and insert the new one. Replace sky_policejob/fxmanifest.lua from the same download; do not merge old generated interface or bootstrap files. Refresh the complete sky_policejob/config/locales/ tree and merge custom translations without restoring an older dictionary. Preserve the selected locale value in sky_base/config/config.lua.
Merge sky_policejob/config/config.lua and sky_policejob/config/functions.lua using the exact changes below, preserving your other custom values and Lua hooks. Keep the supplied sky_policejob/import.sql as the matching schema reference; apply only the required existing-database migration described below. Install the matching Jobs Base 1.50.0 locale packs as part of the Jobs Base update.
Merge settings
Retired speed-camera placement settings. In sky_policejob/config/config.lua, remove Config.SpeedCam.moveStep (old shipped value 0.08) and Config.SpeedCam.rotateStep (old 3.0) from the existing Config.SpeedCam table. Movement and rotation now use the shared placement tools. Keep your camera models, item, speed limits, detection, billing and notification policy. The shipped Config.SpeedCam.enabled = true and Config.SpeedCam.policeNotification.requireDuty = true are unchanged; preserve intentional differences. Placement still checks job, duty and item access.
With Config.UseJobConfigurator = true, /jobconfig remains the owner of managed values. Make any desired configurator changes after the updated server has started and before the gameplay checks. The retired keys speedCamMoveStep and speedCamRotateStep are no longer offered or read; existing values for those keys are ignored. Do not reset saved camera locations or other overrides. With the configurator disabled, remove the two obsolete plaintext fields. Jobs Base 1.50.0 is required for the new placement tools.
New automatic-alert hook. In sky_policejob/config/functions.lua, add this complete block after the existing Config.Functions initialization, retaining all your other functions:
Config.Functions.beforeDispatchAlert = function(context)
return true
end
This hook was previously absent. The shipped true return preserves normal automatic alerts. It runs on the affected player's client; context.alertType is "officerDown" or "shotsFired", context.playerPed is that local ped, and shots fired also supplies context.weaponHash. Return false to suppress the selected alert in your installed activity. Keep the hook synchronous and call only resources installed on your server. The supplied comments show FFA/paintball examples; leave them commented unless you intentionally configure that integration.
The hook is executable plaintext Lua and remains in this file when /jobconfig is enabled. It has no saved setting key and is not replaced by a configurator import. Existing alert enable/chance/cooldown settings and your other saved overrides remain. No configuration reset or routine /jobconfigimport is required.
Optional profiling is disabled by default. If support requests a recording, put setr sky_profiler 1 in server.cfg before the Sky ensure lines and perform a full server restart. In the server console, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-release-20261014.json; choose a new filename for each recording. Disable it with setr sky_profiler 0 and another full server restart. This is not a /jobconfig setting. No recording or upload starts automatically.
Database, items and assets
Database: Add sky_job_jail_records.hidden, type TINYINT(1) NOT NULL DEFAULT 0. With Config.AutoExecuteQuery = true, the supplied startup migration adds it to an existing table. Check the first migration error if it fails. With Config.AutoExecuteQuery = false, select your FiveM database in your database administration tool and apply this before starting Police:
SHOW COLUMNS FROM `sky_job_jail_records` LIKE 'hidden';
Only if that query returns no row, run:
ALTER TABLE `sky_job_jail_records`
ADD COLUMN `hidden` TINYINT(1) NOT NULL DEFAULT 0;
If the column already exists, keep it and its stored values. The updated sky_policejob/import.sql contains the matching schema and a MariaDB ADD COLUMN IF NOT EXISTS mirror; the guarded statement above also works without relying on that syntax in MySQL. Preserve all prison and other Police records. Do not run clear.sql: it is a destructive reset, not an update. /jobconfig does not install SQL.
Permission: Once the updated server has started, open the role or unit permission editor in Jobs Base. Grant Hide prison records (2402) only to the intended Police roles or units and save those permission assignments. Normal prison-editing access is also required. Existing all-permissions access remains. Hiding removes an entry from the tablet list; history is retained and an active sentence continues. There is no new tablet unhide action.
Items and assets: No new inventory definition, image, map or streamed model is introduced. Keep the existing camera and repair item registrations. There are no additional non-source files to remove or rename.
Restart and check
Perform a full server restart after all replacements and migrations so manifests and file lists reload, then reconnect clients. Start the framework, database connector and selected inventory, phone, banking and UI providers first, then sky_base 1.47.0 and sky_jobs_base 1.50.0, followed by the installed job resources. If you use DOJ with Police, start DOJ 0.5.0 before Police 1.39.0. If you use the Crime medical integration, start Ambulance 2.46.0 before Crime 0.10.0. Mechanic 1.36.0 and Fire 1.18.0 follow both libraries. Include only resources you have installed. Check the actual installed versions and the first startup/database error before testing.
Check the hidden column and permission 2402, then open a prison record, edit its notes/duration and hide a staging entry. Verify the history remains and any active sentence continues. Check a user without the permission cannot hide records. Create a confiscation and confirm the current search survives the automatic update. Place and cancel a speed camera, check its selected height after streaming, and repair a camera with exactly one repair item. With an intentionally configured activity filter, test officer-down and shots-fired alerts inside and outside that activity. Check person radial grouping, community-service editing and nearby-player invoice selection.
Version 1.38.0
Highlights
Improved bodycam requests with archived recordings, external video links, unavailable replies and deadline extensions.
Improved offence selection and court execution feedback when DOJ is installed.
Notable Changes
Fixed automatic speed-camera fines depending on an on-duty officer or the camera owner's faction.
Fixed ankle-monitor placement animations starting before the server accepted the action.
Added serial-number copying in laboratory details.
Improved bodycam request notifications to open the intended request, including when the app is already open.
Improved new reports to use the active DOJ offence catalogue without rewriting historical snapshots.
Improved File Explorer loading so ordinary folders remain available while shared document data loads.
Improved shared document and video previews, with clearer feedback when a document cannot be loaded.
Improved court execution forms with automatic deadline updates that preserve entered details.
Improved targeted invoices so the selected recipient stays attached to the invoice throughout creation.
Other Changes
Improved automatic bodycam capture to avoid duplicate recordings and bound capture/upload waiting.
Changed configurator colour handling to remain independent of the job's in-game colour.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.37.11.38.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare
These instructions cover sky_policejob1.37.1 → 1.38.0. Complete applicable earlier migrations when upgrading from an older version. Back up the database, resources, framework files, custom configuration/translations and saved /jobconfig/Creator data. Test on staging and stop the server for replacement. Install the coordinated versions for your installed resources. Start the framework, database connector and selected inventory, phone, banking and UI providers first, then Base 1.46.0 and Jobs Base 1.49.0. Start DOJ 0.4.0 before Police 1.38.0 for their shared catalogue and court workflows. Start Ambulance 2.45.0 before Crime 0.9.0 when using their medical integration. Mechanic 1.35.0 and Fire 1.17.0 follow both libraries. Include only installed resources.
Replace files
Use the complete 1.38.0 customer package. Delete the entire sky_policejob/source/ folder and insert the new one, then replace sky_policejob/fxmanifest.lua from the same package. Refresh the complete sky_policejob/config/locales/ tree and merge custom translations. Preserve your selected language. Do not restore an older bootstrap or merge generated interface files.
Merge config/config.lua if you want the updated speed-camera configuration comments; no executable key or default changes there. Refresh all locales and install the full source with the matching manifest.
Merge settings
When Config.UseJobConfigurator = true, saved /jobconfig settings take precedence over the plaintext defaults. Change the effective values in /jobconfig; copying config files does not replace saved jobs, grades, locations or overrides. Keep the saved data and do not reset the configurator. Use /jobconfigimport sky_policejob only if you intentionally want to import your edited plaintext configuration, after backing up and reviewing its replacement scope. With Config.UseJobConfigurator = false, merge the settings into the supplied config files instead.
No new Police configuration key or shipped default. Keep speed-camera recipients, billing provider and existing permissions. Automatic fines follow the configured faction and can be issued without an on-duty officer; manual self-billing restrictions remain. DOJ's new handovers and bodycamRequests feature settings control their shared request availability; do not use an unrelated bail setting. When using DOJ offence/court integration, install DOJ 0.4.0 and start it before Police 1.38.0. Police retains its standalone catalogue when DOJ is unavailable. Existing saved offence snapshots and completed documents are retained.
Optional profiling remains off by default. If support requests it, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, perform a full server restart, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-release-20261008.json with a new filename for each capture. Disable it with setr sky_profiler 0 and another full server restart. This is not a /jobconfig setting; no recording or upload starts automatically.
Database, items and assets
SQL: No new Police table, column or manual migration. Follow the separate DOJ 0.4.0 database instructions if DOJ is installed. Items: No new definitions. Assets: No new item images, map or streamed assets.
Restart and check
Perform a full server restart to reload changed manifests and file lists, then reconnect clients. Start the framework, database connector and selected inventory, phone, banking and UI providers first, then Base 1.46.0 and Jobs Base 1.49.0. Start DOJ 0.4.0 before Police 1.38.0 for their shared catalogue and court workflows. Start Ambulance 2.45.0 before Crime 0.9.0 when using their medical integration. Mechanic 1.35.0 and Fire 1.17.0 follow both libraries. Include only installed resources. Check actual installed versions and the first startup/database error before testing.
Check report offence selection with the installed DOJ state, an existing saved report, and court execution deadlines while preserving a draft. Test a speed-camera fine with no on-duty officer using your actual billing provider. Check a denied and an accepted ankle-monitor placement. With DOJ, request a bodycam recording, fulfil it from the archive or a permitted HTTPS video, and check an unavailable response/extension and exact notification target. Confirm serial-number clipboard copying and normal File Explorer/invoice workflows.
Version 1.37.1
Highlights
Fixed an issue where Police failed to initialize when shared dependencies took more than 60 seconds to load.
Added a copy button for weapon serial numbers in evidence laboratory results.
Notable Changes
Improved Police startup so a failed migration is reported without aborting the entire initializer.
Fixed an issue where ankle-monitor placement or normal removal could start an animation even when the server rejected the request.
Other Changes
Updated the release package to keep its own dependency bootstrap editable for support.
Changed Files
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.37.01.37.1
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare
These instructions cover sky_policejob1.37.0 → the refreshed 1.37.1 package. If you installed an earlier 1.37.1 download today, download the current 1.37.1 package again and apply these steps. The manifest version stays the same, so the version number alone does not identify the refreshed package. Back up resources, the database, custom configuration, translations and saved Job Configurator/Creator data. Validate on staging and stop the server for replacement. Install the refreshed Base 1.45.1, then Jobs Base 1.48.1, then the matching updates for your installed jobs and Crime. Complete earlier migrations first when upgrading from an older version.
Replace files
Use the complete 1.37.1 package. Delete the entire sky_policejob/source/ folder and insert its new version, then replace sky_policejob/fxmanifest.lua from the same package. Do not merge old generated interface files. Refresh the complete sky_policejob/config/locales/ tree and merge custom translations. Keep your existing selected language in sky_base/config/config.lua.
The dependency bootstrap ships as an editable file. Use the supplied file; do not restore an older custom bootstrap. Base also keeps its callback files editable for support. Install the source and manifest together.
Merge settings
No plaintext configuration options, Job Configurator keys or defaults are added, removed or reset by this hotfix. Keep your existing configuration, jobs, grades, locations and saved overrides. /jobconfig does not replace runtime files, install schema or reload changed manifests. No configuration import or reset is required.
Optional diagnostics are disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, restart the server, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-startup-hotfix.json. Disable with setr sky_profiler 0 and another full server restart. This is not a /jobconfig setting; no recording or upload starts automatically.
Database, items and assets
SQL: No new table, column or manual SQL update is introduced by this patch. Existing failed migrations still need their original database error repaired; continuing startup does not create a missing schema. Keep the existing automatic/manual migration policy. Do not replay a full import, clear tables, force success markers or reset saved job/Creator data. Items: No new definitions or inventory registrations. Assets: No new item images, models or stream assets; keep existing assets. Earlier release requirements still apply for older installations.
Restart and check
Perform a full server restart after replacement so the changed manifests and file lists are reloaded. Start the framework, database connector and selected providers first, then Base 1.45.1, Jobs Base 1.48.1 and the installed consumers. Unrelated clothing, vehicle and map packs can remain after Sky in server.cfg. Reconnect clients. Open the Police tablet, check your normal duty workflow and existing creator locations. A long dependency wait now continues until initialization completes; it no longer aborts at 60 seconds. Database migration warnings remain actionable, and failure to read saved settings remains a visible initialization error. Collect the first error, preceding lines and actual installed versions if a feature remains unavailable. On staging, open a weapon examination result with a serial number, use its copy button and paste into a text field to compare the copied value with the displayed serial. Check placement and removal through the normal ankle-monitor actions. For those normal placement/removal actions, the configured animation should start only after server approval. When your existing configuration requires the placement item, use a permitted target without a monitor, test placement with that item missing, then restore it and check an otherwise permitted placement. Normal removal does not require that placement item; check the permitted removal separately.
Version 1.37.0
Highlights
Added three speed camera processing modes: immediate collection, invoicing for later payment and officer review before invoicing.
Added Sky Billing payment choices and central invoice management for supported police workflows.
Added a selectable German speed camera model family alongside the existing standard models.
Notable Changes
Added invoices for offline registered citizens through Sky Billing, including registered vehicle owners detected by speed cameras.
Added an incarceration document linked to the booking and its source report, with retry handling that reuses the same document.
Fixed an issue where failed custody persistence could still remove a prisoner's job or confiscate their inventory.
Fixed an issue where empty jail blip names were replaced during configuration updates.
Added job and gang restrictions for evidence cleaning, while keeping public cleaning enabled by default.
Added gang and independent organization rank rules for VIN checks.
Added bail settlement controls when a compatible enabled DOJ finance workflow is available.
Improved printed and previewed police receipts with clearer payment status, full offence names and support for the selected printer layout.
Improved citizen and vehicle profiles with grouped documents and separate profile tabs.
Improved speed camera model selection with previews and matching damaged and destroyed models.
Fixed an issue where camera configuration was reloaded unnecessarily after unrelated station or job changes.
Improved startup and first interface loading so police callbacks use initialized dependencies.
Other Changes
Updated crime scene tape models and their shared archetype and texture files.
Improved configuration updates so other resources' edits do not invoke police handlers.
Improved tablet descriptions so longer text remains readable.
Updated police and billing translations.
Optimized database checks to avoid repeated checks for unchanged nullable social work fields.
Update InstructionsWhat to copy, what to keep and what to check1.36.11.37.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare
These instructions cover sky_policejob1.36.1 → 1.37.0. Before replacing files, confirm that your customer download platform provides the versions below and check each downloaded resource's fxmanifest.lua; published documentation or a source tag alone does not establish that its customer download has been uploaded. Complete earlier migrations first if upgrading from an older version. Back up the database, resources, custom config, translations and saved Job Configurator/Creator data. Validate the update on staging before applying it to your production server. Stop the server during replacement. Install Sky Base 1.45.0, then Sky Jobs Base 1.48.0, then the matching releases for your installed jobs and Crime. Keep provider dependencies and optional integrations compatible; preserve saved overrides and existing records.
Replace files
Use the complete 1.37.0 release package. Delete the entire sky_policejob/source/ folder and insert its new version; do not merge old generated interface files. Replace sky_policejob/fxmanifest.lua from the same package. Refresh the complete sky_policejob/config/locales/ tree and merge your custom translations into the new files. Keep your selected shared language in sky_base/config/config.lua. Install the following shipped paths from that package, merging custom configuration into the updated public files rather than restoring old complete files:
In sky_policejob/config/config.lua, replace the old Config.SpeedCam.advanced.enabled switch with:
Config.SpeedCam.processingMode = "later"
"instant" attempts immediate collection; "later" creates a payable invoice; "review" records a case for officer review before invoice creation. Keep the existing advanced table's evidence, recognition and offence options; remove only its retired enabled entry. If your old switch was true, choose "review"; if it was false, choose "later" to retain the previous workflow. Sky Billing supports offline registered owners; external providers still require a supported online recipient/issuer. Issuing an invoice is not proof of payment.
In /jobconfig → Policejob → Speed Camera, speedCamProcessingMode replaces speedCamAdvancedEnabled. Saved legacy values are migrated automatically (true → review, false → later) when no new mode is already saved. Review the migrated selection; preserve your other overrides.
Configure /jobconfig → Policejob → Evidence with evidenceCleanerAllowEveryone, evidenceCleanerJobs and evidenceCleanerGangs. With allowEveryone = false, a matching job OR gang grants cleaning access; both lists empty deny cleaning. Evidence collection keeps its existing police access rules.
Add the new VIN gang lists without replacing your job or grade lists:
Configure /jobconfig → Policejob → Fake Plates → VIN using fakePlateVinAllowedGangs and fakePlateVinAllowedGangGrades. Use exact internal names. An empty gang-rank list allows all ranks of explicitly allowed gangs; populated rows set minimum ranks. Gang grants do not require job duty; job grants keep their configured duty requirement.
Merge stationBlip = true and blip.useBlipPrefix = true into the existing Config.CreatorInteractions.jailcreator.jail_public_blip profile, keeping its name, color, sprite and enabled state. Review the effective jail blip in the Jail Creator/Configurator and use the prefix option deliberately. Empty custom names are retained.
Keep the current standard Config.SpeedCam.propModel, damagedPropModel and destroyedPropModel values unless changing the camera family. Standard models remain sky_speedcam, sky_speedcam2 and sky_speedcam1; the German family uses sky_germ_speedcam, sky_germ_speedcam2 and sky_germ_speedcam1. The /jobconfig model picker is speedCamPropModel; its matching model choices update the damaged/destroyed selections. Review saved custom models instead of renaming every existing camera.
Config.Billing.mode = "framework" keeps its value. Set Sky Base Config.billing = "sky" for central invoices and configure Jobs Base billing/payment permissions and plans. External invoices remain with their selected provider. Do not treat receipt previews as issued invoices or credited society income.
Optional diagnostics are disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, then restart the server. Run profiler record 1000, wait for profiler status to show that recording has completed, then run profiler saveJSON sky-release-profile.json. Disable diagnostics with setr sky_profiler 0 and another server restart. This is not a /jobconfig setting; no recording or upload starts automatically.
For an older explicit profiler package, replace any previously modified public config/provider/compatibility files with the supplied versions and merge your intentional customizations. In this release package, profiler preparation preserves all files outside source/ byte for byte except fxmanifest.lua; the functional config changes listed in this guide still require their own merge.
Data, items and dependencies
SQL: The Police import.sql has no release change. Keep existing records and do not replay a fresh-install import. Apply the Base and Jobs Base migrations for central invoices. If using linked incarceration documents or bail settlement, install the matching DOJ 0.3.0 release and apply its documented additive migration without resetting document, role, template or case tables.
Assets: Replace the updated sky_policejob/stream/sky_props.ytyp, all Changed Files for crime scene tape, and all three new German speed camera .ydr models plus sky_germ_speedcam_textures.ytd. Delete the obsolete sky_policejob/stream/sky_crime_scene_tape.ytyp; its archetypes are supplied by sky_props.ytyp. Update fxmanifest.lua from the same package so the shared archetype is mounted once. Existing tape and speed camera item registrations remain in use; no new inventory item ID is required for selecting the German model family.
Dependencies: Install Sky Base 1.45.0 and Jobs Base 1.48.0 releases before Policejob 1.37.0. If used, update DOJ 0.3.0 in the same maintenance window. Install both Police and DOJ before starting either. Start framework/database/providers, Base, Jobs Base, Police and then DOJ; finish startup of both before testing their linked document or bail workflows. Keep DOJ finance/tablet enabled and the existing finance permission grants for bail; installing Police does not grant those permissions.
Restart and check
Start your framework, database connector and configured providers first, then Base, Jobs Base and the updated job resources in dependency order. Reconnect clients. Verify startup, then test all configured speed camera modes with a registered plate, billing failure and an offline owner when using Sky Billing. Confirm review mode requires approval and unrelated blip edits do not reload camera data. Print a receipt using the installed printer and distinguish a preview from an issued invoice. Test custody persistence failure on staging before job/item side effects, then confirm a successful booking has one linked document and source report. Test evidence cleaning for an allowed and denied job/gang, VIN minimum ranks, jail name/prefix controls and both camera model families. If DOJ is enabled, check the authorized bail workflow and rejected insufficient funds.
If a check fails, keep the update on staging and collect the installed resource versions, selected provider, effective saved setting and the first relevant startup or action error. A successful source test, build or copy does not establish live FiveM, provider or customer acceptance.
Version 1.36.1
Highlights
Changed Police startup back to the previous shared-dependency loading behavior.
Other Changes
Updated the bundled Hungarian translations.
Changed Files
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.36.01.36.1
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare
These instructions cover sky_policejob1.36.0 → 1.36.1. Complete earlier migrations first if upgrading from an older version. Back up the database, resources, custom configuration and saved job/Creator data. Stop the server for the coordinated update. Install Base 1.44.1, then Jobs Base 1.47.1, then the matching hotfixes for your installed Sky jobs and Crime.
Replace files
Use the 1.36.1 download. Delete the entire sky_policejob/source/ folder and insert the new folder. Replace sky_policejob/fxmanifest.lua from that same package. Refresh the complete sky_policejob/config/locales/ tree and reapply custom translations. Keep the new source and manifest together; do not merge old generated interface files into them.
Keep settings
No configuration values or Job Configurator setting keys are added, removed or reset by this hotfix. Keep your current settings and saved overrides. Hungarian uses the existing Config.locale = "hu" setting in sky_base/config/config.lua; leave your selected language unchanged if you do not want to switch. Update the matching Base, Jobs Base and installed resource locale folders together.
Optional diagnostics stay disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, restart, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-hotfix-profile.json. Disable with setr sky_profiler 0 and another restart. This is not a /jobconfig option; nothing is recorded or uploaded automatically.
Data and assets
No new SQL import, item definition, inventory image or stream asset is required for this hotfix. Keep saved job/Creator data; do not reset or reimport it. Required earlier migrations still apply when upgrading from an older release.
Restart and check
Start your framework, database connector and configured providers first, then Base 1.44.1, Jobs Base 1.47.1 and the updated jobs/Crime. Reconnect clients. Open /jobconfig and check the Police tablet and your normal duty workflow. If startup still fails, collect the first error and its preceding log lines together with the installed versions.
Version 1.36.0
Highlights
Fixed an issue where cutting an inner prison fence incorrectly ended custody before the prisoner left the prison perimeter.
Fixed an issue where vehicle extraction from the radial menu could use a nearby vehicle instead of the selected vehicle.
Notable Changes
Fixed an issue where evidence marker colors, dimensions and ranges were ignored or remained unchanged after configuration edits.
Improved evidence storage and laboratory points so saved labels, headings and appearance update with configuration and duty access.
Fixed an issue where jail and social-work markers or map icons ignored their configured profiles or displayed duplicate guidance.
Fixed an issue where civilian jail actions failed on servers using only custom department job names.
Fixed an issue where switching from prison cleaning to carrying tasks could fail.
Added support for authorized DOJ register forms to search registered citizens by name without loading their full Police records.
Other Changes
Added Hungarian translations for Police menus and messages.
Improved custom register browsing so stale requests cannot replace the current view and failed loads are not shown as empty results.
Improved keyboard selection and accessibility in shared tablet dropdowns.
Updated vehicle documents to display times in 24-hour format.
Improved startup dependency loading and database-wait diagnostics for protected resource packages.
Changed Files
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.35.01.36.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare the update
These instructions cover sky_policejob1.35.0 → 1.36.0. Complete earlier required migrations first if upgrading from an older version. Stop the server for the coordinated update and back up the database, resource files, customized configuration and saved job/Creator data. Install Base 1.44.0 first, then Jobs Base 1.47.0, then sky_policejob1.36.0 and the matching updates for your other installed Sky jobs. The updated manifest requires the matching Base and Jobs Base imports; do not combine it with older dependency folders.
Replace the package files
Use the matching 1.36.0 package. Delete the complete old sky_policejob/source/ folder and insert the new folder. Replace sky_policejob/fxmanifest.lua from the same download. Refresh the entire sky_policejob/config/locales/ tree and merge your custom translations back. Do not merge old generated interface files into the new source/ folder.
No public configuration file, SQL file, inventory definition or stream asset changes in this release. No files outside source/ are removed or renamed.
Merge configuration and saved overrides
Hungarian language
Refresh the complete resource locale folder from this download, including hu.lua, and carry over your custom translations. To use Hungarian, set the existing Config.locale value to "hu" in sky_base/config/config.lua; its supplied default remains "en". Keep your current value if you are not changing language. This is the shared Sky language setting, so update the matching Base, Jobs Base and installed job locale folders together. Jobs Base supplies the Hungarian /jobconfig translations too. No new /jobconfig language setting, saved-job reset or database migration is required for this language addition. Apply the normal restart and reconnect steps at the end of this update.
No values are added, removed or changed in sky_policejob/config/config.lua; there are no new /jobconfig setting keys or permission IDs. Preserve saved configuration and role grants. After starting the updated resources, review these existing settings during maintenance:
Evidence markers keep Config.EvidenceField.marker and collectDistance, including your existing color, dimensions, alpha and draw/collection ranges. The matching Evidence Field settings now apply live, including enabling a feature that was off at startup.
Keep Config.CreatorInteractions.stationcreator.evidence_storage / .evidence_laboratory, the existing jailcreator profiles and socialworkcreator.social_work_jobs, .social_work_dumpster and .social_work_box_dropoff. Names, placed headings and appearance now follow the saved profiles. The persisted social-work interaction key remains socialworkcreator::social_work_jobs; do not rename saved keys or recreate sites.
Keep the jail's existing perimeter and each fence cut/exit position. An exit inside that perimeter now retains the prison sentence; a destination outside it records the escape. Correct an incorrectly placed perimeter or exit in the existing jail editor rather than clearing prisoners.
Custom department job names remain supported. No rename to police or role reassignment is needed for civilian jail actions.
The optional DOJ person lookup requires the matching DOJ registry integration. Existing Police records work without installing DOJ, and this release does not grant broader record access.
Optional performance diagnostics
Extra profiler information remains disabled by default. If support requests a recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart the server. In the server console, run profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. Share the file only when requested. To disable the extra information, change the line to setr sky_profiler 0 and restart again. This is not a /jobconfig setting; enabling it does not record or upload anything automatically.
Keep source/ and fxmanifest.lua from the same download even when diagnostics are disabled. Profiler processing changes only source Lua and the manifest. If an older profiler package changed public files outside source/, restore those files once from the clean current download and reapply your own customizations.
Apply SQL, inventory and asset updates
No Police SQL migration, table/column type/default change, new item, inventory image or streamed asset installation is required for 1.35.0 → 1.36.0. Keep all existing records and profile shares. clear.sql is a destructive reset tool and is not part of this update. If upgrading from an older version, complete that version's separate migrations first.
Restart and verify
Start providers/framework, Base 1.44.0, Jobs Base 1.47.0 and Police 1.36.0, then reconnect. Confirm the installed versions and check startup errors. At a test jail, cut an inner fence and then the outer fence: the first must retain custody and the last must record the escape. Test prisoner tasks and confiscated-item return on a server using your actual custom department names, including switching from cleaning to carrying.
Check evidence marker appearance in your configured targeting mode, change a marker/range while connected, and disable/re-enable field evidence. Check evidence storage/laboratory names, headings and duty access. Verify the three social-work point profiles and their cleanup when the sentence ends. Select a vehicle in the radial menu and confirm extraction uses its occupant rather than a different nearby vehicle. Open a custom register and vehicle document, check loading/error feedback, keyboard selection and 24-hour times. If DOJ is installed with the matching caller, test an authorized person search and a denied user.
Version 1.35.0
Highlights
Fixed an issue where profile-sharing migration could fail on older databases or truncate longer recipient lists during manual setup.
Notable Changes
Added playback for video records opened in the shared document viewer.
Other Changes
Fixed an issue where select menus inside dialogs could appear behind the dialog or lose its focus scope.
Improved scaling of shared tablet controls, signatures, document views and registry borders across screen resolutions.
Changed Files
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/config/locales/*
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.34.01.35.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare the update
If Fire Job is installed, take all breathing bottles out of vehicle bottle storage before stopping the old server. The Fire update cannot migrate its old live vehicle-state contents. Complete this pre-shutdown step before updating Base or Jobs Base.
These instructions cover sky_policejob1.34.0 → 1.35.0. Complete earlier required migrations first if upgrading from an older release. Stop the server for the coordinated update and back up the resource, database, customized configuration and saved job/creator settings. Install Base 1.43.0 first, then Jobs Base 1.46.0, then the matching installed job releases.
Replace the package files
Use the matching 1.35.0 package. Delete the old sky_policejob/source/ directory completely and insert the new directory. Replace sky_policejob/fxmanifest.lua from the same package. Refresh the entire sky_policejob/config/locales/ tree and merge your custom translations back. Replace sky_policejob/import.sql from the same download. Copying this file does not execute SQL.
Do not merge old generated interface files into the new source/ directory.
Merge configuration and saved overrides
Prepare file changes while the server is stopped. Perform the /jobconfig, Creator and other in-game actions described in this section after starting the updated resources in step 5, during maintenance and before admitting players.
No Police setting, /jobconfig key or permission ID changes in this release. Keep existing configuration and saved overrides. The existing file setting Config.AutoExecuteQuery in sky_policejob/config/config.lua controls the database update route.
Optional performance diagnostics
Extra profiler information is disabled by default. If support requests a recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart. In the server console, run profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. To disable the extra information, use setr sky_profiler 0 and restart. This is not a /jobconfig setting. Enabling it does not start recording or upload anything automatically.
Keep source/ and fxmanifest.lua from the same download even when diagnostics are disabled. Profiler processing changes only source Lua and the manifest; public configuration and provider files remain unchanged by that processing. If an older profiler package altered files outside source/, restore those once from the current download and reapply your own customizations.
Apply SQL, inventory and asset updates
With Config.AutoExecuteQuery = true, startup fills missing profile-share-state rows automatically; no manual SQL is needed. With false, run the following complete block in one connection to the active server database while Police is stopped:
CREATE TABLE IF NOT EXISTS `sky_police_profile_share_state` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT NOT NULL,
`kind` VARCHAR(16) NOT NULL,
`profile_id` INT NOT NULL,
`owner_job` VARCHAR(64) NOT NULL,
`recipients` TEXT NOT NULL,
`title` VARCHAR(160) NOT NULL,
`revision` INT NOT NULL DEFAULT 1,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_profile_share_state` (`job_id`, `kind`, `profile_id`, `owner_job`)
) ENGINE=InnoDB;
SET @sky_police_previous_group_concat_max_len = @@SESSION.group_concat_max_len;
SET SESSION group_concat_max_len = GREATEST(@@SESSION.group_concat_max_len, 65535);
INSERT IGNORE INTO `sky_police_profile_share_state`
(`job_id`, `kind`, `profile_id`, `owner_job`, `recipients`, `title`, `revision`, `updated_at`)
SELECT `job_id`, `kind`, `profile_id`, `owner_job`,
CONCAT('[', GROUP_CONCAT(JSON_QUOTE(`recipient_job`) ORDER BY `recipient_job` SEPARATOR ','), ']'),
MAX(`title`), 1, MAX(`updated_at`)
FROM `sky_police_profile_shares`
GROUP BY `job_id`, `kind`, `profile_id`, `owner_job`;
SET SESSION group_concat_max_len = @sky_police_previous_group_concat_max_len;
This targeted block is for an existing 1.34.0 installation, where the source sharing table and other Police schema already exist. It preserves existing destination rows, including revoked shares. No existing column type/default changes; no new item or asset installation is needed. Do not run the entire import as an upgrade on MySQL 5.7: unrelated existing statements use syntax unavailable there. Do not run clear.sql; it is a destructive reset tool.
Restart and verify
Start dependencies, Base 1.43.0, Jobs Base 1.46.0 and Police 1.35.0, then reconnect. Check startup for SQL errors. Verify existing citizen/vehicle profile shares, including a previously revoked share. Open documents and test tablet dialogs at the screen resolutions your server supports.
Version 1.34.0
Update sky_base to 1.42.0, then sky_jobs_base to 1.45.0, then sky_policejob to 1.34.0. Install the matching updates for your other Sky jobs.
Highlights
Changed File Explorer into the default home for Police record directories, with native records available without DOJ.
Added common Print and Share actions for saved citizen profiles, vehicle profiles, reports, cases, BOLOs and warrants.
Added department-specific prefixes for automatically generated case numbers.
Notable Changes
Added shared-document browsing by issuing organization, including authorized records received from other supported jobs.
Changed the former personal folder and pinned-shortcut workspace into the shared directory-based record view while retaining its stored data.
Improved profiles and record navigation with clearer photos, compact tags, readable classification and priority labels, and direct owner-profile links.
Improved concurrent record and sharing edits so outdated changes are rejected and normal record saves preserve separately selected recipients.
Improved open-record updates so changed records refresh without discarding unsaved drafts.
Added an optional switch for custom RP registers, disabled by default and separate from citizen and vehicle records.
Improved the optional DOJ integration so authorized Police record changes remain queued while DOJ is unavailable.
Fixed an issue where offence-management permissions conflicted with Ambulance medical-evaluation permissions.
Fixed an issue where booking mugshots were saved to a different gallery from the one displayed in the tablet.
Other Changes
Fixed an issue where damaged or repaired speed cameras could leave duplicate models behind.
Optimized prison, social-work, tracker and speed-camera synchronization to transfer changed entries without repeatedly sending complete lists.
Improved linked-report and warrant selection with searchable pages while retaining labels for already selected records.
Improved tablet input and dropdown consistency across themes and dialogs.
Updated translations for shared documents, record conflicts, case prefixes and custom-register controls.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.33.01.34.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare the update
Update sky_base to 1.42.0, then sky_jobs_base to 1.45.0, then sky_policejob to 1.34.0. Install the matching updates for your other Sky jobs. These instructions cover 1.33.0 → 1.34.0; complete earlier migrations first. Stop the server and back up the resource, customized files, database and saved configurator/Creator data.
Replace the package files
Install the matching 1.34.0 package. Replace every Changed Files path, delete and reinsert sky_policejob/source/*, and replace sky_policejob/config/locales/* completely. Merge the public configuration described in this view and retain saved database records.
Replace source/* and fxmanifest.lua from the same download even if optional diagnostics remain off. The profiler may change Lua inside source/ and the generated manifest; public configuration and integration files must match the clean source. If an older profiler package changed public files, restore those files once from the clean new package and merge your own changes. Keep customized configuration, writable data and private provider credentials backed up.
Merge configuration
In sky_policejob/config/config.lua, merge these changes. With Config.UseJobConfigurator = true, the corresponding /jobconfig values use shipped defaults plus stored overrides; editing only the file does not replace those overrides. With false, maintain the Lua values directly.
Config path
Previous state
New shipped value / configurator key
Config.PoliceTablet.apps.files
false; preview required DOJ
true; tabletFiles. Native Police directories now work without DOJ. A saved false override stays off until explicitly enabled.
Config.PoliceTablet.apps.registry
Absent
false; tabletRegistry. Optional custom RP registers only; citizens and vehicles are separate. Existing explicit overrides remain.
Config.Jobs[*].caseNumbering
Absent; automatic prefix was CASE
New block below; per-job extension caseNumbering, field prefix.
police_sharing_defaults.records.citizenRecords
Absent
New legacy entry below. Record rules are now ignored; use each record's Share action.
Add this complete field inside each department's entry in Config.Jobs, including customized departments:
caseNumbering = {
prefix = "CASE"
},
Use /jobconfig → Police → department → Case numbers → Prefix (caseNumbering.prefix) when managed in-game. The prefix is trimmed, converted to uppercase and limited to 16 characters; blank uses CASE. Only newly generated case numbers change. Existing and manually entered case numbers stay unchanged; retain any saved department-specific prefix.
For a complete manual file merge, these are the changed entries inside the existing local police_sharing_defaults.records table:
citizenRecords = { enabled = true, jobs = {}, groups = { "police", "ambulance", "mechanic" } },
vehicleRecords = { enabled = true, jobs = { "doj" }, groups = { "police", "ambulance", "mechanic" } },
The old sharing.records and sharing.links sections, including those entries, are no longer effective and can be removed from customized job definitions. Keep the sharing.training rules for courses and qualifications. Record sharing now uses explicit recipients from Share on saved citizen/vehicle profiles, reports, cases, BOLOs and warrants. Existing explicit recipients are retained. Registered jobs are possible recipients, not automatic readers. Sharing requires an on-duty member with source-app access and ownership/clearance where applicable; recipients receive read access and must still satisfy their app, duty and clearance checks. A normal record save does not replace its separately edited sharing list.
File Explorer on existing servers:tabletFiles groups the permitted Citizens, Vehicles, Reports, Cases, BOLOs and Warrants directories under File Explorer. Their individual app switches and rank restrictions remain authoritative. When Explorer is disabled, the permitted standalone apps remain available. Native records, previews, sharing and printing no longer need DOJ; compatible DOJ content appears only when its resource/provider is running. The old personal folder and pinned-shortcut workspace is replaced by these record directories. Its stored sky_police_workspace rows are retained but no longer shown; no manual conversion exists or is needed for the source records. Do not reset that table.
Custom RP registers require tabletRegistry = true, tabletFiles = true and an applicable definition under Jobs Base setting Registries; the new default leaves them off. Citizen and vehicle files do not require that setting. Turning the optional registers off does not delete saved register data.
Required permission correction: after installing the matching packages, perform a full server restart. In the Boss Menu, reselect Manage offences for the Police ranks and organization units that should edit the offence catalog. Its ID changes from 2101 to 2401; old Police grants do not authorize this action. Ambulance continues to use 2101 for medical evaluations, so never replace 2101 globally in the database. A full-access rank keeps its existing full-access behavior.
No new Police provider credentials, callback settings or Creator definitions need merging. Existing prisons, social-work locations, trackers, cameras and records do not need recreating. There is no manual action for the transport, dropdown or mugshot fixes beyond installing the complete package. Newly captured booking photos use the shared gallery; this release does not bulk-import older gallery rows.
Optional performance diagnostics: extra profiler information stays disabled by default. To make a support recording, place setr sky_profiler 1 in server.cfg before the Sky ensure lines and restart the server. Run profiler record 1000 in the server console, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. Share the file only when requested by support. To turn the extra information off, set setr sky_profiler 0 and restart again. This is not a /jobconfig setting; enabling it neither starts a recording nor uploads data automatically.
Apply data and inventory updates
Police SQL: with Config.AutoExecuteQuery enabled, startup applies the new schema and preserves existing profile-sharing recipients. With automatic migrations disabled, run the complete SQL below against the backed-up existing database before starting Police. It adds sky_job_reports.revision, sky_job_bolos.revision and sky_job_warrants.revision, each INT NOT NULL DEFAULT 1, plus the three InnoDB tables sky_police_document_outbox, sky_police_profile_shares and sky_police_profile_share_state. The final copy into the state table preserves any existing profile grants and is safe to repeat. Existing cases already have their revision column from 1.33.0.
CREATE TABLE IF NOT EXISTS `sky_police_document_outbox` (
`sequence_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`id` CHAR(36) NOT NULL,
`payload_json` LONGTEXT NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`delivered_at` DATETIME NULL,
PRIMARY KEY (`sequence_id`),
UNIQUE KEY `uq_police_document_event` (`id`),
KEY `idx_police_document_pending` (`delivered_at`, `sequence_id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `sky_police_profile_shares` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT NOT NULL,
`kind` VARCHAR(16) NOT NULL,
`profile_id` INT NOT NULL,
`owner_job` VARCHAR(64) NOT NULL,
`recipient_job` VARCHAR(64) NOT NULL,
`title` VARCHAR(160) NOT NULL,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_profile_share` (`job_id`, `kind`, `profile_id`, `owner_job`, `recipient_job`),
KEY `idx_profile_share_recipient` (`job_id`, `kind`, `recipient_job`, `owner_job`, `updated_at`)
) ENGINE=InnoDB;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_reports' AND COLUMN_NAME = 'revision'),
'SELECT 1', 'ALTER TABLE `sky_job_reports` ADD COLUMN `revision` INT NOT NULL DEFAULT 1'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
CREATE TABLE IF NOT EXISTS `sky_police_profile_share_state` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT NOT NULL,
`kind` VARCHAR(16) NOT NULL,
`profile_id` INT NOT NULL,
`owner_job` VARCHAR(64) NOT NULL,
`recipients` TEXT NOT NULL,
`title` VARCHAR(160) NOT NULL,
`revision` INT NOT NULL DEFAULT 1,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_profile_share_state` (`job_id`, `kind`, `profile_id`, `owner_job`)
) ENGINE=InnoDB;
INSERT IGNORE INTO `sky_police_profile_share_state`
(`job_id`, `kind`, `profile_id`, `owner_job`, `recipients`, `title`, `revision`, `updated_at`)
SELECT `job_id`, `kind`, `profile_id`, `owner_job`, JSON_ARRAYAGG(`recipient_job`), MAX(`title`), 1, MAX(`updated_at`)
FROM `sky_police_profile_shares` GROUP BY `job_id`, `kind`, `profile_id`, `owner_job`;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_bolos' AND COLUMN_NAME = 'revision'),
'SELECT 1', 'ALTER TABLE `sky_job_bolos` ADD COLUMN `revision` INT NOT NULL DEFAULT 1'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_warrants' AND COLUMN_NAME = 'revision'),
'SELECT 1', 'ALTER TABLE `sky_job_warrants` ADD COLUMN `revision` INT NOT NULL DEFAULT 1'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
Keep existing Police records and sky_police_workspace. clear.sql is a destructive reset tool and is never a normal update step. These migrations do not require a record reset or reimport.
Shared printing SQL: complete the Jobs Base 1.45.0 migration before Police starts. The required shared tables are sky_jobs_record_shares, sky_jobs_record_share_state and sky_jobs_printed_documents; use that release's supplied sky_jobs_base/import.sql additions or its enabled automatic migration. Police's SQL does not replace the Jobs Base migration.
Inventory and printer setup: there is no new Police-owned inventory item or stream model. The new Print action uses Jobs Base's job_document item from sky_jobs_base/config/inventory/items_ox.lua and image sky_jobs_base/config/inventory/job_document.png. Printing requires a metadata-capable inventory; for ox_inventory, merge the entry below into ox_inventory/data/items.lua and copy the image to ox_inventory/web/images/job_document.png. Use the equivalent unique, usable and non-stackable item in another supported inventory.
Keep existing station printers. If none exists, add one in /jobconfig → Police → department → Locations and review printerSettings; printer_paper and printer_ink are only needed when the respective consumption is enabled. The new per-job documentAppearance extension optionally sets leftImage, rightImage and watermark HTTP(S) URLs. Jobs Base's global Config.Printers.documentAppearance defaults to three empty strings. No logos or extra images are required to use the plain document layout.
Printed copies capture the saved record when produced. Only the requesting officer can collect their queued output; after collection, possession of the metadata-bearing item allows reading that unchanged paper copy even after the source is edited or digital sharing is revoked. /jobconfig installs neither the item, image, SQL, runtime nor manifest.
Restart and verify
Perform a full server restart: database, framework and edited inventory first, then Base 1.42.0, Jobs Base 1.45.0 and Police 1.34.0 with the matching installed jobs. Reassign Police Manage offences (2401) to the intended ranks and organization units after startup. Confirm the new versions and resolve startup or migration errors before admitting players.
Test offence editing with an allowed rank and read-only access with a rank lacking that right. Check File Explorer without DOJ, including its individual app restrictions and the optional Registry switch. Create an automatically numbered case using your department prefix; verify an existing number stays unchanged. Share a saved profile or record with another job, read it as that recipient, then revoke access. Print it, collect the item and reopen its paper copy. Edit the same report or sharing list in two sessions and verify the older save cannot overwrite the newer one. Capture a booking mugshot and check the correct department gallery. If compatible DOJ is installed, verify queued document changes arrive after it returns. These are live-server checks; a successful build alone does not establish them.
Version 1.33.0
Update Base to 1.41.0 and Jobs Base to 1.44.0 before installing sky_policejob1.33.0.
Highlights
Added investigation details to cases, including type, status, priority, incident location and time, a permanent journal and tracked tasks.
Added warrant completion by an authorized officer and automatic completion after all linked subjects have served their latest sentence.
Added a rank permission for editing the offence catalog, keeping it readable for officers without editing rights.
Added an optional File Explorer preview with personal folders, shortcuts and linked records when the DOJ resource is running.
Notable Changes
Added links between manually registered vehicles and the selected citizen profile while preserving ownership supplied by the framework.
Improved case editing with conflict checks so an older open case cannot silently overwrite a newer saved revision.
Added access to shared DOJ documents and judicially signed warrants through the optional File Explorer.
Fixed an issue where a prison exit during the intake grace period or a zone refresh could go unreported.
Fixed an issue where disabling a prison map marker could still leave a public marker visible.
Fixed an issue where a billing provider could reject a fine while the interface still reported success.
Other Changes
Improved profile scrolling, long record links and vehicle-profile layouts so controls remain accessible inside the tablet.
Improved BOLO type selection with compact controls and clearer keyboard navigation.
Updated citizen-search labels to show that fingerprint and DNA searches are supported.
Improved player interactions so changes to shared Jobs Base settings refresh Police targets immediately.
Updated translations for investigations, warrants, vehicle ownership and offence-management permissions.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.32.01.33.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare the update
Update Base to 1.41.0 and Jobs Base to 1.44.0 before installing sky_policejob1.33.0. These instructions cover 1.32.0 → 1.33.0; complete earlier migrations first when upgrading from an older version. Stop the server and back up the resource, database, customized files and saved configurator/creator data.
Replace the package files
Install the matching 1.33.0 download. Update every path in Changed Files, delete and reinsert sky_policejob/source/*, and replace sky_policejob/config/locales/* completely. Remove the exact paths under Removed Files and apply any listed renames. Preserve unrelated files, writable data and custom assets; merge the configuration changes in this tab into your customized public files.
Replace source/* and fxmanifest.lua from the same download even when optional diagnostics remain off. Profiler instrumentation is confined to Lua in source/ and the generated manifest. Public configuration, integration and compatibility files match the uninstrumented source; their functional changes are listed separately for this release. If an older profiler package modified public files, restore those once from the clean new package and reapply your own edits.
Merge configuration
In sky_policejob/config/config.lua, add Config.PoliceTablet.apps.files = false. The setting was absent in 1.32.0. With /jobconfig, the setting is Police → Settings → Tablet → File Explorer (tabletFiles). It is an optional preview and requires a running, compatible sky_dojjob; this release does not enable it automatically. If an administrator already saved tabletFiles = true on a development build, that override remains and must be switched off explicitly if the preview is unwanted. Standalone Police apps continue to work without DOJ.
The Config.CreatorInteractions.jailcreator.jail_public_blip definition previously contained only label = "Jail". Merge the full new definition below. This is a creator definition, not a new ordinary saved settings switch; check each prison's saved public-blip override in the Jail Creator as well. It remains a map marker, not an interaction point.
In the Boss Menu, grant Manage offences (MANAGE_OFFENCES) only to ranks that should create, change or delete offences. Other Police ranks retain read access; job membership alone no longer authorizes catalog changes. Existing full-access policy and DOJ-owned catalogs retain their separate authority. Review shared record-clearance levels in Jobs Base 1.44.0 before using restricted records.
For linked local Police warrants, automatic completion requires every subject to have served their latest linked sentence. Early release and escape do not complete the warrant. DOJ warrants remain governed by DOJ. The new investigation fields do not require resetting existing cases. No other executable config.lua values change.
Optional performance diagnostics
Extra profiler information remains disabled by default. For a support recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart the server. In the server console, run profiler record 1000, wait for profiler status to report completion, then run profiler saveJSON sky-release-profile.json. Share that file when requested by support. Set setr sky_profiler 0 and restart again to disable the extra information. This is not a /jobconfig setting; enabling it does not start a recording or upload data automatically.
Apply data and inventory updates
With Config.AutoExecuteQuery enabled, startup applies the new schema. If automatic migrations are disabled, run this upgrade against your existing backed-up database before starting Police. It adds sky_job_cases.investigation (LONGTEXT NULL), sky_job_cases.revision (INT NOT NULL DEFAULT 1), sky_job_jail_records.sentence_completed_at (DATETIME NULL), the warrant and owner indexes, and sky_police_workspace. Existing cases start at revision 1. The owner index expects the existing manual_owner_identifier column from earlier releases; complete those migrations first.
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_cases' AND COLUMN_NAME = 'investigation'),
'SELECT 1', 'ALTER TABLE `sky_job_cases` ADD COLUMN `investigation` LONGTEXT NULL'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_cases' AND COLUMN_NAME = 'revision'),
'SELECT 1', 'ALTER TABLE `sky_job_cases` ADD COLUMN `revision` INT NOT NULL DEFAULT 1'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_jail_records' AND COLUMN_NAME = 'sentence_completed_at'),
'SELECT 1', 'ALTER TABLE `sky_job_jail_records` ADD COLUMN `sentence_completed_at` DATETIME NULL'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_jail_records' AND INDEX_NAME = 'idx_job_jail_warrant'),
'SELECT 1', 'CREATE INDEX `idx_job_jail_warrant` ON `sky_job_jail_records` (`job_id`, `warrant_id`, `citizen_identifier`, `id`)'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
SET @sky_update_sql = IF(
EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_vehicle_profiles' AND INDEX_NAME = 'idx_vehicle_profile_owner'),
'SELECT 1', 'CREATE INDEX `idx_vehicle_profile_owner` ON `sky_job_vehicle_profiles` (`job_id`, `manual_owner_identifier`)'
);
PREPARE sky_update_statement FROM @sky_update_sql;
EXECUTE sky_update_statement;
DEALLOCATE PREPARE sky_update_statement;
CREATE TABLE IF NOT EXISTS `sky_police_workspace` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`owner_identifier` VARCHAR(128) NOT NULL,
`job` VARCHAR(64) NOT NULL,
`parent_id` BIGINT UNSIGNED NULL,
`kind` VARCHAR(16) NOT NULL,
`name` VARCHAR(160) NOT NULL,
`target_type` VARCHAR(24) NULL,
`target_id` VARCHAR(32) NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_police_workspace_owner` (`owner_identifier`, `job`, `parent_id`),
INDEX `idx_police_workspace_parent` (`parent_id`)
) ENGINE=InnoDB;
No new inventory item is required. Keep all Police records. clear.sql is a destructive reset tool and must not be run as an update step.
Restart and verify
Restart the database, framework and any edited inventory first, then Base, Jobs Base and the installed job resources. Confirm 1.33.0 and resolve startup errors before admitting players. Test offence-catalog editing with a permitted rank and read-only access with an unpermitted rank. Save an investigation from two open sessions and verify stale edits are rejected. Complete a sentence and inspect its linked warrant; an escape or early release must not complete it. Check a disabled jail marker and a prison exit after intake grace. Test citizen-to-vehicle links. If enabling the Explorer preview, test its folders and shared documents with the matching DOJ installation; with the preview off, use the standalone Police apps.
Version 1.32.0
Update Base to 1.40.0 and Jobs Base to 1.43.0 before installing sky_policejob1.32.0. Vehicle documents also require Mechanic 1.29.0 and Police 1.32.0 together.
Highlights
Added a Confiscations tablet app with searchable department records of seized items, weapons, people and officers.
Added inspection and registration status to vehicle records, including read-only access to original signed documents and their history.
Notable Changes
Fixed an issue where selected offences were missing from a fine, its receipt or the citizen's billing history.
Fixed an issue where fines or jail actions could fail to resolve the selected online character on some framework setups.
Improved speed-camera removal so the saved camera, nearby objects and CCTV listing are removed together.
Improved vehicle interactions so authorized officers can remove the selected occupant without requiring restraints first.
Added confirmed fine income to the organization finance history.
Other Changes
Improved vehicle-record browsing with compact details, separate document history and more efficient directory searches.
Improved jail configuration by showing its derived blip position with a teleport control even when the map blip is disabled.
Updated tablet translations and bundled interface images.
Update InstructionsWhat to copy, what to keep and what to check1.31.01.32.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare the update
Update Base to 1.40.0 and Jobs Base to 1.43.0 before installing sky_policejob1.32.0. Vehicle documents also require Mechanic 1.29.0 and Police 1.32.0 together. These instructions cover 1.31.0 → 1.32.0; complete earlier migrations first when upgrading from an older version. Stop the server and back up the resource, database, customized files and saved configurator/creator data.
Replace the package files
Install the matching 1.32.0 package. Update every path in Changed Files, delete and reinsert sky_policejob/source/*, and replace sky_policejob/config/locales/* completely. Remove every exact path listed under Removed Files and apply any listed renames. Preserve unrelated files, writable data and your own custom assets; merge the configuration changes in this tab into customized public files.
Replace source/* and fxmanifest.lua from the same download even when optional diagnostics remain off. The profiler only instruments Lua inside source/ and adds its manifest entries; public configuration, integration and compatibility files must match the uninstrumented package. Apply the separate functional public-file changes listed for this release. If an older profiler package modified public files, restore those once from the clean new package and reapply your edits.
Merge configuration
In sky_policejob/config/config.lua, add this assignment after the existing Config.PoliceTablet table declaration: Config.PoliceTablet.apps.confiscations was absent and now defaults to true.
config/config.lua
Config.PoliceTablet.apps.confiscations = true
With /jobconfig enabled, use /jobconfig > sky_policejob > Settings and search for Confiscations (tabletConfiscations) to enable or hide the app. The app provides department-scoped read access to on-duty police. It does not allow editing confiscation history. Existing saved settings remain in effect; a missing new key uses the shipped default. With the configurator disabled, the Lua value is authoritative.
Vehicle inspections and registrations are enabled and configured in Mechanic 1.29.0; Police only reads their status and signed history. Complete the Base/Jobs Base/Mechanic database and service-point setup before testing these records. Other Police settings, fine amounts, jail rules and stored creator positions are unchanged. The jail blip's derived position remains read-only; its teleport button does not enable the map blip.
Optional performance diagnostics
Extra profiler information remains disabled by default. Normal use needs no diagnostic setting. For a support recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart the server. In the server console, run profiler record 1000, wait for profiler status to report completion, then run profiler saveJSON sky-release-profile.json. Share that file only when requested by support. Set setr sky_profiler 0 and restart again to disable the extra information. This is not a /jobconfig option; enabling it does not start a recording or upload data automatically.
Apply data and inventory updates
Back up the database. The new sky_job_billing_history.offences LONGTEXT NULL column stores the selected offence snapshot for new fines. With Police Config.AutoExecuteQuery = true, its startup migration adds the column. With it disabled, execute this idempotent upgrade in the active game database (the same new column is included in sky_policejob/import.sql):
SET @sky_release_sql = IF(
EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_job_billing_history' AND COLUMN_NAME = 'offences'),
'SELECT 1', 'ALTER TABLE `sky_job_billing_history` ADD COLUMN `offences` LONGTEXT NULL'
);
PREPARE sky_release_migration FROM @sky_release_sql;
EXECUTE sky_release_migration;
DEALLOCATE PREPARE sky_release_migration;
Also complete the Jobs Base 1.43.0 schema update, including sky_job_confiscations and the payment-reference column/index. Vehicle documents require the Base owned-vehicle ID, Jobs Base registry tables and Mechanic invoice migration. Historical fines without offence snapshots remain readable; do not invent old offence lists or confiscations. No new items are required. Do not run clear.sql for a normal update.
Restart and verify
Confirm version 1.32.0. Issue a test fine with multiple selected offences and check the receipt, amount and citizen history; test the actual multicharacter framework. Confiscate one item successfully and check the correct department, officer and citizen; a failed transfer must not create a successful seizure record. Read a Mechanic-issued signed document without editing it. Remove a speed camera and verify its object/CCTV entry disappear. Test the selected vehicle occupant and the derived jail-position teleport.
Version 1.31.0
Update sky_base to 1.39.0 and sky_jobs_base to 1.42.0 before installing sky_policejob1.31.0.
Highlights
Improved jail assignment with clear messages for missing arrival, release, or terminal locations and protection against submitting the same assignment twice.
Fixed an issue where a speed camera could select its owner to issue a fine after they changed jobs, went off duty, or lost billing permission.
Notable Changes
Changed the default jail settings so officers can assign jail time without standing at a jail terminal; server owners can still require a terminal.
Removed notifications from tackling, handcuffing a tackled player, and releasing a tackled player.
Other Changes
Removed repeated console messages when the speed-camera phone app could not be registered.
Improved keyboard access to tablet buttons.
Added optional performance diagnostics to help support investigate lag and delays, with diagnostics disabled by default.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.30.11.31.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Prepare the update.
Update sky_base to 1.39.0 and sky_jobs_base to 1.42.0 before installing sky_policejob1.31.0. These steps cover 1.30.1 → 1.31.0. Follow earlier update instructions first when upgrading from an older version. Stop the server and back up the resource, database, custom settings, and saved configurator data.
Replace the package files.
Install the matching 1.31.0 package. Update every path listed in Changed Files, delete and reinsert sky_policejob/source/*, and replace sky_policejob/config/locales/* completely. Merge the configuration changes in this tab into your customized files. Preserve writable data and generated user content.
Required profiler files
For the profiler update, replace the complete sky_policejob/source/* tree and sky_policejob/fxmanifest.lua from the same download, even if diagnostics stay disabled. Delete the old source/ folder before copying the new one.
The profiler builder leaves configuration, integration and compatibility files unchanged. Apply any separate configuration or integration changes listed for this release as usual.
If you previously installed an older profiler package that also modified files outside source/, restore those affected files once from the unmodified versions in the new download and reapply your custom edits. Later profiler-only updates do not require this step.
Merge and review configuration.
In sky_policejob/config/config.lua, Config.Jail.requireJailTerminal changes from true to false:
config/config.lua
Config.Jail.requireJailTerminal = false
This makes a jail terminal optional when assigning a sentence. Keep true if your server requires officers to use the terminal. Config.Jail.assignRange = 8.0 and Config.Jail.terminalRange = 5.0 remain unchanged. The target must still be nearby and the selected jail still needs valid arrival and release points.
With Config.UseJobConfigurator = true, review Police → Jail and the setting jailRequireJailTerminal. A saved true override continues to require a terminal after updating. Change it there if you want the new default. With the configurator disabled, merge the file value above and restart.
Speed-camera billing needs an officer who belongs to the camera's department, is on duty, and is allowed to issue invoices through the selected billing provider. If the owner is ineligible, another eligible officer is selected. For Apex, check that officer's billing permission; creating a fine does not automatically pay it.
Optional performance diagnostics
Sky's extra profiler information is disabled by default. This update does not start recordings or send data automatically. No configuration change is required for normal use. If support needs a performance recording, add the following line to server.cfg before the Sky ensure lines, then restart the server:
server.cfg
setr sky_profiler 1
This global setting is configured in server.cfg; it is not managed by /jobconfig. The previous state with no setting remains disabled. Set the value to 1 only when you want the additional diagnostics.
Run profiler record 1000 in the server console for a server delay, or in the player's F8 console for a client problem. Reproduce the issue during the recording. Wait until profiler status reports that recording has stopped, then run profiler saveJSON sky-profile.json in the same console to save the capture. These are the standard FiveM profiler commands.
After diagnostics, change the line to setr sky_profiler 0 and restart again. Keep the new package files installed; disabling diagnostics does not require editing Lua or removing manifest entries.
Apply database and item changes.
No SQL schema, inventory item, or streamed-asset migration is introduced. Replace all Police locales and preserve existing jails, sentences, speed cameras, and records. clear.sql is a destructive reset tool and is not part of this update.
Start and verify the update.
Assign a sentence with the intended terminal requirement and verify missing-location messages. Confirm the submit button cannot send the same request twice. Test a speed-camera fine with an eligible officer, then with its owner off duty or in another job. Check tackle, cuff, and release actions without the removed notifications.
Version 1.30.1
Update sky_jobs_base to 1.41.1 and use sky_base1.38.0 before updating sky_policejob.
Highlights
Fixed an issue where prisoners escaping by helicopter could later appear as released. Escapes now retain the escaped status and remaining sentence.
Fixed an issue where prisoner escape alerts remained in English instead of using the configured language.
Notable Changes
Fixed an issue where wrong-PIN and helicopter alerts at jails remained in English instead of using the configured language.
Other Changes
Updated the default name used in alerts for unnamed jails to match the configured language.
Changed Files
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.30.01.30.1
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update sky_jobs_base to 1.41.1 and use sky_base1.38.0 before updating sky_policejob. These steps cover 1.30.0 → 1.30.1; complete earlier release instructions first if you are upgrading from an older version. Stop the server and back up the resource, database, saved Job Configurator settings and custom configuration. Preserve generated reports and other writable data.
Install 1.30.1 as a matching package. Update every path in Changed Files, delete and reinsert sky_policejob/source/*, and replace sky_policejob/config/locales/* completely. Merge the configuration instructions in this tab into customized files; retain intentional settings and persistent data.
Review the configuration steps.
No public configuration value or /jobconfig setting changes between the tagged 1.30.0 and 1.30.1 releases. Keep your existing jail configuration, alert recipients and saved overrides. Jail alerts now use the configured Police language; update the full locale folder with the runtime.
Apply the data, inventory and asset steps.
Replace all sky_policejob/config/locales/* so the new jail alert translations are present in every bundled language. No SQL schema, inventory item, image, stream asset or provider secret changes are required. Preserve existing jail records. Do not run clear.sql; it is a reset tool, not an update step.
Start providers, Base, Jobs Base and Police in that order. Escape the assigned jail by helicopter, reopen the prisoner list and confirm that the escaped status and remaining sentence are retained after the original sentence deadline. Separately verify that completing a sentence still produces a normal release. Check escape, wrong-PIN and helicopter jail alerts in your configured language, including an unnamed jail.
Version 1.30.0
Update sky_base to 1.38.0 and sky_jobs_base to 1.41.0 before updating sky_policejob.
Highlights
Added player-configurable keys for police editors, tackling, GPS removal, jail work, and vehicle radar controls.
Improved camera, tracker, monitoring-device, and creator synchronization so delayed lists cannot overwrite newer updates or removals.
Notable Changes
Added CCTV integration support for compatible Crime System interactions.
Fixed an issue where unrelated Job Configurator changes repeatedly reloaded cameras and speed cameras.
Fixed an issue where empty, padded, or lowercase vehicle plates could break vehicle-record and BOLO linking.
Other Changes
Fixed an issue where pressing Escape in an open shared dropdown could also close its surrounding dialog.
Improved interaction prompts so they reflect the player's assigned keys while preserving the existing tackle and radar commands.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.29.01.30.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update sky_base to 1.38.0 and sky_jobs_base to 1.41.0 before updating sky_policejob. Stop the server and back up the complete sky_policejob resource, its database and inventory data, saved Job Configurator settings where applicable, and intentional public configuration edits. Preserve writable reports and other generated data outside the replaceable source files.
Install 1.30.0 as a consistent package. Replace every file listed in Changed Files, delete and reinsert sky_policejob/source/*, and replace sky_policejob/config/locales/* completely. Merge the public configuration changes listed in this tab into your customized files; do not copy old configuration files over the new package wholesale. Keep the manifest, built UI, runtime and dependencies from the matching release set.
Apply the following configuration changes before starting the resource.
In sky_policejob/config/config.lua, add the complete Config.Keybinds block. This table and its paths were absent in 1.29.0; 1.30.0 uses the following string defaults instead of scattered settings or fixed controls. Preserve your chosen keys when transferring old settings.
With Config.UseJobConfigurator = true, open /jobconfig → this resource → General → Keybinds. Every key inside the block is also its exact saved setting ID; for example Config.Keybinds.policeBillingControl200 is saved under the same final name. Saved overrides take precedence over the generated defaults. Numeric overrides migrate to their corresponding QWERTY key, and -1 migrates to an empty string. An empty string means no initial binding. Players retain their own assignments in Settings → Key Bindings → FiveM; changing a server default does not overwrite those assignments.
With Config.UseJobConfigurator = false, edit these paths in the file and restart the resource. Keep mouse/controller prefixes exactly as shown. Command permissions and Config.AutoExecuteQuery remain file settings; their reordering does not change their values.
Remove the following old paths after transferring your overrides. The new paths all live in config/config.lua; the saved setting ID is the final segment of each new path.
Old path in 1.29.0
Old default
New path in 1.30.0
New default
Config.PoliceTackle.key
"N"
Config.Keybinds.tackleKey
"N"
Config.PoliceTackle.holdControls.cuff.key
"E"
Config.Keybinds.tackleCuffKey
"E"
Config.PoliceTackle.holdControls.release.key
"X"
Config.Keybinds.tackleReleaseKey
"X"
Config.GpsTracker.removeKey
38
Config.Keybinds.gpsTrackerRemoveKey
"E"
Config.JailJobs.cleaning.pickupKey
38
Config.Keybinds.jailJobsCleaningPickupKey
"E"
Config.JailJobs.cleaning.dumpsterKey
38
Config.Keybinds.jailJobsCleaningDumpsterKey
"E"
Config.JailJobs.carry.pickupKey
38
Config.Keybinds.jailJobsCarryPickupKey
"E"
Config.JailJobs.carry.dropoffKey
38
Config.Keybinds.jailJobsCarryDropoffKey
"E"
Config.JailJobs.carry.inspectKey
47
Config.Keybinds.jailJobsCarryInspectKey
"G"
Config.VehicleRadar.controls.toggleKey
"Y"
Config.Keybinds.vehicleRadarToggleKey
"Y"
Config.VehicleRadar.controls.increaseLimitKey
"ADD"
Config.Keybinds.vehicleRadarIncreaseLimitKey
"ADD"
Config.VehicleRadar.controls.decreaseLimitKey
"SUBTRACT"
Config.Keybinds.vehicleRadarDecreaseLimitKey
"SUBTRACT"
Config.VehicleRadar.controls.modeFrontKey
"NUMPAD7"
Config.Keybinds.vehicleRadarModeFrontKey
"NUMPAD7"
Config.VehicleRadar.controls.modeRearKey
"NUMPAD4"
Config.Keybinds.vehicleRadarModeRearKey
"NUMPAD4"
Config.VehicleRadar.controls.xmitFrontKey
"NUMPAD8"
Config.Keybinds.vehicleRadarXmitFrontKey
"NUMPAD8"
Config.VehicleRadar.controls.xmitRearKey
"NUMPAD5"
Config.Keybinds.vehicleRadarXmitRearKey
"NUMPAD5"
Config.VehicleRadar.controls.lockFrontKey
"NUMPAD9"
Config.Keybinds.vehicleRadarLockFrontKey
"NUMPAD9"
Config.VehicleRadar.controls.lockRearKey
"NUMPAD6"
Config.Keybinds.vehicleRadarLockRearKey
"NUMPAD6"
Delete the now-empty old Config.VehicleRadar.controls block after moving all nine values. Keep existing radar/tackle command names, duty requirements, job lists, and camera configuration. Config.PrimaryColor, command permissions and sharing defaults were only moved within the file; their shipped values are unchanged. No new CCTV or vehicle-registry config option is required.
Complete the following database, inventory, and asset steps.
No Police SQL schema, new inventory item, image, production stream file, or provider secret is introduced. Existing camera, GPS, monitoring and vehicle registry data is reused. Install the matching Jobs Base synchronization/key-mapping runtime. Do not run clear.sql: it is a destructive reset tool, not an update step.
Restart Base, Jobs Base and Police, then rebind tackle, radar, GPS removal, jail work and editor actions. Confirm current key labels and existing input suppression. Check camera/monitor removal and late joining, Crime CCTV control when installed, a camera-relevant versus unrelated configuration edit, and BOLO links for lowercase, padded, empty and whitespace-only plates.
Version 1.29.0
Update sky_base to 1.37.0 and sky_jobs_base to 1.40.0 before updating sky_policejob.
Highlights
Added fingerprint evidence integration for Police records and investigations.
Added stable vehicle-registry identities so shared records retain their identity across plate changes.
Added DOJ access defaults for Police cases, reports, warrants, BOLOs, and vehicle records.
Improved social-work enforcement with authoritative records, synchronized progress, external-reference deduplication, and configured jail escalation after excessive inactivity.
Notable Changes
Added current prison status to citizen records.
Improved ankle-monitor and social-work integrations so server state remains authoritative across reconnects and external updates.
Improved speed-camera validation so delayed captures are rechecked and app registration remains reliable during startup races.
Fixed wheel-clamp placement by mapping the intended left and right tyre indices.
Improved offence-category lists so long configured catalogues remain scrollable.
Other Changes
Improved Police record and registry sharing contracts for DOJ consumers.
Updated number inputs so browser spinner controls match the tablet interface.
Updated bundled locales for fingerprint evidence, custody state, social work, vehicle records, and shared DOJ access.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.28.01.29.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Install sky_base1.37.0 and sky_jobs_base1.40.0, stop the server, and back up the complete Police resource, Job Configurator data, and all Police/Jobs Base record tables.
Delete the old folder and install the complete 1.29.0 package. Do not mix 1.28.0 manifest, config, locales, UI, schema, or source files with this release.
Review the new sharing defaults: cases, reports, warrants, BOLOs, and vehicle records are enabled for the doj job and police group. Existing saved /jobconfig Share settings override Lua; change them intentionally if DOJ must not receive one of these record classes.
With automatic migrations enabled, start Police once and let it extend map zones, vehicle registry, jail, and social-work data. Otherwise run the complete new import.sql before startup.
Restart Base, Jobs Base, and Police in order. Verify fingerprint evidence, citizen custody state, plate changes, DOJ sharing, social-work synchronization/escalation, ankle monitors, delayed speed-camera captures, clamps, and long offence lists.
Version 1.28.0
Update sky_base to 1.36.0 and sky_jobs_base to 1.39.0 before updating sky_policejob.
Highlights
Added police impounds for persistent Jobs Base fleet vehicles with a reason, fee, officer identity, authority job, and recoverable impounded state.
Added persistent ankle monitors that can restore their prop, map tracking, and zone behavior after the monitored player reconnects or the server restarts.
Added OP Garages support for Police impound and vehicle-storage actions through its native impound menu.
Notable Changes
Improved fleet-vehicle impound security so the server rechecks police group membership, duty, routing bucket, distance, vehicle state, reason, and fee before accepting the action.
Improved jail-breakout security so electrical and fence completion requires the expected player position, item, and powered state instead of trusting a client completion event.
Fixed an issue where vehicle-registry lookups could fail when owner and vehicle columns used different database collations.
Improved Police startup ordering so its database migration completes before records and other server systems load.
Other Changes
Improved shared tablet controls and theme behavior while removing browser filter effects that could render inconsistently in FiveM CEF.
Updated bundled translations for job-vehicle impounds, OP Garages actions, ankle-monitor persistence, and related validation messages.
Changed Files
sky_policejob/config/config.lua
sky_policejob/config/functions.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.27.11.28.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Install sky_base1.36.0 and sky_jobs_base1.39.0, including the Jobs Base fleet-impound SQL migration. Stop the server and back up the complete Police resource, Job Configurator tables, and Police/Jobs Base vehicle data.
Delete the old folder and install the complete 1.28.0 package. Do not mix the old config/functions.lua, manifest, built UI, locales, or source files with this release.
Add the new ankle-monitor setting to the existing table. The path was absent in 1.27.1 and ships enabled:
config/config.lua
Config.AnkleMonitor.persistOnDisconnect = true
In the table definition, insert persistOnDisconnect = true after the unchanged returnOnRemove = true field and before the unchanged placeDistance = 2.0 field. /jobconfig stores this setting as ankleMonitorPersistOnDisconnect, and a saved value overrides Lua. true keeps active monitors in the database across disconnects/restarts; false removes the active monitor when the target leaves.
Start from the new config/functions.lua. In 1.27.1, Config.Functions.OpenImpoundForm handled supported external garage providers only and did not support OP Garages or persistent Jobs Base fleet vehicles. In 1.28.0, it checks a Jobs Base fleet vehicle first, asks for a reason and fee from 0 through 1000000, submits that action for server validation, and otherwise supports OP Garages by running its impoundmenu command. Config.Functions.StoreVehicle also adds the same OP Garages command path. Keep deliberate custom provider code only after merging those complete new branches.
Police adds no resource-owned SQL statement in this release. The required impounded state and fleet columns belong to sky_jobs_base1.39.0; run that complete migration before starting Police. No new Police inventory item, image, stream asset, or provider secret is required.
Restart Base, Jobs Base, and Police in order. Test a normal owned-vehicle impound, a persistent job-fleet impound and release, OP Garages storage/impound, ankle-monitor reconnect/restart behavior, explicit removal/cutting, registry lookup, and both jail-breakout steps.
Version 1.27.1
Update sky_base to 1.35.1 and sky_jobs_base to 1.38.1 before updating sky_policejob.
Highlights
Improved the built-in frontend fallback catalogue so missing translated Police, record, evidence, dispatch, and jail keys remain readable.
Notable Changes
Fixed an issue where a complete 1.27.0 feature installation could still show blank or placeholder tablet labels.
Other Changes
Updated the package manifest for the 1.27.1 compatibility set.
Changed Files
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
Update InstructionsWhat to copy, what to keep and what to check1.27.01.27.1
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update Base to 1.35.1 and Jobs Base to 1.38.1, stop the server, and back up Police.
Delete the old resource and install the complete 1.27.1 package, especially its manifest, built UI, and locale defaults.
No public config value, /jobconfig key, SQL statement, item, image, stream asset, or provider setting changed.
Restart dependencies and Police, then verify the tablet and every translated Police view shows usable text.
Version 1.27.0
Update sky_base to 1.35.0 and sky_jobs_base to 1.38.0 before updating sky_policejob.
Highlights
Cross-job police records - cases, reports, warrants, BOLOs, courses, and qualifications can be shared read-only with selected jobs while retaining source-job context.
Direct warrant and BOLO links - warrants can link multiple citizens and BOLOs can link multiple plates for faster record navigation.
Variable crime-scene tape - officers can place item-backed streamed barriers from one to twelve meters with configurable sections, sag, collision, access, and item return.
CCTV motion detection - clients detect moving player/vehicle entities through the configured speed, range, field-of-view, and line-of-sight filters, while the server confirms reporter distance and applies the per-camera dispatch cooldown.
Notable Changes
Police/Sheriff sharing defaults are available in the Jobs Base Share tab and keep linked records read-only outside the owning job.
Shots-fired dispatch now supports separate normal and suppressed probabilities.
Job-fleet vehicles use the new Jobs Base parking lifecycle.
Weapon flashlights can reveal field evidence, while duplicate jailbreak blips are removed.
Dynamic citizen/vehicle selections improve warrant and BOLO editing.
CCTV clients scan their current ped or vehicle with the configured minimum speed, camera cone, line of sight, and client cooldown. The server confirms that the reporting player remains near the camera and applies the per-camera alert cooldown before dispatching.
Other Changes
Jail electrical-box interactions are enabled by default and obsolete electrical/fence blips are hidden.
Police tablet, evidence, CCTV, records, tape, dispatch, jail, and sharing copy was completed across bundled locales.
Manual and automatic database schemas now inherit the active database character set and collation.
clear.sql now removes warrant/BOLO link rows before their parents; it remains a destructive reset tool and is not an update migration.
Update InstructionsWhat to copy, what to keep and what to check1.26.01.27.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update sky_base to 1.35.0 and sky_jobs_base to 1.38.0. Stop the server and back up the complete Police resource, Job Configurator data, and every sky_job_* Police table.
Delete the old folder and install the complete 1.27.0 package. Keep the new manifest, source, built UI, locales, inventory image, and all tape stream files together.
Add the new police_sharing_defaults block before Config.Jobs, then set sharing = police_sharing_defaults on each intended Police/Sheriff job:
config/config.lua
local police_sharing_defaults = {
enabled = true,
records = {
cases = { enabled = true, jobs = {}, groups = { "police" } },
reports = { enabled = true, jobs = {}, groups = { "police" } },
warrants = { enabled = true, jobs = {}, groups = { "police" } },
bolos = { enabled = true, jobs = {}, groups = { "police" } }
},
training = {
courses = { enabled = true, jobs = {}, groups = { "police" } },
qualifications = { enabled = true, jobs = {}, groups = { "police" } }
},
links = { warrantSubjects = true, boloVehicles = true }
}
Empty jobs = {} exposes nothing outside the listed Jobs Base group. Configure actual target jobs in /jobconfig on the Share tab.
Add { name = "crime_scene_tape", label = "Crime Scene Tape", price = 150 } to each intended Config.Jobs[*].shop, then add this complete block:
Add the complete Config.Cctv.motionDetection block: enabled/default-camera enabled true, radius 25.0, FOV 90.0, minimum speed 0.35, check interval 750, client cooldown 5000, alert cooldown 60, and jobs { "police" }. The client scans its current ped or vehicle for speed, radius, FOV, line of sight, and client cooldown; the server confirms reporter distance and the per-camera alert cooldown before creating the dispatch. These values and the entire Crime Scene Tape block are /jobconfig settings; saved overrides take precedence. Exact /jobconfig keys
Shots fired: dispatchShotsFiredChance and dispatchShotsFiredSuppressedChance.
Share-tab recipients and direct-link toggles are saved per-job sharing data, not ordinary global setting keys.
With automatic migration disabled, execute the complete new import.sql. It adds motion_alerts TINYINT(1) NOT NULL DEFAULT 1 to sky_job_cctvcams and creates sky_job_warrant_subjects plus sky_job_bolo_vehicles with their unique keys, indexes, and foreign keys. With Config.AutoExecuteQuery = true, restart performs the equivalent migration. All shipped schema definitions now inherit the active database character set and collation.
Register the stackable crime_scene_tape item (suggested weight 750) and copy crime_scene_tape.png into the inventory image folder. Do not run clear.sql during an update; it permanently deletes Police data. Restart dependencies and Police in order, then test sharing, linked subjects/plates, tape placement/removal, motion alerts, shots fired, jail interactions, and evidence discovery.
Version 1.26.0
Update sky_base to 1.34.0 and sky_jobs_base to 1.37.0 before updating sky_policejob.
Highlights
Advanced speed-camera review queue - captures can be held for authorized tablet review instead of billing immediately, with evidence requirements, owner lookup, front/rear recognition rules, unregistered-vehicle handling, suspected-plate safeguards, filtering, approval, invoicing, and discard actions.
External tablet support - Police apps run inside LB Tablet and RoadPad with inherited sessions, authorization retries, route validation, lifecycle message relay, and clean return/close behavior.
Notable Changes
Review rows are claimed safely so two officers cannot process the same capture, and failed billing, missing offences, incomplete owner lookup, or unavailable providers return the capture to a clear actionable state.
Speed-camera reviews show the localized new badge and keep the review permission tied to the configured management permission ID.
Jail electric-box and fence blips refresh immediately after creator/configuration updates with proper cache invalidation; saved Job Configurator data intentionally owns those blips when active, while manual file overrides remain effective in file-config mode.
Police tackle can require sprinting and ships with that requirement enabled to prevent accidental tackles during normal movement.
Billing actions now validate the configured Police job and duty state on the server, while ankle-monitor client detection changed from generic configured-job state to Police-specific job state.
Vehicle registry profiles and owner names are loaded through a consolidated query instead of repeated per-record lookups.
CodeM Garage storage calls now use stored state 1 and the correct impound or Garage destination key.
Ticket previews and recipient receipts can hide the citizen name without changing billing identity or history.
Billing previews, recipient receipts, and Citizens billing history now show the linked offence ID.
Server integrations can resolve a framework-registered vehicle by normalized plate through exports["sky_policejob"]:ResolveRegisteredVehicle(plate), receiving its plate, owner, model, and color data or nil.
Other Changes
Scanner, radar, camera, jail, VIN, fingerprint, creator, billing, and interface feedback was localized or clarified.
Czech coverage was completed, Italian was added, Finnish and Polish wording was corrected, and Serbian received both Tackle.Errors.not_sprinting and radial.actions.tackle.states.notSprinting sprint-required hints.
Shared form controls, date ranges, range styling, confirm dialogs, receipts, and responsive tablet surfaces were synchronized with Jobs Base.
The manifest registers both review modules, ships external-tablet icon assets, and keeps the rebuilt UI and runtime in one package.
Changed Files
sky_policejob/clear.sql
sky_policejob/config/config.lua
sky_policejob/config/functions.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.25.01.26.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update sky_base to 1.34.0 and sky_jobs_base to 1.37.0. Stop the server, back up the complete sky_policejob folder, and export all Police database tables.
Delete the old resource folder and install the complete 1.26.0 package. Replace fxmanifest.lua, source, the built UI, and every file in config/locales; start from the new config/config.lua and config/functions.lua.
Without /jobconfig, add the three scalars that did not exist in 1.25.0: Config.Billing.showRecipientName = false, Config.PoliceTablet.apps.speedcam_reviews = true, and Config.PoliceTackle.needsSprint = true. The neighboring tackle values remain Config.PoliceTackle.enabled = true and Config.PoliceTackle.requireOnDuty = true. Billing previews, recipient receipts, and Citizens billing history now display a linked offenceId; confirm all three surfaces after the database migration. Billing requests now validate configured Police job and duty on the server, while ankle-monitor client detection now uses Police-specific rather than generic configured-job state.
Config.SpeedCam.advanced also changes from absent to this complete block:
Keep enabled = false until the database, image upload, permission 18, and complete runtime are verified. recognizedSides accepts only "front" and/or "rear"; pageSize accepts 5..100.
5. With /jobconfig, save these exact keys: billingShowRecipientName (false), tabletSpeedcamReviews (true), tackleNeedsSprint (true), speedCamAdvancedEnabled (false), speedCamAdvancedRecognizedSides ({ "rear" }), speedCamAdvancedReviewPermission (18), speedCamAdvancedRequireEvidence (true), speedCamAdvancedStoreUnregistered (true), speedCamAdvancedAllowFakePlateApproval (false), and speedCamAdvancedPageSize (25). Saved values replace the corresponding Lua defaults; the recognized-sides list is stored as a complete list.
6. In sky_policejob/config/functions.lua, make both CodeM calls exact:
-- Impound: old -> new
TriggerServerEvent("codem-garage:stored", plate, 0, "Impound Garage")
TriggerServerEvent("codem-garage:stored", plate, 1, "impound")
-- Normal storage: old -> new
TriggerServerEvent("codem-garage:stored", plate, 0, "Impound Garage")
TriggerServerEvent("codem-garage:stored", plate, 1, "Garage")
When Config.AutoExecuteQuery = false, run the complete sky_policejob/import.sql. For an existing sky_job_billing_history, also ensure the new nullable column exists because CREATE TABLE IF NOT EXISTS does not alter an existing table:
ALTER TABLE `sky_job_billing_history`
ADD COLUMN IF NOT EXISTS `offence_id` VARCHAR(32) NULL AFTER `offence_category_id`;
The new sky_job_speedcam_reviews schema is:
Column
Type/default
id
BIGINT NOT NULL AUTO_INCREMENT, primary key
owner_job
VARCHAR(80) NOT NULL
camera_id
INT NOT NULL
camera_name
VARCHAR(64) NOT NULL
plate
VARCHAR(24) NOT NULL
registered_owner_identifier
VARCHAR(80) NULL
registered_owner_name
VARCHAR(120) NULL
offence_id
VARCHAR(32) NULL
offence_name
VARCHAR(120) NULL
offence_category_id
VARCHAR(32) NULL
offence_category
VARCHAR(64) NULL
amount
INT NOT NULL DEFAULT 0
measured_speed
DECIMAL(8, 2) NOT NULL
speed_limit
INT NOT NULL
tolerance
INT NOT NULL DEFAULT 0
overage
INT NOT NULL
speed_unit
VARCHAR(8) NOT NULL DEFAULT 'km/h'
capture_side
VARCHAR(8) NOT NULL
evidence_url
TEXT NULL
evidence_image_id
VARCHAR(128) NULL
suspected_fake_plate
TINYINT(1) NOT NULL DEFAULT 0
owner_lookup_completed
TINYINT(1) NOT NULL DEFAULT 0
status
VARCHAR(24) NOT NULL DEFAULT 'pending'
reviewed_by
VARCHAR(80) NULL
reviewed_by_name
VARCHAR(120) NULL
reviewed_at
DATETIME NULL
created_at
DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
updated_at
DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
The table uses ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci. It also creates idx_speedcam_review_queue (owner_job, status, created_at), idx_speedcam_review_plate (plate), and idx_speedcam_review_owner (registered_owner_identifier). The shipped follow-up ALTER TABLE ensures owner_lookup_completed TINYINT(1) NOT NULL DEFAULT 0 exists on an earlier copy of this table.
8. Never run sky_policejob/clear.sql for an update, a failed review, or routine cleanup. It now deletes review rows too, but remains an optional destructive reset of the complete Police dataset.
9. Server resources can resolve a framework-registered vehicle through the guaranteed external API exports["sky_policejob"]:ResolveRegisteredVehicle(plate). It trims surrounding whitespace, uppercases the plate, limits it to 16 characters, and returns plate, owner_name, owner_identifier, model, and color for a match. The current framework-table query returns image_url and image_id as nil and tags, notes, and cases as empty tables; it does not return linked Police-profile data. Invalid or unknown plates return nil.
10. When Config.UseJobConfigurator = true, saved interaction settings own the jail electric-box and fence-cut blips and manual blipOverrides are ignored. When it is false, file-config interaction blips and manual overrides remain active. Both modes now refresh those blips after creator/configuration updates without a resource restart.
11. Restart Base, Jobs Base, and Police in that order. No new Police inventory item is required. Verify the external vehicle resolver's normalization, returned plate/owner/model/color fields, expected empty profile fields, and nil result, then check visible offence IDs, billing authorization, ankle-monitor Police-job detection, the full SQL schema/charset/collation, and the advanced review flow.
Version 1.25.0
Update sky_base to 1.33.0 and sky_jobs_base to 1.36.0 before updating sky_policejob.
Highlights
Expanded jail configuration - jail zones, prisoner blips, management terminals, and electric-box blips can be controlled independently so each audience sees only the intended interactions.
Safer evidence and restraint flows - weapon names and serials are resolved authoritatively, restraints live in a dedicated radial submenu, and target actions use the shared Jobs Base validation path.
Offline citizen licenses - supported Base providers can update license data for citizens who are not currently connected.
Notable Changes
Social-work records can be deleted through the current tablet flow.
Police carry now uses the central Jobs Base runtime and gains an explicit carrier-in-vehicle setting.
Police-owned target entries require the Police grant, preventing duplicates when central civilian interactions are enabled.
Runtime configuration updates, jail state, dispatch, speed-camera, evidence, GPS, and tablet systems synchronize more consistently.
Ordered item and weapon image sources are used for inventory and evidence previews.
Added a complete Serbian locale.
Other Changes
Added an optional, transaction-wrapped clear.sql maintenance script for a deliberate Police data reset.
Deterministic manifest loading prevents duplicate client and server registrations.
Blip values are normalized before reaching FiveM natives.
Changed Files
sky_policejob/clear.sql
sky_policejob/config/config.lua
sky_policejob/config/locales/*
sky_policejob/fxmanifest.lua
sky_policejob/import.sql
sky_policejob/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.24.01.25.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update sky_base to 1.33.0 and sky_jobs_base to 1.36.0.
Back up Police plus the database, delete the old resource folder, and install the complete 1.25.0 package.
Without /jobconfig, add Config.PoliceCarry.allowCarrierInVehicle = false. With /jobconfig, review and save the managed carryAllowCarrierInVehicle value; the saved value overrides the generated Lua default.
Run the updated import.sql when automatic migration is disabled. It adds sky_job_offence_categories.color VARCHAR(7) NOT NULL DEFAULT '#2563EB' plus court_required TINYINT(1) NOT NULL DEFAULT 0, criminal_record TINYINT(1) NOT NULL DEFAULT 0, and nullable bail_amount INT to sky_job_offences.
Do not run clear.sql during a normal update; it deletes Police-owned data and is only for an intentional reset after a verified database backup.
No item, image, or stream asset is required. Restart Base, Jobs Base, and Police in that order.
Version 1.24.0
Update sky_base to 1.32.0 and sky_jobs_base to 1.35.0 before updating sky_policejob.
Highlights
One shared restraint workflow - Police now uses the Jobs Base system for handcuffs, zipties, leg restraints, head bags, escorting, vehicle placement, searches, escape attempts, and administrator restraint commands.
Clearer Police radial menus - person and vehicle actions are grouped into localized submenus, with ziptie and head-bag actions available from the same contextual menu.
Expanded garage compatibility - parking and impound actions now support CodeM Garage and Hex Garage V3, while JG Advanced Garages storage is handled more reliably.
More reliable speed cameras - camera repair, durability, synchronization, and automatic invoice source labels remain consistent across players.
Notable Changes
Tackled suspects are cuffed with the correct rear-cuff pose.
Garage state changes validate Police access, duty, distance, vehicle identity, and request timing before updating supported provider records.
Shared interaction keybinds are now configured once in sky_jobs_base instead of being duplicated in Police.
Billing can show the Police job or configured speed-camera name as invoice source context on supported providers.
Missing Base or Jobs Base dependencies are reported clearly during startup.
Other Changes
Removed duplicate Police-owned restraint runtime, overlay, configuration, and inventory assets now supplied by sky_jobs_base.
Restored German characters and refreshed Police radial translations.
Updated the resource version to 1.24.0.
Update InstructionsWhat to copy, what to keep and what to check1.23.01.24.0
Simplified update
Update sky_policejob safely
Read the complete update instructions in one continuous guide.
Update sky_base to 1.32.0 and sky_jobs_base to 1.35.0.
Back up sky_policejob and both the Police and Jobs Base config files.
Delete the old Police resource folder and install the complete new 1.24.0 folder. A clean replacement is required because the old restraint scripts were removed.
Reapply custom function hooks inside the new files and keep the new CodeM, Hex Garage V3, and JG Advanced Garages integrations.
Move shared restraint permissions, keybinds, cuffs, zipties, leg restraints, head bags, escorting, vehicle placement, and search settings from Police into the new sky_jobs_base config. Do not restore Config.CivilianUse.
Copy the restraint item images from sky_jobs_base/config/inventory into your inventory image folder when required.
Restart sky_base, sky_jobs_base, and sky_policejob in that order and test all restraint and garage actions.
Version 1.23.0
Update sky_base to 1.31.0 and sky_jobs_base to 1.34.0 before updating sky_policejob.
Highlights
Offences and sentencing inside Reports - saved report suspects can receive linked offences with automatic jail, community-service, and fine totals directly in the Reports app.
Adjustable enforcement decisions - officers can reduce jail time and fines with percentage sliders, confirm the result, issue the fine, or send the selected suspect to jail without rebuilding the sentence manually.
Configurable jail-terminal requirement - jail assignments can require the officer to stand near a terminal belonging to the selected jail, preventing remote sentencing when that rule is enabled.
Consistent restraint state - cuff state is synchronized centrally across Police actions and the shared framework bridge so escort, search, tackle, restraints, and related integrations see the same result.
Notable Changes
Report enforcement validates authorization, target availability and distance, billing availability, jail limits, terminal proximity, and saved report state before applying a sentence.
Offence snapshots and enforcement history are stored with the report for later review.
Added the Full Dark theme throughout the Police tablet.
Disabled Police modules now remain silent instead of showing unavailable-feature notifications.
Jail fence blip overrides refresh correctly when jail data changes or a player joins.
Creator/device synchronization preserves the requesting player during database work.
Police item and weapon artwork now supports PNG and WebP fallbacks.
Other Changes
Prevented Police Configurator mutation deadlocks.
Updated the resource version to 1.23.0.
Update sky_base to 1.31.0 and sky_jobs_base to 1.34.0.
Download sky_policejob from the CFX Portal and create a database and resource backup.
Replace the /source folder, including the rebuilt interface under /source/html.
Replace /fxmanifest.lua so version 1.23.0 is loaded.
Replace /config/locales to install the report-enforcement translations.
If you do not use /jobconfig, merge these /config/config.lua changes manually:
Under Config.Jail, add requireJailTerminal = true and terminalRange = 5.0. Set requireJailTerminal = false only when officers should be allowed to assign jail time away from jail terminals.
Under Config.PoliceTablet, add reportEnforcement = { enabled = false }. Change it to true only after offences, billing, jail locations, and permissions have been reviewed.
Keep Config.Billing.range = 6.0 or choose your own maximum officer-to-target distance; the same value now also protects fines issued from reports.
If you use /jobconfig, verify the Report Enforcement, jail-terminal, and billing-distance settings before saving.
Run the updated /import.sql if automatic query execution is disabled. It adds the offences and enforcement_history columns to sky_job_reports.
Restart sky_policejob and test report saving, suspect selection, offence totals, reduced fines, jail-terminal distance, enforcement history, cuff/escort/search state, and disabled-module behavior.
Version 1.22.0
Update sky_base to 1.30.0 and sky_jobs_base to 1.33.0 before updating sky_policejob.
Highlights
Police tackle workflow - officers can tackle a nearby person with the configurable N key, then cuff or release them through localized follow-up controls and synchronized animations.
Gunshot-residue evidence - configurable GSR traces can be collected, washed off by water or rain, protected by gloves, and analyzed in the Evidence Laboratory with readable weapon labels.
Persistent wheel clamps - clamps are stored by plate and reapplied when persistent or garage vehicles are created again, so a server restart or park/unpark cycle no longer makes a clamped vehicle drivable.
Fake plate recognition - radar, helicopter camera, speed cameras, normal police tools, and the optional VIN check can distinguish a displayed plate from the vehicle's real identity.
Customizable vehicle radar layout - officers can reposition the radar HUD in game and reset it through configurable commands.
Notable Changes
Added job and vehicle-model exclusion lists for automatic speed-camera invoices; photos and dispatch alerts are still created.
Dispatch alerts can target configured Police jobs instead of a hardcoded job, and stun-gun shots are ignored.
Replaced the legacy impound system with the configured garage integrations and allowed nearest-vehicle parking from outside the driver seat.
Added per-job Police station blips and shared station locations.
Restrained players can no longer open their inventory, and cuff busy state now synchronizes with that restriction.
Deleted cameras, jails, social-work data, and creator entries are removed from runtime state consistently.
Updated the server config load order and the resource version to 1.22.0.
Update sky_base to 1.30.0 and sky_jobs_base to 1.33.0.
Download sky_policejob from the CFX Portal and create a database and resource backup.
Replace the /source folder, including the rebuilt interface under /source/html.
Replace /fxmanifest.lua so the new config load order and version 1.22.0 are active.
Replace /config/locales, /config/functions.lua, /config/sv_functions.lua, and /config/inventory, then restore customer-specific changes from your backup.
If you do not use /jobconfig, merge these /config/config.lua changes manually:
Add the complete blip table to every Police entry in Config.Jobs; the shipped station defaults use sprite 60, color 38, scale 0.85, display 4, short-range mode, and the station name.
Add gsr_test to every job shop that should sell GSR test kits.
Add Config.CivilianUse.tackle = false and copy the complete Config.PoliceTackle block, including the N key, cuff/release controls, distances, duty requirement, and animations.
Add a jobs list to each enabled entry in Config.DispatchAlerts.
Copy the complete Config.EvidenceField.gsr block for trace duration, washing, glove protection, check interval, and ignored weapons.
Add Config.SpeedCam.billingExcludedJobs = {} and billingExcludedModels = {}. Fill these arrays with the job names and vehicle spawn names that must never receive an automatic speed-camera invoice.
Add customizeCommand = "radarlayout" and resetLayoutCommand = "radarreset" to Config.VehicleRadar.
Copy the complete Config.FakePlateRecognition block and review its VIN command, scanner requirement, allowed jobs/grades, cooldown, and audit settings.
Remove the obsolete impoundcreator command permission, Config.CreatorInteractions.impoundcreator, and the complete legacy Config.Impound block because vehicle storage now uses the configured garage integration.
If you use /jobconfig, verify the station blips, tackle, GSR, dispatch targets, speed-camera exclusions, radar commands, and fake-plate settings there before saving. The legacy impound config must still be removed manually from old files.
Run the updated /import.sql if automatic query execution is disabled. It creates the persistent sky_job_wheel_clamps table.
If GSR items are not registered automatically by your inventory, add gsr_test and collected_gsr_test with the bundled images.
Restart sky_policejob after both base resources and test tackle/cuff, GSR collection, radar layout, fake plates, speed-camera exclusions, garage parking, and clamp restoration after a respawn.
Version 1.21.0
Update sky_base to 1.29.0 and sky_jobs_base to 1.32.0 before updating sky_policejob.
Highlights
Stations can be shared between Police jobs - additional Police jobs can reuse station interactions while keeping their own storage, garage, wardrobe, and job configuration.
Multiple stations per Police job - each configured Police job can now manage its own station locations directly in the Job Configurator.
Modernized police tablet selects - tablet filters and forms now use consistent searchable controls with keyboard navigation, stable dropdown placement, and improved long-text handling.
Citizen searches can match multiple identifiers - roster filtering now supports several sanitized identifiers in one request, improving compatibility with multi-character data.
Runtime job updates now reach police features - evidence stations and vehicle radar permissions refresh when configured jobs change.
Notable Changes
Inventory access follows restraint state - cuffed players can no longer access their inventory until they are uncuffed.
Ankle monitor synchronization stabilized - monitor state now follows player and resource lifecycle more reliably, including restart synchronization.
Player targeting restored - direct and radial targeting work again for supported police interactions.
Jail interactions improved - electric interactions, contraband handling, cleaning work, and integer configurator settings are more reliable.
Evidence details expanded - ballistic evidence can display weapon serial information when available.
Update sky_base to 1.29.0 and sky_jobs_base to 1.32.0.
Download sky_policejob from the CFX Portal and create a backup.
Replace the /source folder.
Replace /fxmanifest.lua so version 1.21.0 is loaded.
Restart sky_policejob after the two base resources.
No SQL migration is required.
Version 1.20.0
Update sky_base and sky_jobs_base first - install the matching releases before updating sky_policejob.
Highlights
Police radial actions are now more target-aware. Carry, escort, billing, search, and restraint-related actions now react more reliably to the officer's intended target instead of depending only on the nearest player.
Speed camera billing is more accurate and flexible. Automated police billing now supports cleaner issuer/source handling, and speed camera fines reflect ownership more consistently.
Jail job configurator values are now respected correctly. In-game /jobconfig changes for jail-job settings such as the cleaning trashGoal now apply more reliably instead of falling back to older/default behavior.
Notable Changes
Cleaner jail creator defaults - several jail-creator points now ship without direct interaction and without unintended default marker behavior, making creator-driven jail setup cleaner out of the box.
Client locale loading improvements - the police UI now loads client locales more efficiently, reducing startup overhead and helping prevent unnecessary freezes.
Evidence Lab serial visibility - ballistic scan results now show the weapon serial number when the fired weapon metadata provides one, making casing-to-weapon matching more direct.
Sheriff prop defaults cleanup - the shipped sheriff prop defaults no longer include the incident board.
Other Changes
Internal police billing and speed camera flows were cleaned up for more consistent automated behavior.
Update sky_base and sky_jobs_base first - install the matching releases.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace /fxmanifest.lua so version 1.20.0 is loaded.
Replace /config/init.lua so the updated client locale-loading behavior is active.
If you use the bundled locale files, replace the /config/locales folder.
Update /config/config.lua, or merge the changes below:
Remove the default incident board prop from shipped sheriff defaults if your config still contains it:
Update the jail creator point defaults inside your existing Config.CreatorInteractions.jailcreator block if you keep an older version. These points should keep direct interaction disabled:
Restart sky_policejob, then verify target-based police actions, speed camera fine attribution, jail creator flows, and general police UI startup behavior.
Version 1.19.0
Update sky_base and sky_jobs_base first - install the matching releases before updating sky_policejob.
Highlights
Police billing was expanded and refined. Billing flows now support more flexible handling, including improved fine behavior for police and speed camera use cases.
Jail configuration and jail workflows were improved. Jail setup through the configurator is broader and more reliable, including release handling, mugshot-related syncing, and additional creator controls.
Live config-driven police item behavior is stronger. More police item and restraint-related settings now react more reliably to configurator updates without relying on older static behavior.
Notable Changes
Preset offences now tie into police billing more cleanly - billing workflows can make better use of configured offence data.
Consent-oriented billing options - police billing now supports more controlled invoice handling where needed.
Speed camera fine rules - speed camera billing behavior is more configurable and consistent.
Ankle monitor radial workflow - ankle monitor actions are now available through a more direct police interaction flow.
Jail creator expansion - jail setup now includes broader creator support, including configurable release handling and improved creator-side jail controls.
Mugshot and jail-config synchronization - mugshot-related settings and jail configuration updates now stay in sync more reliably.
Jail doctor treatment flow - jail doctor revive and heal handling now behaves more consistently.
Runtime police item refreshes - configurable police item bindings now refresh more reliably after configuration updates.
Improved spike strip reliability - spike strip detection is now more accurate during real vehicle movement.
Arabic locale added - sky_policejob now includes Arabic language support.
Localized configurator labels - more job configurator elements now use localized police-facing labels.
Other Changes
Internal helper cleanup reduced duplicated shared logic across the police job.
Shared frontend utility cleanup improved consistency across the in-game police interface.
Update sky_base and sky_jobs_base first - install the matching releases.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace /fxmanifest.lua so version 1.19.0 is loaded.
Update /config/config.lua, or merge the changes below:
Police billing modes and preset amounts - update your existing Config.Billing block:
Remove the local police prop-placement block - shared prop-item handling now comes from the matching sky_jobs_base release. If your config.lua still contains this block, remove it:
Restart sky_policejob, then verify billing, speed camera fines, jail setup/release flow, ankle monitor actions, and relevant /jobconfig flows.
Version 1.18.0
Update sky_base and sky_jobs_base first - install the matching releases before updating sky_policejob.
Highlights
Speed camera billing. Speed cameras can now issue configurable automatic bills for matching offences, using the shared billing flow.
Jail flow improvements. Jail intake, prisoner outfits, jail doctors, jail timers, release handling, fence exits, mugshot behavior, and jail zone handling were improved so prison workflows behave more consistently across restarts and edge cases.
Shared prop item flow. Police prop placement now uses the shared jobs-base prop flow, with improved streamed prop handling, spike strip registration, and an option to return consumed prop items when removed.
Notable Changes
Jail doctor revive support - jail doctors can now revive dead prisoners where configured, not only heal living players.
Prisoner outfit handling - prisoners are dressed during mugshot intake, and the jail outfit now applies consistently across frameworks and clothing systems without changing the saved civilian outfit.
Jail creator refinements - jail release points, jail interaction points, jail zones, fence exits, and fence-cut exits are easier to manage through the configurator, with more consistent editing and placement behavior.
Jail zone setup - jail zones can now be placed and adjusted more reliably through the in-game configurator flow, including better visibility and management during setup.
Mugshot and jail spawn behavior - jail intake, mugshot capture, jail spawn teleport, and prisoner clothing application now stay in sync more reliably across different jail setups.
Configurator defaults and resets - jail and mugshot-related configurator resets now restore the expected default values more reliably.
Numeric configurator input improvements - jail-related configurator inputs now preserve decimal values more predictably, which helps when working with exact position and camera coordinates.
Tracker display names - GPS tracker and ankle monitor history now resolves attached-by information to roleplay names where possible.
Impound improvements - impound behavior was refined and select inputs gained filtering for easier use.
Cuff and ziptie items - handcuff and ziptie item requirements, item consumption, and return-on-remove behavior were clarified and made more consistent.
UI polish - select dropdowns, popups, configurator controls, and jail-related editing flows now keep their sizing, background, and layering more reliably.
Shared configurator reliability - shared creator-driven configurator sections and linked option refreshes behave more consistently when used through the police job configurator.
Other Changes
Added minGrade documentation for police shop items.
Added documentation comments for interaction ped spawn profiles.
Radar and jail doctor notifications were reduced where they did not add useful player feedback.
The Speed Camera app now falls back to the shipped app identifier when needed.
Rebuilt and verified the police in-game interface bundle.
Included the latest shared configurator compatibility updates from sky_jobs_base for police setups that rely on /jobconfig.
Update sky_base and sky_jobs_base first - install the matching releases.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder (this also contains the rebuilt in-game interface under source/html).
Replace /fxmanifest.lua so version 1.18.0 is loaded.
Replace /config/style.css if you customized the shipped interface styling.
Replace /config/config.lua, or apply the additive options below.
Add the new prop item return option inside your existing Config.PropPlacement block:
Config.PropPlacement = {
enabled = true,
vehicleAccess = true,
requireOnDuty = true,
consumeItem = true,
+ returnItemOnRemove = true, -- Give the consumed item back when the placed prop is removed.
itemNames = {
-- your existing prop item mapping stays as it is
}
}
Make sure billing is enabled in your existing Config.Billing block:
Config.Billing = {
+ enabled = true,
-- the rest of your billing settings stay as they are
}
Add the new automatic speed camera billing toggle:
Config.SpeedCam = {
enabled = true,
+ billingEnabled = true,
item = "speedcam",
-- the rest of your speed camera settings stay as they are
}
If you customized speed camera visuals, compare the shipped Config.SpeedCam block for the new capture timing options (flashDurationMs, cameraEaseMs). The defaults are recommended.
Review the shipped Config.CreatorInteractions section for jail spawn, jail release, jail interaction, jail fence exit, social work, and impound creator entries. Existing setups keep working, but these entries are needed if you want to manage those points through the creator UI.
Review the shipped Config.Jail section for jail outfit, jail enable toggle, zone grace, release, fence-exit, mugshot, and zone-related options. Existing jail setups keep working, but copying the new config and reapplying your custom values is the safest update path.
Review your existing Config.PoliceCuffs block. The shipped default now requires handcuff and ziptie items and only consumes them when the related item requirement is enabled:
Restart sky_policejob, then verify speed camera billing, jail assignment/release, jail doctor behavior, prop placement, cuffs/zipties, and /jobconfig.
Version 1.17.0
Update sky_base and sky_jobs_base first — install the matching releases. This release also aligns the inventory calls with the matching sky_base release; running it against an older sky_base can break item add/remove.
Highlights
🚓 Full Job Configurator integration — configure the entire police job in-game, no config editing. The police job now plugs into the shared in-game Job Configurator (/jobconfig), so almost every part of the job can be set up and tuned live from a single interface instead of editing config.lua by hand. Changes are stored centrally and applied without a restart, and multiple police jobs (e.g. LSPD / Sheriff / FIB) can each be configured independently. Coverage includes:
Prop items — the deployable/usable police props and their behaviour.
Dispatch alerts — which alerts fire and who receives them.
Tablet apps — which apps are available and how they appear.
Restraints — cuffing / restraint settings.
Tracking — GPS / tracking-device behaviour.
Evidence — the evidence system settings.
Jail — jail and incarceration settings.
Devices — police devices.
Vehicle radar — the in-vehicle speed radar.
A new Config.UseJobConfigurator toggle (default true) decides whether these settings come from the in-game configurator or from the plain Lua job definitions — set it to false to keep managing everything in config.lua as before. This requires the matching sky_jobs_base release that provides the Job Configurator.
Manual citizen & vehicle profiles. Officers can now create, edit, and delete citizen and vehicle records manually on the police tablet, in addition to the automatically linked profiles.
Speed Cams app finalized. The former "Blitzer" app is now consistently named Speed Camera across the interface, configuration, and database. Existing Speed Cams subscriptions are migrated automatically — no data is lost.
Notable Changes
RoadPhone support — the police phone apps now also work on RoadPhone (detected automatically), and custom phone app registration gained new options: darkmode, url, allowJobs, and disallowJobs. The Speed Camera app uses the new dark-mode option.
Per-alert dispatch targeting — dispatch alerts can now be limited to specific jobs (e.g. the "officer down" alert defaults to police) via a per-alert jobs list in Config.DispatchAlerts.
Jail creator labels — every jail creator interaction (terminal, job NPCs, inmate roles, canteen, electrical box, fence cut, confiscated items, public blip) now carries a clear label in the creator UI.
Speed Camera config defaults — the license-plate overlay on capture photos (plateImageOverlay) now defaults to off; enable it explicitly if you want it.
Ballistic traces fix — bullet traces now use the actual firing state for more accurate results.
Other Changes
Renamed the Speed Cams subscription table to sky_job_speed_camera_app_subscriptions; existing subscriptions are carried over automatically on update.
Migrated internal item add/remove calls to the new sky_base inventory signature (slot + metadata).
Updated the Speed Camera / phone app localization strings across the bundled languages.
Rebuilt and verified the police NUI production bundle.
Update sky_base and sky_jobs_base first — install the matching releases. The inventory-call change depends on the new sky_base release.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder (this also contains the rebuilt in-game interface under source/html).
Run the updated import.sql. It creates the renamed Speed Cams subscription table; existing subscriptions are migrated automatically. With Config.AutoExecuteQuery enabled (default) this runs on start, otherwise import it manually.
Replace the /config/locales folder (Speed Camera / phone app strings updated across languages).
Replace /fxmanifest.lua so version 1.17.0 is loaded.
Replace /config/config.lua, or apply the changes below (defaults keep the previous behaviour):
Rename the Speed Cams config block.Config.BlitzerApp is now Config.SpeedCameraApp. If you customized the old block, copy your values into the renamed one. The icon and route were renamed and plateImageOverlay.enabled now defaults to false:
-Config.BlitzerApp = {
+Config.SpeedCameraApp = {
enabled = true,
identifier = "sky_speedcams",
name = "Speed Cams",
- icon = "nui://sky_policejob/source/html/blitzer-icon.svg",
+ icon = "nui://sky_policejob/source/html/speed-camera-icon.svg",
- route = "/blitzer-app",
+ route = "/speed-camera-app",
plateImageOverlay = {
- enabled = true,
+ enabled = false, -- now off by default; set true to overlay the plate on capture photos
-- the rest of plateImageOverlay stays as it is
}
-- the rest of your Speed Cams settings stay as they are
}
Add the Job Configurator toggle near the top of config.lua (set false to keep using the plain Lua job definitions only):
Config.PrimaryColor = "#0093d0"
+-- Use the shared /jobconfig UI for Config.Jobs and selected Police Job settings.
+-- Set to false to use only the Lua job definitions below.
+Config.UseJobConfigurator = true
(Optional) Restrict a dispatch alert to specific jobs inside your existing Config.DispatchAlerts table:
Config.DispatchAlerts = {
officerDown = {
- enabled = true
+ enabled = true,
+ jobs = { "police" } -- optional: limit who receives this alert
},
-- the rest of your Config.DispatchAlerts settings stay as they are
}
(Optional) Jail creator labels were added to the Config.CreatorInteractions.jailcreator entries. They are cosmetic (shown in the creator UI). Take them from the new config.lua if you want the labels; nothing breaks without them.
Restart sky_policejob, then open /jobconfig to verify the police job configurator.
Version 1.16.0
Highlights
New Speed Cams (Blitzer) app. A new police tablet app shows speed-camera locations on the map and warns the driver as they approach one while in a vehicle. It supports an optional weekly subscription and is fully configurable through the new Config.BlitzerApp block.
Lighter, faster interface. The speed-cam photo capture was rebuilt on the game's native rendering (dropping a large rendering dependency and switching to on-demand capture), no-op blur styling was removed, and jail props now stream in around the player — all for better in-game performance.
Notable Changes
Speed Cams app — shows speed-cam locations and in-vehicle proximity warnings, with an optional subscription (Config.BlitzerApp.subscription, default 15000 per week) and a configurable license-plate overlay on capture photos (plateImageOverlay). Subscriptions are stored in a new database table that is created automatically on start.
codem-phone and RoadPhone support — the police apps now also work on codem-phone and RoadPhone, detected automatically, so players on those phones can use them too. RoadPhone requires adding the returned/custom app entry to RoadPhone's config.json.
WebGL speed-cam capture — the speed-cam photo is now captured directly through the game view instead of a constant render loop, removing a large dependency and reducing overhead.
Distance-streamed jail props — solitary-cell props and persistent jail objects (dumpsters, electric boxes) now only spawn while a player is nearby, via Config.Jail.cellStreamDistance and Config.Jail.objectStreamDistance, so they no longer render across the whole map.
Jail job task blips — jail tasks now show map blips so they are easier to find.
Billing options — new Config.Billing.currency and Config.Billing.depositToSociety control which account/currency fines use and whether the money is deposited into the society account.
Interaction & billing fixes — a round of fixes to police interactions, billing, jail zones and the speed-cam flow for more reliable behaviour.
Item image fallbacks — the interface now falls back to an alternate image when an item's image is unavailable, avoiding blank icons.
Other Changes
Removed the no-op backdrop-filter styling from the interface for better in-game performance.
Widened the dropdown menus in the interface for readability.
Documented an optional per-prop streamDistance override for props (overrides the sky_jobs_base default prop streaming distance).
Removed an obsolete speed-cam capture locale string.
Update sky_base and sky_jobs_base first — install the matching releases.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder (this also contains the rebuilt in-game interface under source/html).
Run the updated import.sql to add the Speed Cams subscription table sky_job_blitzer_app_subscriptions. It is also created automatically on start while Config.AutoExecuteQuery is enabled.
Replace the /config/locales folder (new Speed Cams app strings; an obsolete speed-cam capture string was removed).
Replace /config/config.lua, or add the new options below (defaults keep the previous behaviour):
New Speed Cams block — add this complete new top-level section:
Add these two keys inside your existing Config.Jail table:
Config.Jail = {
+ cellStreamDistance = 100.0, -- only spawn solitary-cell props while a player is nearby
+ objectStreamDistance = 100.0, -- only spawn persistent jail objects (dumpsters, electric boxes) while a player is nearby
-- the rest of your Config.Jail settings stay as they are
}
Add these two keys inside your existing Config.Billing table:
Config.Billing = {
+ currency = nil, -- nil = default currency; set e.g. "bank" or a custom currency key
+ depositToSociety = nil, -- nil = deposit except for time-format currencies; true/false forces the behaviour
-- the rest of your Config.Billing settings stay as they are
}
Replace the /fxmanifest.lua (version 1.16.0).
Version 1.15.0
Highlights
Added a jailed confiscated items return marker for jail creator locations.
Added an admin command to remove active social work assignments from a player.
Added configurable jail restore and breakout behavior for multichar and prison-zone setups.
Improved SpeedCam violation handling with safer offence matching, billing handling, and optional police notifications.
Improved tablet closing behavior so the tablet closes reliably on both client and frontend.
Notable Changes
Confiscated inventories are only cleared after the inventory restore succeeds.
Added missing confiscated items return translations for all supported locales.
Fixed vehicle registry pagination stability.
Fixed admin unjail so players are released to the configured prison point.
Fixed duplicate public jail NPC spawns.
Fixed ankle monitor drop collision.
Updated German tablet wording and translated the Weapons App search button.
Update sky_base and sky_jobs_base first.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Update locales.
Merge the new config options into config/config.lua:
Added configurable shared job storage and personal locker capacities.
Added /jail [playerId] [months], allowing authorized admins to open the jail assignment UI for a specific player and choose the jail location.
Jail dispatches can now be sent to multiple configured jobs instead of only the police job.
Added the server export exports['sky_policejob']:isPlayerInPrison(source) for prison-state checks from other resources.
Citizens App bills can now include multiple selected offences in one bill.
Notable Changes
Improved Head bag position.
Jail terminal creator interactions now use localized labels.
German status labels for set/unset values were updated.
Improved SpeedCam capture reliability and cleanup coordinate normalization.
Prevented duplicate destroyed SpeedCam props from being created during cleanup.
Simplified shots-fired dispatch detection to reduce false or duplicate handling.
Fixed jail tracking after mugshot intake.
Added an early return to carry movement reset handling.
Update sky_base and sky_jobs_base first.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace fxmanifest.lua (now loads the new config/init.lua).
Add the new /config/init.lua file.
Important - the global table initialization moved to config/init.lua. If you keep your own config/config.lua instead of replacing it, remove these two lines from the top of the file (they are now set in init.lua):
If you use custom locale files, copy the new admin jail command, license dropdown, billing offence selection, and status label translation keys.
Version 1.13.0
Highlights
Added a new Weapons app to the Police Tablet with job-scoped weapon registrations, serial numbers, owner assignment, registration status, notes, tags, gallery photos, and linked case files.
Weapon ownership can now be verified directly against citizen records, helping officers check whether a weapon belongs to the selected person and whether the registration is valid, expired, revoked, lost/stolen, or on evidence hold.
Citizen, vehicle, case, report, and weapon linking now use searchable tablet selectors, so large servers no longer need to preload huge rosters into dropdowns.
Added configurable ziptie cutter support, including item checks, optional item consumption, civilian-use gating, and fallback support for the shared wire_cutter item.
SpeedCams can now capture vehicles from the rear as well as the front, improving ticket/photo coverage when vehicles pass a configured camera from the opposite direction.
Notable Changes
Jail assignment is safer: jails without a release point can no longer be used for new assignments, and authorized admins can force-release players with /unjail [playerId].
Manual citizen and vehicle registries gained exports for registering entries from other resources while database autofill is disabled.
Manual citizen and vehicle entries can now be deleted from the tablet when autofill is disabled.
Police garage vehicles can define propCounts, allowing each vehicle to limit how many configured props it can carry.
Creator interaction points can now define custom marker size and interaction distance.
Weapon records can be linked to real case records, and saved case IDs are validated server-side.
Fixes
Citizen app performance performance improvement on large tablet datasets.
Fixed evidence compartment creation.
Update sky_base and sky_jobs_base first.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Update locales
Merge the new config options into config/config.lua:
If Config.AutoExecuteQuery = false, run the updated import.sql manually so the new sky_job_weapon_profiles table is created.
Check every configured jail in the Jail Creator and make sure a release point is set before using jail assignment.
Version 1.12.0
Highlights
Police Tablet cases can now be archived and restored from a separate archived cases view, keeping active case lists cleaner without deleting old records.
Added /adminuncuff [playerId] so authorized admins can force-remove handcuffs or zipties from a player.
Case evidence photos now open in a larger preview and ask for confirmation before removal.
Citizen and vehicle registry autofill can now be disabled per registry app, allowing servers to use only manually maintained tablet records.
SpeedCam damage can optionally be restricted to configured weapons.
Notable Changes
Tablet dates now follow the selected script locale, and offence type labels are translated across tablet views.
Offence cards and Speed Violation range labels now fit better inside the tablet layout, and missing offence fields are highlighted directly while saving.
Social work assignment times are now stored and migrated as timestamps.
Evidence Laboratory slots now support inventories that return string slot IDs.
Other Changes
Cuffs and leg restraints are now removed automatically when a player is jailed.
Citizens using the configured cut item can cut an ankle monitor without needing a police job.
German translations were completed for handcuff permission and SpeedCam billing/photo errors.
Creator data now loads only from the database-backed creator storage instead of falling back to old legacy files.
Update sky_base and sky_jobs_base first.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder if you use the bundled locales.
Merge the new config options into config/config.lua:
If Config.AutoExecuteQuery = false, run the updated import.sql manually so the new registry profile columns, sky_job_cases.archived_at, and social work timestamp column changes are applied.
If you use custom locale files, copy the new translation keys.
Version 1.11.0
Highlights
Billing and SpeedCam fines can now route money to the society account of the officer's configured job instead of always using one global police account.
Jail Creator now has more control over jail map blips, including a public jail location blip and a toggle for jail-only restricted blips.
Citizens App profiles now support manually stored citizen jobs and license display/editing in the Police Tablet.
Handcuffs and zipties can now consume their configured restraint item on use and return it when restraints are removed.
Notable Changes
Added per-job societyAccount support in Config.Jobs; Config.Billing.account remains as a legacy fallback.
SpeedCams now store their owning job and use that job for gallery routing and automatic Speed Violation billing.
Citizens App profile controls were tightened up, with more compact linked vehicle and billing panels and improved offence search alignment in the issue-bill flow.
Other Changes
Moved the Citizens App license panel beside reports with equal-height profile cards.
Update sky_base and sky_jobs_base first.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales/en.lua and /config/locales/de.lua files if you use the bundled locales.
Merge the new config options into config/config.lua:
Config.Billing.account is still supported as a fallback, but new multi-job setups should set societyAccount on each Config.Jobs entry.
If Config.AutoExecuteQuery = false, run the updated import.sql manually so the new sky_job_speedcams.owner_job and sky_job_citizen_profiles.manual_job columns are created.
If you use custom locale files, copy the new Citizens App and Jail Creator
Version 1.10.0
Highlights
Citizens App can now issue bills directly from a citizen profile.
Citizen billing history now loads with pagination, making profiles faster and easier to use on servers with many bills.
Added Russian translations.
Added optional civilian use for handcuffs, zipties, and head bags through Config.CivilianUse.
Added Config.Jail.clearInventoryOnJail to decide whether jail should confiscate player inventories.
Added configurable SpeedCam flash color with Config.SpeedCam.flashColor.
Notable Changes
Evidence samples and the Evidence Laboratory now use the shared sky_base inventory metadata handling, improving compatibility with supported metadata inventories.
SpeedCam billing no longer sends an extra direct ticket popup in addition to the normal capture flow.
Jail creator interactions now work more reliably for all configured police-group jobs.
Social work carry jobs now use normal game movement again.
Placeable police prop items are enabled by default and item consumption is handled more reliably.
The Citizens App tag add button now adapts to longer translated button text.
Other Changes
Added exports and events for civilian restraint/head bag integrations.
Update sky_base and sky_jobs_base first.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales/en.lua, especially if you use custom locale files. This update adds billing text and the Russian locale.
Merge the new config options into config/config.lua:
Config.Jail = {
clearInventoryOnJail = true
}
Config.CivilianUse = {
cuffs = false,
zipties = false,
headBag = false
}
Config.SpeedCam = {
flashColor = { r = 220, g = 30, b = 30, a = 255 }
}
Check Config.PropPlacement.enabled. It is now enabled by default. Set it back to false if your server should not use item-based prop placement.
If your custom config still contains Config.JailJobs.carryBox.moveRateOverride, maxMoveBlend, or runMultiplier, remove those old carry movement options.
Remove any old sky_policejob/config/webhooks.lua file and configure FiveManage media uploads in sky_jobs_base/config/webhooks.lua.
If you use Evidence items or the Evidence Laboratory, make sure your updated sky_base is running so the shared inventory metadata handling is available.
Version 1.9.0
Highlights
Added handcuff status exports and extended handcuff exports with options.
Added SpeedCam notifications for captures that do not match a configured SpeedViolation offence range.
Notable Changes
SpeedCam damage handling is more stable, including better damaged/destroyed prop cleanup, per-camera damage debounce, and improved display updates.
SpeedCams now only submit a violation from the local driver client, reducing duplicate or irrelevant trigger reports.
Creator command permission checks now use ACE-backed Config.CommandPermissions through config/sv_functions.lua.
Other Changes
Reduced armed-player client polling for evidence and SpeedCam damage checks.
Fixed /stationcreator and related creator command permission denials.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Add or merge the new /config/sv_functions.lua file.
Add the new Config.CommandPermissions section to config/config.lua and adjust the allowed groups for your server.
Remove the old Config.OfficerMapBlips section from config/config.lua; officer/colleague blips are now configured in sky_jobs_base.
If you use custom locale files, copy the new ankle monitor self-test and SpeedCam unmatched-offence translation keys.
The file sky_policejob/config/sv_functions.lua is new. Drop it in with the rest of the config files; it ships with the update.
sky_policejob/config/config.lua now contains a Config.CommandPermissions block at the top. Adjust it if needed:
Vehicle registry search now supports owner names, making it easier to find vehicles from the Police Tablet.
Added a new option to disable shots-fired dispatch alerts while keeping the related system available.
Added configurable ignored weapons for shots-fired dispatch alerts, with stun guns ignored by default.
Added an optional wheel clamp setting to consume one wheel clamp item after successful placement.
Notable Changes
Police-only notifications are now only shown to players with the correct police job, reducing irrelevant alerts for civilians or other jobs.
Jail terminals and jail interactions now work correctly for configured police groups.
Improved SpeedCam, wheel clamp, spike strip, and shots-fired alert performance during regular gameplay.
Billing popups can now be closed with Escape.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Add the new Config.PoliceRadial.wheelClamp.consumeItem, Config.DispatchAlerts.shotsFired.sendDispatch, and Config.DispatchAlerts.shotsFired.ignoredWeapons options to config/config.lua.
Version 1.7.0
Highlights
Reworked SpeedCam photo capture
Added item-based police prop placement with configurable inventory item names, duty requirements, vehicle prop access, and item consumption.
Added configurable Police Tablet app availability so server owners can enable or disable individual tablet apps.
Added optional direct keybinds for common Police Radial actions, starting with handcuff and unhandcuff commands.
Notable Changes
SpeedCams now only trigger from the direction they are facing and include improved capture distance and trigger.
Officer map blips now avoid duplicated blips when syncing officer locations.
Fixed bug that Police Reports tablet app is not shown in tablet menu.
Cuffed player hand positioning now stays correct when ragdoll state changes.
Vehicle radar close behavior was fixed.
Other Changes
Added missing webshop entries for head bags and evidence-related items.
Added the headbag inventory image.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Add or merge the new /config/inventory/headbag.png item image.
Add the new Config.PropPlacement, Config.PoliceTablet, and Config.PoliceRadial.keybinds config sections/options to config/config.lua.
If you use custom locale files, copy the new SpeedCam photo and billing failure translation keys from the updated locale files.
Version 1.6.0
Highlights
Added officer-down and shots-fired dispatch alerts.
Added head bags with synced prop support and an obstructed-vision overlay, plus leg restraints for already cuffed suspects.
Added per-jail map blip controls in the Jail Creator so you can decide which jail terminals and NPC points appear on the map.
Notable Changes
Improved Police Tablet handling for larger servers with server-side pagination for Cases, Reports, Warrants, and BOLOs, faster vehicle list loading, safer request throttling, and automatic reopening of the last app after closing the tablet.
Citizens App now shows linked bills directly on the citizen profile.
Added a (optional) wheelclamp welding minigame.
Creator data is now stored in the database, creator menus respond better to held arrow keys, and jail creator updates are only broadcast to relevant police/prison players.
Evidence Laboratory inventory support is expanded.
Other Changes
Added automatic database migration support through Config.AutoExecuteQuery.
Vehicle radar now only shows the off-duty warning to the relevant player.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
If you use custom locale files, copy the new translation keys from the updated locale files.
If Config.AutoExecuteQuery = false, run the updated import.sql manually so the new database changes are applied, including the creator storage table.
Version 1.5.0
Highlights
Added custom dispatch integration hooks so Police Job alerts can be forwarded into your own dispatch system.
Added mph support for SpeedCams and vehicle radar with the new Config.SpeedCam.useMph option.
Notable Changes
Improved server and client performance under higher player counts by reducing repeated scans, redundant UI updates, and event pool pressure.
Reworked jail interaction syncing and creator integration, fixing duplicate jail NPCs and making jail terminals, inmates, fence cuts, and electric boxes update more reliably.
Fixed civilian outfits not being restored correctly after jail release.
Citizens App now shows linked cases and allows direct navigation into the related case.
Garage App now shows the vehicle owner's name instead of the identifier/license value.
Improved BOLO selection states and active-entry highlighting in the tablet UI.
Fixed tablet back-navigation so apps no longer get stuck or fail to reopen after returning.
Other Changes
Added Spanish, Finnish, French, and Polish translations.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Merge the updated config/functions.lua if you use a custom dispatch resource.
Add the new SpeedCam config option to config/config.lua:
Config.SpeedCam = {
useMph = false
}
If you use custom locale files, copy the new translation keys from the updated locale files.
Version 1.4.0
Highlights
Added synced spike strip tyre bursting with configurable spike strip settings.
Added support for multiple jail terminals in the jail creator.
Notable Changes
Citizens App now shows linked vehicles and linked reports again, including direct navigation into the related tablet apps.
Fixed tablet app return flow so going back to the main tablet menu no longer closes Police Job apps unexpectedly.
Fixed impounded vehicles staying frozen after a wheel clamp was removed.
Other Changes
Fixed spike strips so rear and mid wheels can also be burst instead of only the front tyres.
Increased mobile radar controls font size for better readability.
Added missing English and German translations and updated related wording.
Added navigation/select sounds for creator menus.
Download sky_policejob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Add the new spike strip config to config/config.lua:
If you use custom locale files, copy the new translation keys from the updated locale files.
Version 1.3.0
Highlights
Added speedcam offence integration so speedcams can match configurable offences by speed overage and issue linked fines automatically.
Extended Offences App with Speed Violation entries including configurable min/max speed-over-limit ranges.
Notable Changes
Improved sizing/alignment of list entries across Citizens, Vehicles, Cases, Reports, Warrants, BOLOs, Prison, Social Work, and Offences apps.
Fixed Offences App so open drafts and dialogs close correctly when tablet closes.
Fixed ESX citizens roster issue caused by collation mismatch on identifier joins.
Other Changes
Fixed mobile radar close/reset behavior after leaving vehicle.
Updated German locale wording for impound.
Version 1.2.0
Highlights
Added pagination for Citizens, Vehicles, Cases, Reports, Warrants, and BOLOs tablet list apps for large datasets.
Added wheel clamp state exports for external integrations.
Notable Changes
Improved Citizens App fetching to include all players instead of only online players.
Added server export exports['sky_policejob']:GetWheelClampOnVehicle(vehicleOrNetId, plate) returning clamp data (attached, netId, plate, wheelBone) or nil.
Other Changes
Fixed Offences App freeze when deleting an offence.
Fixed CCTV and bodycam visibility when required bodycam item option is enabled.
Version 1.1.1
Highlights
Fixed issue where Citizens App user data fetch could timeout.
Notable Changes
Added Save button for tablet apps that contain forms.
Other Changes
License data was temporarily removed from Citizens App until a stable fetch solution is available.
Version 1.1.0
Highlights
Added ability for players to remove deployed CCTVs and speedcams.
Improved evidence storage interface.
Notable Changes
Added station map blips.
Added groundwork for item metadata support in storages.
Fixed evidence storage issue when creating a new compartment.
Other Changes
Added missing translation.
Added scroll bar in vehicles app.
Upcoming hotfix announced for Citizens App loading issue.