Update Base to 1.40.0 and Jobs Base to 1.43.0 before installing sky_mechanicjob1.29.0. Vehicle documents also require Mechanic 1.29.0 and Police 1.32.0 together.
Highlights
Added optional vehicle inspections with car and motorcycle checklists, expiry dates, reinspection fees and signed reports.
Added optional vehicle registration, ownership transfers and deregistration with owner consent and permanent document history.
Improved vehicle records with nearby-customer selection, compact details, separate history and signed document previews.
Notable Changes
Fixed an issue where vehicle records could keep the plate field locked when creating a new entry after viewing another vehicle.
Fixed an issue where electronic tuning options could disappear from saved instant-tuning price profiles.
Fixed an issue where saved tuning could overwrite vehicle extras restored by a garage.
Fixed an issue where nearby observers or delayed garage restoration could overwrite live engine-sound changes and previews.
Improved dynamometer engine-speed synchronization for nearby observers.
Fixed an issue where Handling Editor diagnostics bypassed the central debug settings, including messages on player disconnect.
Fixed an issue where switching propulsion settings did not consistently apply the requested driven wheels.
Fixed an issue where resetting ECU effects on an aircraft could apply an unsuitable vehicle effect.
Added a confirmation for eight-gear handling settings that explains the live gear limit before applying them.
Added confirmed invoice income to the organization finance history.
Other Changes
Improved invoice and subscription layouts and kept vehicle-record panels readable across tablet themes.
Optimized repeated ECU, engine-sound, lighting and Two-Step checks while keeping installed tuning active.
Removed unnecessary synchronization diagnostics while retaining validation and persistence.
Updated bundled tuning and interface images with smaller files.
Update InstructionsA guided update for server owners1.28.01.29.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update Base to 1.40.0 and Jobs Base to 1.43.0 before installing sky_mechanicjob1.29.0. Vehicle documents also require Mechanic 1.29.0 and Police 1.32.0 together. These instructions cover 1.28.0 → 1.29.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.
Phase 2 of 5
Replace files
Install the matching 1.29.0 package. Update every path in Changed Files, delete and reinsert sky_mechanicjob/source/*, and replace sky_mechanicjob/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.
Phase 3 of 5
Merge config
Merge these additions into sky_mechanicjob/config/config.lua. Paste assignments after their corresponding existing parent table declarations. Both new features are disabled by default. Every path in this table was absent in 1.28.0:
Also add the complete new interaction definition. All six leaf values are new and false: Config.Interactions.vehicle_registry.public, .interaction, .unique, .marker.enabled, .npc.enabled, and .blip.enabled. This is the service-point capability definition; changing it does not create a workshop location:
For managed settings, open /jobconfig > sky_mechanicjob > Settings and search for the inspection/registration fields using the exact keys above. Saved overrides take precedence; missing values use the new defaults. With Config.UseJobConfigurator = false, maintain the Lua values directly. Enable only the services you want to offer.
Create a Vehicle inspection / registration point (vehicle_registry) in the workshop's Locations editor and assign it to the intended job. The vehicle must be at that point within the configured distance. Grant the relevant role permissions: 1401 reads records, 1402 performs inspections, 1403 handles registration/deregistration, and 1404 revokes documents issued by that job. Staff must be on duty. The actual owner must be nearby and confirm with a drawn signature; selecting a nearby customer does not replace owner consent.
The defaults give inspections 30 real days of validity, a two-day warning and a ten-minute session. Registration requires a valid inspection by default. Changing validity affects new documents; it does not renew an old certificate. Ownership transfers require the registration workflow. Fees use normal Mechanic invoices, including applicable billing settings; an issued document is not proof that its invoice was paid. No additional direct payment is required by this update.
Saved instantTuningProfile.optionCostByOptionId profiles now regain missing electronic-option entries from shipped defaults during loading/import. Existing prices remain unchanged. Review the completed price list in /jobconfig after updating; no manual profile reset is required. Dyno ground settings already shipped in 1.28.0 do not require another migration.
Removed diagnostic setting:Config.HandlingEditor.debugEnabled changes from false to removed. Delete that property from a customized sky_mechanicjob/config/config.lua. Its /jobconfig key handlingEditorDebugEnabled is also retired; existing saved overrides are ignored, so no SQL deletion or settings reset is required. Detailed Handling Editor traces now follow Sky Base's central debug level. For support diagnostics, enable Config.debugLevels.debug in sky_base/config/config.lua, then restart Base and dependent resources. Restore it to its unchanged default false afterward. Keep Config.debug and Config.debugLevels.all at their unchanged default false when selecting individual levels. These Base settings are maintained in files, outside /jobconfig.
The existing Handling Editor performance controls remain unchanged: Config.HandlingEditor.performanceChecksEnabled = true, Config.HandlingEditor.performanceWarningMs = 25, Config.HandlingEditor.payloadWarningBytes = 262144, and Config.HandlingEditor.performanceSummaryIntervalMs = 60000. Threshold warnings now respect Base's central warning level; enabling debug is not required for those warnings.
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.
Phase 4 of 5
SQL & items
Back up the vehicle, registry and invoice tables. The normal Mechanic startup migration adds sky_mechanic_invoices.registry_operation_id CHAR(36) NULL and unique index uniq_mechanic_registry_operation when Config.AutoExecuteQuery = true.
With automatic SQL disabled, run the shipped sky_mechanicjob/vehicle_registry.sql against the existing game database. Merely rerunning the invoice CREATE TABLE IF NOT EXISTS in import.sql does not add this column to an existing table. For new installations, the updated import.sql includes it.
Complete the Base owned-vehicle identifier upgrade and import sky_jobs_base/vehicle_registry.sql when Jobs Base automatic SQL is disabled. The shared finance update also needs sky_jobs_logs.payment_reference and its unique index; follow Jobs Base 1.43.0 before starting Mechanic. Keep existing ownership, tuning, invoice and document data. No new items are required. Never clear the registry, regenerate vehicle IDs or issue old certificates automatically to resolve a migration error.
Phase 5 of 5
Restart & test
Confirm version 1.29.0 and all schema migrations. Leave both new switches off until a test workshop, permissions and service point are ready. With the owner nearby, issue an inspection, sign it, register the vehicle and inspect the history from Mechanic and Police. Check expiry, owner rejection, off-duty rejection and one invoice per operation. Verify the actual society credit separately from document issuance. Then test an existing instant-tuning profile, a garage vehicle with extras, propulsion changes and the eight-gear confirmation. With two clients, test engine-sound preview, cancellation and saved restoration after a garage spawn, streaming away/back and a change of vehicle controller. Check that a nearby dynamometer observer sees the current engine revs. With central debug disabled, verify that ordinary Handling Editor use and player disconnect do not force debug traces; enable the debug level for a support trace and restore it afterward.
Version 1.28.0
Update sky_base to 1.39.0 and sky_jobs_base to 1.42.0 before installing sky_mechanicjob1.28.0.
Highlights
Improved tuning saves so confirmed purchases and completed installations update the vehicle's garage record before it is parked.
Fixed an issue where cancelling a paint preview could change unrelated vehicle settings or fail to restore the original color.
Fixed an issue where changing a vehicle's drivetrain could leave it unable to move.
Notable Changes
Fixed an issue where saved handling changes could be lost when a vehicle was restored or entered again.
Added an option to disable the handling editor and its automatic vehicle rules while keeping the rest of the mechanic job available.
Improved gear-count editing by explaining unsupported changes before they can be saved and preserving unchanged factory gear counts.
Improved engine-sound previews and synchronization so cancelled changes restore the original sound and saved changes reach nearby vehicles.
Added separate Extras and Liveries sections under the tuning menu's More button.
Improved the tuning basket with clearer failure messages and disabled payment buttons while a purchase is being processed.
Changed mobile dyno placement to accept any ground material that meets the existing flatness and clearance requirements.
Other Changes
Fixed an issue where the dyno controls could show missing or untranslated text until another interface had been opened.
Fixed an issue where opening the mobile dyno could fail when loading its active sessions.
Improved the cleanup of tyre data for vehicles that no longer exist, including compatibility with different database collations.
Improved ownership checks used during cleanup by adding a missing vehicle-plate index when needed.
Removed misleading handling-performance warnings caused only by waiting for a network response.
Optimized engine-sound restoration checks for vehicles without saved Mechanic sound changes.
Added optional performance diagnostics to help support investigate lag and delays, with diagnostics disabled by default.
Changed Files
sky_mechanicjob/config/adv_config.lua
sky_mechanicjob/config/config.lua
sky_mechanicjob/config/locales/*
sky_mechanicjob/fxmanifest.lua
sky_mechanicjob/import.sql
sky_mechanicjob/source/* — delete and reinsert
Update InstructionsA guided update for server owners1.27.11.28.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update sky_base to 1.39.0 and sky_jobs_base to 1.42.0 before installing sky_mechanicjob1.28.0. These steps cover 1.27.1 → 1.28.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.
Phase 2 of 5
Replace files
Install the matching 1.28.0 package. Update every path listed in Changed Files, delete and reinsert sky_mechanicjob/source/*, and replace sky_mechanicjob/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_mechanicjob/source/* tree and sky_mechanicjob/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.
Phase 3 of 5
Merge config
In sky_mechanicjob/config/config.lua, add the previously absent feature switch:
config/config.lua
Config.ToggleFeatures.handlingEditor = true
The new default true keeps the handling editor and its automatic plate/model rules enabled. Set it to false to disable both. This is separate from the existing Config.ToggleFeatures.customHandling, which remains unchanged. With Config.UseJobConfigurator = true, use Mechanic → Features → Handling editor, feature key handlingEditor; saved feature overrides take precedence. With the configurator disabled, use the file value. Respawn vehicles after disabling previously applied handling changes; switching the feature off does not reset vehicles already in the world.
In sky_mechanicjob/config/adv_config.lua, delete Config.MobileDyno.placement.acceptedMaterials. The old list was { "tarmac", "concrete_pavement", "paving_slab", "road", "concrete", "concrete_solid" }; it is no longer read. There is no replacement material list. maxSlopeDegrees = 1.0, maxHeightSpread = 0.04, rayStartHeight = 2.0, rayDepth = 5.0, and the footprint probes stay unchanged. Placement still needs valid, sufficiently flat ground. The removed material list and the model-specific probes are file settings; existing /jobconfig slope and height settings continue to apply.
Before using the new tuning save path, follow Garage Integration and the matching ESX, QBCore, or Ox instructions. Some framework versions need the documented vehicle-property additions to preserve paint types and separate livery values. Check your actual installed files and keep custom changes. In particular, QBCore with MSK Garage 5.6 needs a review of the different vehicle-property formats; installing field additions alone does not establish compatibility.
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.
Phase 4 of 5
SQL & items
Back up sky_mechanic_vehicle_tuning and your framework's owned-vehicle table before the first start. The automatic migration, controlled by Config.AutoExecuteQuery, adds nullable legacy_properties LONGTEXT DEFAULT NULL to sky_mechanic_vehicle_tuning and ensures a non-unique plate index on owned_vehicles (ESX) or player_vehicles (QBCore/Qbox) when needed. Existing suitable indexes and vehicle rows are retained.
If Config.AutoExecuteQuery = false, run the VEHICLE OWNERSHIP INDEX block from sky_mechanicjob/import.sql against your active database. It starts with SET @sky_mechanic_ownership_table = 'owned_vehicles';; change that value to 'player_vehicles' for QBCore/Qbox. Then run:
ALTER TABLE `sky_mechanic_vehicle_tuning`
ADD COLUMN IF NOT EXISTS `legacy_properties` LONGTEXT NULL;
Confirmed tuning now updates owned_vehicles.vehicle on ESX, the existing QBCore/Qbox vehicle properties, or the Sky job-garage vehicle record. On conversion, the previous full Mechanic snapshot is saved once in legacy_properties; Mechanic-specific extras remain in its active record. Existing vehicles are not converted in bulk. Keep those backup values and verify an existing vehicle after a confirmed save. The older /migrate command is not a bulk conversion tool for this change.
Replace all Mechanic locales. No new inventory item, image, streamed model, or provider secret is introduced by this release.
Phase 5 of 5
Restart & test
Confirm a tuning purchase, check the existing garage record, and retrieve the vehicle twice. Verify paint, RGB-to-palette changes, liveries, extras, engine sound, and handling before entering the vehicle and from a second player's view. Cancel a paint preview and confirm unrelated tuning stays intact. Test drivetrain conversion, the handling-editor switch, and a mobile dyno on valid flat ground. Check persistence again after a server restart.
Version 1.27.1
Update sky_jobs_base to 1.41.1 and use sky_base1.38.0 before updating sky_mechanicjob.
Highlights
Fixed an issue where tuning purchases could succeed with insufficient funds when the payment provider allowed an overdraft.
Fixed an issue where Anti-Lag installed on a spawned, unsaved vehicle could be reported as missing.
Notable Changes
Fixed an issue where the mobile Dyno could sit above the ground after placement.
Added controls for sharing completed Dyno measurements with nearby players, including recipient selection and send feedback.
Other Changes
Fixed an issue where received Dyno results could disappear while the tablet opened or refreshed.
Improved the standalone tablet presentation of shared Dyno results and restored normal input when leaving the Dyno view.
Changed Files
sky_mechanicjob/config/locales/*
sky_mechanicjob/fxmanifest.lua
sky_mechanicjob/source/* — delete and reinsert
sky_mechanicjob/stream/sky_mechanic_props.ytyp
sky_mechanicjob/stream/sky_mobile_dyno.ydr
Update InstructionsA guided update for server owners1.27.01.27.1
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update sky_jobs_base to 1.41.1 and use sky_base1.38.0 before updating sky_mechanicjob. These steps cover 1.27.0 → 1.27.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.
Phase 2 of 5
Replace files
Install 1.27.1 as a matching package. Update every path in Changed Files, delete and reinsert sky_mechanicjob/source/*, and replace sky_mechanicjob/config/locales/* completely. Merge the configuration instructions in this tab into customized files; retain intentional settings and persistent data.
Phase 3 of 5
Merge config
No config/config.lua, config/adv_config.lua or /jobconfig value changes are required for this patch. Keep existing Anti-Lag, vehicle persistence, payment and Mobile Dyno settings. The Anti-Lag correction supports the existing temporary tuning path for spawned vehicles; it does not make those vehicles persistent across deletion or server restarts.
Sharing is available from a completed measurement owned by the operator. Open the sharing controls, select a nearby player and send the result. Existing duty, distance and session checks still apply. No additional monitor is required for direct player sharing.
Phase 4 of 5
SQL & items
Replace sky_mechanicjob/stream/sky_mobile_dyno.ydr and sky_mechanicjob/stream/sky_mechanic_props.ytyp together with the matching source package. The corrected placement uses updated collision bounds; no manual station Z offset is required for the shipped model. Replace all sky_mechanicjob/config/locales/* for the sharing controls.
No new SQL migration, inventory item, image or provider secret is introduced. Preserve stored tuning, Dyno measurements, orders and balances. Follow any unfinished 1.27.0 installation steps when upgrading from an older version.
Phase 5 of 5
Restart & test
Start providers, Base, Jobs Base and Mechanic in that order. Check a tuning purchase with insufficient and sufficient funds, Anti-Lag on a spawned vehicle, mobile Dyno placement, leaving its tablet view and sharing a completed measurement with a second nearby player.
Version 1.27.0
Update sky_base to 1.38.0 and sky_jobs_base to 1.41.0 before updating sky_mechanicjob.
Highlights
Added a standalone administrator handling editor with simple and advanced controls, field explanations, flags, validation, saved profiles, and vehicle-specific rules.
Improved the mobile Dyno with a physical control panel, a dedicated tablet workspace, and independently placeable result monitors.
Added inventory-based Dyno placement, cancellation, pickup, and controls through the mechanic radial menu.
Added staged power sweeps, sustained-load tests, steady holds, and coastdown runs with cooling-fan preparation and temperature warnings.
Notable Changes
Added road-test telemetry, acceleration and braking measurements, a driving overlay, and handling recommendations based on recorded runs.
Added handling profile revisions, personal workspaces, fleet-rule history, and clipboard-based XML import and export.
Improved handling edits so repeated applications preserve the original vehicle baseline, configured field limits remain stable, and unsuccessful live changes are reported.
Improved Dyno operation for seated drivers and external operators, including run cleanup, distance checks, and access validation.
Improved Dyno graphs with elapsed-time axes, separate power and torque scales, smoother stage transitions, saved results, and sharing to result monitors.
Improved Dyno fan controls, wheel and roller presentation, screen alignment, and tyre-squeal suppression.
Added player-configurable mechanic, nitro, tuning, and editor key bindings.
Removed the exhaust-smoke color tuning option and retired its saved configuration while preserving historical paid-order refund handling.
Fixed an issue where a driver could not toggle an installed Anti-Lag kit unless they were the registered vehicle owner.
Other Changes
Improved workshop lift, engine-hoist, parts-delivery, and self-service tuning updates so older responses cannot replace newer creator data.
Improved handling editor layout, theme consistency, dropdown behavior, and telemetry-mode selection when reopening or applying changes.
Updated all bundled mechanic gameplay translations and the shared Job Configurator labels required by the new settings.
Updated Dyno models, animations, audio, inventory icons, and handling field definitions required by the new tools.
Update InstructionsA guided update for server owners1.26.01.27.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update sky_base to 1.38.0 and sky_jobs_base to 1.41.0 before updating sky_mechanicjob. Stop the server and back up the complete sky_mechanicjob 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.
Phase 2 of 5
Replace files
Install 1.27.0 as a consistent package. Replace every file listed in Changed Files, delete and reinsert sky_mechanicjob/source/*, and replace sky_mechanicjob/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.
Phase 3 of 5
Merge config
In sky_mechanicjob/config/config.lua, add the complete Config.Keybinds block. This table and its paths were absent in 1.26.0; 1.27.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.mechanicDynoControl38 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.26.0
Old default
New path in 1.27.0
New default
Config.Nitro.activationKey in config/adv_config.lua
"LSHIFT"
Config.Keybinds.nitroActivationKey
"LSHIFT"
Move Config.AutoExecuteQuery and the complete Config.CommandPermissions table from sky_mechanicjob/config/adv_config.lua to sky_mechanicjob/config/config.lua, preserving your existing values and groups. Remove the old definitions from adv_config.lua so they cannot overwrite the new table. Add the previously absent permission and feature flag:
The permission remains plaintext/global. mobileDyno is a saved /jobconfig feature toggle. Add the complete new handling editor block to config/config.lua; all these paths were absent in 1.26.0:
config/config.lua
Config.HandlingEditor = {
defaultTab = "advanced", -- simple, advanced, flags, inspector, telemetry, profiles, fleet, export
-- Suggested percentage window above/below the captured vehicle basis.
-- A non-default field maximum below takes precedence over the upper endpoint.
-- The vehicle basis remains stable after Apply, so reopening cannot compound this range.
sliderMaximumDeviationPercent = 30,
-- Optional hard maximums for every numeric handling field. Fields not listed here use the
-- default maximum from data/handling_editor_schema.json (fallback: 1,000,000,000).
-- Overrides may raise or lower that default, up to the editor's numeric ceiling of
-- 1,000,000,000 (2,147,483,647 for integers). The same limits are editable in /jobconfig; they do not
-- change a vehicle value by themselves. A non-default maximum is also the slider endpoint;
-- fields using their default maximum retain the suggested vehicle-basis slider window.
-- Example: ["CHandlingData.fInitialDriveMaxFlatVel"] = 250.0,
fieldMaximums = {},
layerInspectorEnabled = true,
fieldDocumentationEnabled = true,
validatorEnabled = true,
blockCriticalValidation = true,
telemetryCoachEnabled = true,
profileVersioningEnabled = true,
fleetManagerEnabled = true,
flagSearchEnabled = true,
workspacesEnabled = true,
maxProfileRevisions = 30,
maxFleetResults = 200,
maxWorkspacesPerAdmin = 12,
coachMinimumSamples = 20,
coachWheelSlipWarningKmh = 12.0,
coachMinimumBrakeDeceleration = 6.0,
-- Detailed traces are opt-in; threshold warnings use the queued Sky.Debug logger.
debugEnabled = false,
performanceChecksEnabled = true,
performanceWarningMs = 25,
payloadWarningBytes = 262144,
performanceSummaryIntervalMs = 60000
}
With /jobconfig, the saved keys are handlingEditorDefaultTab, handlingEditorSliderMaximumDeviationPercent, handlingEditorLayerInspectorEnabled, handlingEditorFieldDocumentationEnabled, handlingEditorValidatorEnabled, handlingEditorBlockCriticalValidation, handlingEditorTelemetryCoachEnabled, handlingEditorProfileVersioningEnabled, handlingEditorFleetManagerEnabled, handlingEditorFlagSearchEnabled, handlingEditorWorkspacesEnabled, handlingEditorMaxProfileRevisions, handlingEditorMaxFleetResults, handlingEditorMaxWorkspacesPerAdmin, handlingEditorCoachMinimumSamples, handlingEditorCoachWheelSlipWarningKmh, handlingEditorCoachMinimumBrakeDeceleration, handlingEditorDebugEnabled, handlingEditorPerformanceChecksEnabled, handlingEditorPerformanceWarningMs, handlingEditorPayloadWarningBytes, and handlingEditorPerformanceSummaryIntervalMs. They map to the same suffixes in Config.HandlingEditor. Each Config.HandlingEditor.fieldMaximums[field_id] override uses the exact saved key handlingEditorMaximum__<field_id> and must be checked under the matching handling field. Saved overrides win; changing a maximum does not itself change a vehicle. With the configurator disabled, the file is authoritative.
Add the complete new Config.MobileDyno block to sky_mechanicjob/config/adv_config.lua. Every path in this block was absent in 1.26.0; retain the model-specific coordinates for the supplied models only:
Review these values in Mobile Dyno and saved installations. The default tablet operating distance is 20.0 metres, pickup distance is 3.5, and requireOnDuty stays enabled in the new block. Item placements are not persistent by default. Model identifiers, screen geometry, roller geometry, animation definitions, thermal simulation and test-profile shapes remain plaintext Lua settings; they are not ordinary saved location fields. Place the supplied Dyno on a valid flat surface and use the editor for each installation rather than copying one model's coordinates to another model. Existing explicit overrides remain effective.
Remove Config.Jobs[*].tuningCostProfile.optionCostByOptionId.electronic_exhaust_smoke_color, including its enabled and complete cost table. This option was enabled in the old shipped workshop, with prices from 0.0 to 4.65 and ecu_tuning_kit requirements; it has no replacement. The updated runtime retires old job and instant-tuning overrides and ignores old vehicle smoke-color values. Keep paid historical orders and existing ECU kits for their remaining supported uses and refund handling. No Two-Step default value changes in this release; retain your current Two-Step settings.
Phase 4 of 5
SQL & items
With Config.AutoExecuteQuery = true, let startup create the seven new handling tables. Otherwise apply the matching new sky_mechanicjob/import.sql statements before starting the resource. Existing vehicle tuning, Dyno result history, orders and balances must be retained. Exact new schema:
migration.sql
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_profiles` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL,
`vehicle_label` VARCHAR(120) NULL,
`vehicle_model` VARCHAR(64) NULL,
`vehicle_model_hash` BIGINT UNSIGNED NULL,
`handling_name` VARCHAR(64) NULL,
`snapshot` LONGTEXT NOT NULL,
`created_by_identifier` VARCHAR(120) NULL,
`created_by_name` VARCHAR(120) NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_mechanic_handling_profiles_name` (`name`),
INDEX `idx_mechanic_handling_profiles_model` (`vehicle_model_hash`)
);
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_overrides` (
`id` INT NOT NULL AUTO_INCREMENT,
`scope` VARCHAR(16) NOT NULL,
`target_key` VARCHAR(80) NOT NULL,
`target_label` VARCHAR(120) NOT NULL,
`vehicle_model_hash` BIGINT UNSIGNED NULL,
`profile_name` VARCHAR(64) NULL,
`snapshot` LONGTEXT NOT NULL,
`created_by_identifier` VARCHAR(120) NULL,
`created_by_name` VARCHAR(120) NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_mechanic_handling_override` (`scope`, `target_key`),
INDEX `idx_mechanic_handling_overrides_scope` (`scope`),
INDEX `idx_mechanic_handling_overrides_model` (`vehicle_model_hash`)
);
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_runs` (
`id` INT NOT NULL AUTO_INCREMENT,
`vehicle_label` VARCHAR(120) NULL,
`vehicle_model_hash` BIGINT UNSIGNED NOT NULL,
`plate` VARCHAR(24) NULL,
`mode` VARCHAR(16) NOT NULL,
`top_speed` DECIMAL(8,2) NOT NULL DEFAULT 0,
`distance` DECIMAL(10,2) NOT NULL DEFAULT 0,
`elapsed` DECIMAL(10,3) NOT NULL DEFAULT 0,
`max_acceleration` DECIMAL(8,3) NOT NULL DEFAULT 0,
`max_deceleration` DECIMAL(8,3) NOT NULL DEFAULT 0,
`max_wheel_slip` DECIMAL(8,3) NOT NULL DEFAULT 0,
`zero_to_sixty` DECIMAL(10,3) NULL,
`zero_to_hundred` DECIMAL(10,3) NULL,
`zero_to_two_hundred` DECIMAL(10,3) NULL,
`hundred_to_zero` DECIMAL(10,3) NULL,
`quarter_mile` DECIMAL(10,3) NULL,
`kilometer` DECIMAL(10,3) NULL,
`samples` LONGTEXT NOT NULL,
`created_by_identifier` VARCHAR(120) NULL,
`created_by_name` VARCHAR(120) NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_mechanic_handling_runs_model` (`vehicle_model_hash`, `created_at`),
INDEX `idx_mechanic_handling_runs_plate` (`plate`, `created_at`)
);
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_profile_revisions` (
`id` INT NOT NULL AUTO_INCREMENT,
`profile_id` INT NOT NULL,
`revision` INT NOT NULL,
`note` VARCHAR(500) NULL,
`release_status` VARCHAR(16) NOT NULL DEFAULT 'draft',
`telemetry_run_id` INT NULL,
`snapshot` LONGTEXT NOT NULL,
`created_by_identifier` VARCHAR(120) NULL,
`created_by_name` VARCHAR(120) NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_mechanic_handling_profile_revision` (`profile_id`, `revision`),
INDEX `idx_mechanic_handling_revisions_profile` (`profile_id`, `created_at`)
);
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_preferences` (
`identifier` VARCHAR(120) NOT NULL,
`preferences` LONGTEXT NOT NULL,
`favorites` LONGTEXT NOT NULL,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`identifier`)
);
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_workspaces` (
`id` INT NOT NULL AUTO_INCREMENT,
`owner_identifier` VARCHAR(120) NOT NULL,
`owner_name` VARCHAR(120) NULL,
`name` VARCHAR(64) NOT NULL,
`vehicle_label` VARCHAR(120) NULL,
`vehicle_model_hash` BIGINT UNSIGNED NULL,
`snapshot` LONGTEXT NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_mechanic_handling_workspace_owner_name` (`owner_identifier`, `name`),
INDEX `idx_mechanic_handling_workspaces_owner` (`owner_identifier`, `updated_at`)
);
CREATE TABLE IF NOT EXISTS `sky_mechanic_handling_fleet_history` (
`id` INT NOT NULL AUTO_INCREMENT,
`scope` VARCHAR(16) NOT NULL,
`target_key` VARCHAR(80) NOT NULL,
`target_label` VARCHAR(120) NOT NULL,
`vehicle_model_hash` BIGINT UNSIGNED NULL,
`action` VARCHAR(24) NOT NULL,
`snapshot` LONGTEXT NULL,
`created_by_identifier` VARCHAR(120) NULL,
`created_by_name` VARCHAR(120) NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_mechanic_handling_fleet_target` (`scope`, `target_key`, `created_at`),
INDEX `idx_mechanic_handling_fleet_created` (`created_at`)
);
Register mobile_dyno (weight 25000) and mobile_dyno_monitor (weight 5000) in the active inventory. The ESX-style items inserts in import.sql are idempotent; QBCore, Qbox and ox_inventory normally need their own shared item definitions. The runtime registers usable actions through the shared prop service. Copy the new config/inventory/mobile_dyno.png and config/inventory/mobile_dyno_monitor.png into the inventory's image directory.
Install every listed Dyno stream file, the updated stream/sky_mechanic_props.ytyp, both new audio configuration files, data/handling_editor_schema.json, the matching manifest, complete locales and complete built source folder. The manifest now points to the archetype inside stream/ and loads the Dyno audio mix. Do not carry an older manifest forward. No new provider secret is required.
Phase 5 of 5
Restart & test
Start the matching dependencies and Mechanic, then verify all seven handling tables and both usable items. Place/cancel/pick up a Dyno and monitor, check duty and range rejection, prepare cooling fans, run seated and external tests, and check start/stop cleanup, temperatures, graphs, fan dragging, saved history and monitor sharing. Open /handlingeditor with an authorized administrator, apply two successive edits, reopen, test profile revisions, XML clipboard export/import, field limits, fleet rules and driving telemetry. Verify unsupported/failed live changes report an error, Escape closes only the open dropdown, and drivers can toggle installed Anti-Lag. Confirm smoke-color ordering is unavailable while historical refunds remain intact.
Version 1.26.0
Update sky_base to 1.37.0 and sky_jobs_base to 1.40.0 before updating sky_mechanicjob.
Highlights
Added persistent electronic exhaust-smoke color tuning with eleven levels and ECU Tuning Kit pricing.
Improved Two-Step so input detection remains responsive while idle polling is configurable and its torque effect composes with ECU tuning.
Improved live vehicle tuning so runtime vehicles retain applied settings through synchronization and ownership changes.
Added support for every runtime plate style, including the Enhanced plate variant.
Notable Changes
Added server-authorized anti-lag previews and ECU index diagnostics for safer electronic-tuning workflows.
Improved Job Creator refresh behavior so a saved configuration cannot trigger an unsafe recursive refresh.
Improved parts-delivery guidance when several completed orders are waiting.
Fixed engine-hoist behavior so attaching and moving a vehicle does not damage it.
Added an optional config/img directory contract for custom NUI tuning images.
Other Changes
Updated number inputs so browser spinner controls match the tablet interface.
Updated bundled locales for exhaust-smoke colors, Two-Step defaults, delivery guidance, plate styles, and tuning diagnostics.
Improved electronic-tuning persistence and preview cleanup across resource and player lifecycle changes.
Changed Files
sky_mechanicjob/config/adv_config.lua
sky_mechanicjob/config/config.lua
sky_mechanicjob/config/img/README.md
sky_mechanicjob/config/locales/*
sky_mechanicjob/fxmanifest.lua
sky_mechanicjob/source/* — delete and reinsert
Update InstructionsA guided update for server owners1.25.01.26.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Install Base 1.37.0 and Jobs Base 1.40.0, stop the server, and back up the resource, Job Configurator settings, tuning/vehicle data, inventory definitions, and deliberate changes to config/config.lua and config/adv_config.lua.
Install 1.26.0 as one clean package. Its manifest, frontend, locales, tuning runtime, and source files must remain aligned.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. At minimum replace fxmanifest.lua, config/config.lua, config/adv_config.lua, the complete config/locales and source directories, and the built frontend. Add config/img/README.md; keep locally supplied images in that directory when reapplying custom artwork.
Phase 3 of 5
Merge config
The canonical path is Config.Jobs[*].tuningCostProfile.optionCostByOptionId. The shipped entry is:
When the Job Configurator is enabled, startup copies missing electronic_* entries from the current defaults into saved profiles while preserving existing entries. Review Tuning Prices after the first start; do not add a second options table. With the shipped percentage pricing, 4.65 means 4.65% of the vehicle value. The existing ecu_tuning_kit item is reused.
Extend the plaintext Two-Step block in config/adv_config.lua:
inactiveCheckIntervalMs accepts 50 through 1000; lower values react sooner while higher values reduce idle polling. /jobconfig controls Config.ToggleFeatures.twoStep, not these low-level physics and timing values.
Phase 4 of 5
SQL & items
No SQL migration, new inventory identifier, bundled inventory image, or stream asset is required. Confirm that the existing ecu_tuning_kit item remains registered because exhaust-smoke color levels 1..10 consume it under the shipped pricing profile. The optional config/img directory is for NUI artwork and does not replace inventory images.
Phase 5 of 5
Restart & test
Start Base, Jobs Base, and Mechanic in order. Install every exhaust-smoke color level, verify its cost/item consumption, observe the selected color, reconnect, change network ownership, and confirm persistence. Preview and cancel anti-lag with allowed and denied users, inspect ECU diagnostics, and test Two-Step when initially disabled/enabled with foot-brake and optional handbrake settings. Confirm its torque remains compatible with ECU tuning. Test all plate styles including Enhanced, save Job Configurator changes once, process multiple queued deliveries, use the engine hoist without body/engine damage, and load an optional custom image in FiveM CEF.
Version 1.25.0
Update sky_base to 1.36.0 and sky_jobs_base to 1.39.0 before updating sky_mechanicjob.
Highlights
Added persistent electronic tuning for anti-lag variants, two-step, throttle response, wheelie behavior, engine output, idle speed, interior lighting, headlight brightness, radio power, brake lights, horn high beams, automatic hazards, and preset or custom RGB mood lighting with intensity and disable control.
Added staged brake overheating with configurable vehicle and brake-upgrade multipliers, glowing discs, critical sparks, short brake fade, and a debug display.
Added a parts-delivery mode that can place the complete collected order directly into the player's inventory instead of using the physical pallet flow.
Changed the former Anti-Lag Kit into one ECU Tuning Kit that supplies anti-lag, two-step, and every new electronic upgrade.
Notable Changes
Improved tuning orders so required item quantities are visible, carried repair items can be consumed, advanced installations work with parts delivery disabled, and live prices refresh after Job Configurator changes.
Improved vehicle repair and service persistence so self-service work and Quasar parking retain completed repairs without overwriting unrelated vehicle data.
Improved workshop deliveries so the pallet appears at the configured spawn position and direct-inventory collection grants the full validated order once.
Fixed an issue where seated customers could be removed from their vehicle during billing and where a partially paid invoice could remain open after completion.
Added system-actor entries to vehicle history so automated service actions remain distinguishable from employee changes.
Improved fake plates so a qualifying collision can detach the plate even when body-health loss is small.
Other Changes
Improved xenon synchronization, repaired-window updates, transactional stance changes, and wheel geometry so nearby clients see the same vehicle state without changing door angles.
Removed the lingering limp-mode speed cap after the underlying vehicle condition recovers.
Improved the tuning interface with functional categories, dedicated ECU artwork, clearer removal/order details, shared form controls, and consistent FiveM CEF rendering.
Updated bundled translations for ECU tuning, brake heat, parts delivery, exhaust work, catalytic converters, invoices, and vehicle-state messages.
Update InstructionsA guided update for server owners1.24.11.25.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Before updating, install Base 1.36.0 and Jobs Base 1.39.0, stop the server, and back up the resource, inventory definitions/data, Job Configurator tables, mechanic tables, and intentional provider/config edits.
Install 1.25.0 as one clean package. Its UI, runtime, manifest, locales, config defaults, image, and compatibility files must match.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. At minimum replace fxmanifest.lua, import.sql, compat/fakeplates_realplate_native.lua, config/adv_config.lua, config/config.lua, config/sv_functions.lua, the complete config/locales and source directories, and the built UI. Add config/inventory/ecu_tuning_kit.png.
Phase 3 of 5
Merge config
Add these feature defaults, both absent in 1.24.1:
With /jobconfig, these are normal saved feature flags named electronicTuning and brakeOverheating; saved flags override the file. Add the complete new brake block:
/jobconfig stores these brake values: brakeOverheatingMinimumSpeedKmh, brakeOverheatingReferenceSpeedKmh, brakeOverheatingHeatGainPerSecond, brakeOverheatingCoolingPerSecond, brakeOverheatingCoolingDelayMs, brakeOverheatingHeatClassMultipliers, brakeOverheatingHeatBrakeUpgradeMultipliers, brakeOverheatingCooldownClassMultipliers, brakeOverheatingCooldownBrakeUpgradeMultipliers, brakeOverheatingWarmThreshold, brakeOverheatingHotThreshold, brakeOverheatingCriticalThreshold, brakeOverheatingVisualDistance, brakeOverheatingSparkMinimumIntervalMs, brakeOverheatingSparkMaximumIntervalMs, brakeOverheatingFadeChancePerSecond, brakeOverheatingFadeMinimumDurationMs, brakeOverheatingFadeMaximumDurationMs, and brakeOverheatingFadeCooldownMs. Saved values override the matching fields. simulationIntervalMs, maximumVisibleVehicles, glow, the spark asset/scale, wheelBones, and excludedVehicleClasses remain plaintext-only.
Add Config.PartsDelivery.deliveryMode = "standard" after deliveryTimeSeconds = 60; the path was absent before. The normal saved /jobconfig key is partsDeliveryMode, with allowed values "standard" and "player_inventory". This is a setting, not an interaction capability flag.
Replace antilag_kit with ecu_tuning_kit in every job Shop, Parts Delivery Shop, and tuning required-item entry. Rename the pricing category antilag to ecu_electronics while preserving supplierSharePercent = 70.0, marginPercent = 25.0, laborFee = 1400, difficulty = "complex", minimumPrice = 400, and maximumPrice = 90000. The resource migrates saved /jobconfig jobs on start; verify every job after migration.
Here kit means ecu_tuning_kit. Remove Config.AntiLag.activationRpm = 0.7 and Config.AntiLag.minGear = 2 from config/adv_config.lua; both paths are deleted in 1.25.0. No executable value changed in config/sv_functions.lua, but replace or carefully remerge the file because fake-plate ownership now uses the current Base/Jobs identity contracts.
Phase 4 of 5
SQL & items
No mechanic table schema changes in this release. The ESX item seed changes from:
old-item.sql
('antilag_kit', 'Anti-Lag Kit', 2000, 0, 1)
to:
new-item.sql
('ecu_tuning_kit', 'ECU Tuning Kit', 2000, 0, 1)
INSERT IGNORE does not rename an existing inventory row or stored player/job inventory. Register the new item in the active inventory, migrate stored antilag_kit counts deliberately, and install config/inventory/ecu_tuning_kit.png. The old item is no longer referenced by shipped shops or tuning costs. No provider credential or new streamed model is required.
Phase 5 of 5
Restart & test
The console reports Base 1.36.0, Jobs Base 1.39.0, and Mechanic 1.25.0 in that order.
ecu_tuning_kit exists with its image and stored antilag_kit inventory was deliberately migrated.
Every saved job uses ecu_tuning_kit, the ecu_electronics category, and the new option costs after Job Configurator migration.
All anti-lag levels, two-step, and every electronic tuning option install, consume the displayed quantity, persist, synchronize, and remove correctly.
Brake heat honors class/brake multipliers and thresholds; glow, sparks, fade, cooling, exclusions, and /brakeheatdebug behave as configured.
Standard parts delivery retains the physical flow and player_inventory grants the complete order exactly once.
Carried repair items, parts-delivery-disabled installs, order quantities, and live pricing changes work.
Billing keeps seated occupants in place and closes a completed partial-payment flow.
Self-service and Quasar repairs plus xenon, mood light, windows, stance, wheel geometry, and electronic state survive parking/retrieval without changing door angles.
A qualifying collision can detach a fake plate and recovered vehicles no longer retain a limp-mode speed cap.
Version 1.24.1
Update sky_base to 1.35.1 and sky_jobs_base to 1.38.1 before updating sky_mechanicjob.
Highlights
Improved the built-in frontend fallback catalogue so missing translated tuning, delivery, invoice, registry, and tablet keys remain readable.
Notable Changes
Fixed an issue where a complete 1.24.0 feature installation could still show blank or placeholder Mechanic labels.
Other Changes
Updated the package manifest for the 1.24.1 compatibility set.
Changed Files
sky_mechanicjob/config/locales/*
sky_mechanicjob/fxmanifest.lua
Update InstructionsA guided update for server owners1.24.01.24.1
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update Base to 1.35.1 and Jobs Base to 1.38.1, stop the server, and back up Mechanic.
Install 1.24.1 as one clean package; a .1 manifest beside the .0 built UI is a mixed update.
Phase 2 of 5
Replace files
Delete and reinsert the resource. Replace fxmanifest.lua, the built UI, and config/locales completely.
Phase 3 of 5
Merge config
No public config value or /jobconfig key changed in 1.24.1.
Phase 4 of 5
SQL & items
No SQL, item, image, stream asset, or provider credential changed.
Phase 5 of 5
Restart & test
Base 1.35.1, Jobs Base 1.38.1, and Mechanic 1.24.1 start in order.
Tuning, delivery, invoice, registry, and tablet labels fall back to readable English when a translation key is absent.
Version 1.24.0
Update sky_base to 1.35.0 and sky_jobs_base to 1.38.0 before updating sky_mechanicjob.
Highlights
Cross-job vehicle records - mechanics can create richer owner/model/color records and share selected profiles read-only with other jobs.
Quantity-aware tuning parts - performance stages can require increasing quantities instead of one item for every level, including repeated legacy item entries.
Improved invoice and delivery workflows - invoice registry history, normalized timestamps, custom quantities, stacked delivered parts, customer subscription names, and clearer delivery pallets are supported.
Tyre-only persistence - JG garage tyre saves sanitize bounded tyre fields, require a persisted owned plate when ownership checks are enabled, and update only tyre data without overwriting other tuning properties.
Notable Changes
Advanced pricing can keep selected parts-shop categories available without an active tuning order; Service items are enabled by default.
Vehicle records support editing for their owner job and read-only access for configured share targets.
Tuning orders can source quantities from job storage, enforce price caps consistently, and show clearer item labels and dark-mode surfaces.
Subscription lists retain customer names and vehicle history includes owner-scoped invoice entries.
Wheel size/width scaling was removed; normal Stancer camber, track width, suspension, and alignment remain.
Other Changes
Dropdown, opacity, delivery, subscription, invoice, registry, pricing, tuning, and locale behavior was corrected.
The Tuning menu includes dedicated Extras artwork in the rebuilt interface.
Custom tuning diagnostics now follow the shared Base logging path.
Tyre persistence updates only tyre-related fields in the stored property document so ordinary tyre saves preserve unrelated tuning data.
Database schemas now inherit the active database character set and collation; no new inventory item or streamed asset is required.
Update InstructionsA guided update for server owners1.23.01.24.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update sky_base to 1.35.0 and sky_jobs_base to 1.38.0. Stop the server and back up the complete Mechanic resource, local pricing/tuning configuration, Job Configurator tables, and all Mechanic database tables.
Install 1.24.0 as one clean package. Its pricing rules, UI, server validation, generated settings, database schema, and persistence runtime must match.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. Replace fxmanifest.lua, import.sql, config/config.lua, config/adv_config.lua, the complete config/locales and source directories, and the built UI.
Phase 3 of 5
Merge config
Delete these obsolete values: Config.ToggleFeatures.stanceWheelSize, Config.ToggleFeatures.stanceWheelWidth, the complete Config.WheelSizeOptions table, and the wheel_size / wheel_width option-cost rows. They existed in 1.23.0 and are absent in 1.24.0.
Add the complete sharing default and assign it to intended mechanic jobs:
config/config.lua
local mechanic_sharing_defaults = {
enabled = true,
records = {
vehicleRecords = { enabled = true, jobs = {}, groups = { "mechanic" } }
}
}
Change every shipped performance item from a string to { name, quantity }. Required stage quantities are:
Performance path
Stage quantities in 1.24.0
Removed extra row
performanceStages.engine.cost
1, 2, 3, 4 × engine
None
performanceStages.brakes.cost
1, 2, 3 × brakes
Former fourth row
performanceStages.transmission.cost
1, 2, 3 × transmission
None
performanceStages.suspension.cost
1, 2, 3, 4 × suspension
Former fifth row
performanceStages.armor.cost
1, 2, 3, 4, 5 × armor_plating
Former sixth row
Use items = { { name = "brakes", quantity = 2 } } for a two-unit example. The existing prices stay attached to their matching real stage.
The global advanced-pricing switch remains false by default. When it is enabled, matching Config.Jobs[*].partsDeliveryShop categories are purchasable without a tuning order and each item price is the supplier base price. Per-job vehicle-record sharing is Job Configurator data; the two advanced-pricing values are normal saved /jobconfig settings.
Phase 4 of 5
SQL & items
Automatic migration and the manual file mirror apply these exact changes:
migration.sql
ALTER TABLE `sky_mechanic_subscriptions`
ADD COLUMN IF NOT EXISTS `customer_name` VARCHAR(120) NULL AFTER `identifier`;
ALTER TABLE `sky_mechanic_vehicle_profiles`
ADD COLUMN IF NOT EXISTS `owner_name` VARCHAR(120) NULL,
ADD COLUMN IF NOT EXISTS `owner_identifier` VARCHAR(120) NULL,
ADD COLUMN IF NOT EXISTS `model` VARCHAR(64) NULL,
ADD COLUMN IF NOT EXISTS `color` VARCHAR(120) NULL,
ADD COLUMN IF NOT EXISTS `shared_with_jobs` LONGTEXT NULL,
ADD COLUMN IF NOT EXISTS `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN IF NOT EXISTS `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
If the database does not support grouping these ADD COLUMN IF NOT EXISTS clauses, execute the complete shipped import.sql, where they are separate statements. All shipped schema definitions now inherit the active database character set and collation. No separately installed inventory item, image, or stream asset is required; the Extras artwork is already contained in the rebuilt interface under source.
Phase 5 of 5
Restart & test
Base 1.35.0, Jobs Base 1.38.0, and Mechanic 1.24.0 start in that order.
Subscription rows expose customer_name and vehicle profiles contain every new metadata/share/timestamp column.
Each performance level consumes the configured quantity and the removed extra levels no longer appear.
Service-category items remain available without a tuning order only when advanced pricing is enabled.
A shared vehicle record is read-only outside its owner job; invoices are not exposed to shared viewers.
Delivered parts stack correctly and subscription customer names remain visible.
JG tyre snapshots accept only bounded tyre fields, reject invalid or non-owned plates when ownership checks are enabled, and preserve every unrelated tuning property.
Wheel-size/width controls are gone while supported Stancer controls still work.
The rebuilt Tuning menu displays the dedicated Extras artwork.
Version 1.23.0
Update sky_base to 1.34.0 and sky_jobs_base to 1.37.0 before updating sky_mechanicjob.
Highlights
Server-authoritative advanced pricing - optional quotes combine supplier share, margin, labor, difficulty, vehicle class, mechanic grade, stock, demand, tax, discount caps, and price limits; class-based prices, order-bound procurement, returns, refunds, and workshop profit analytics use the same validated calculation. Public server exports are CreatePricingQuote, GetPricingQuote, ValidatePricingQuote, GetPricingAnalytics, and GetSupplierCatalog; server integrations can observe sky_mechanicjob:server:pricingQuoteCreated, sky_mechanicjob:server:pricingQuoteExpired, and sky_mechanicjob:server:supplierStockChanged.
Extended workshop billing - invoices support estimates, deposits, partial payments, manual lines, due dates, reminders and fees, tax, per-grade limits, cancellation permissions, analytics, and optional recipient-name privacy. Public server exports are CreateInvoice, CreateEstimate, GetInvoice, GetPlayerInvoices, PayInvoice, RespondToEstimate, SendInvoiceReminder, CancelInvoice, and GetBillingAnalytics; server integrations can observe sky_mechanicjob:server:invoiceCreated, sky_mechanicjob:server:invoiceStatusChanged, sky_mechanicjob:server:invoiceOverdue, sky_mechanicjob:server:invoicePaymentRecorded, sky_mechanicjob:server:estimateResponded, sky_mechanicjob:server:invoiceReminderSent, and sky_mechanicjob:server:invoiceCancelled.
Customer and company subscriptions - configurable workshop memberships provide one strongest non-stacking discount, personal or job-wide ownership, society payment, expiry, a configurable NPC terminal, and workshop-specific models; the responsive tablet app is marked New, its runtime is loaded explicitly, and its SVG assets plus public NPC setup documentation are included. Server integrations can resolve the effective discount through GetSubscriptionDiscount.
Parts deliveries in the tablet - the old single-order timer HUD was replaced with a synchronized overview of every workshop delivery, while configured carriers can sprint with delivery boxes.
Notable Changes
External LB Tablet and RoadPad surfaces support authorization, inherited sessions, retries, message relay, safe routes, lifecycle return/close, and tuning focus preservation; their runtime module is loaded explicitly.
Drift tuning now requires the dedicated drift_tyres item instead of a stance kit; the item is included in shop defaults and SQL inventory seeds.
Oil absorbent and brooms are stocked in mechanic shops, including migration into existing configurator-managed shops without duplicates.
Vehicle persistence batches orphan-tyre cleanup, reapplies tuning after a server/client startup handshake, avoids shutdown-time saves, preserves add-on stance baselines, and restores stance after garage retrieval.
Motorcycle tuning exposes rear-wheel changes instead of treating the vehicle as front-wheel-only.
The public server-authoritative /antilag command toggles the persisted state only when Anti-Lag is enabled, the player is the driver of their own vehicle, and that vehicle has an installed Anti-Lag kit; every rejected requirement returns a clear result.
Self-service validation follows creator-defined workshop points rather than static job locations.
Plates in Config.TuningRestrictions.blockedPlates are rejected by mechanic, self-service, instant, and admin tuning flows.
Owned vehicles can send rate-limited maintenance reminders when wear reaches the configured threshold.
Oil-leak relays use the configured integration resource and now ship with the Fire resource as the default target; an unavailable provider rejects the relay and writes an English debug diagnostic with its resource state.
Other Changes
All newly added and revised user-facing feedback received locale coverage; Italian was added.
Shared input, selection, switch, checkbox, range, and date-range controls were made responsive and theme-consistent.
Regression coverage was expanded across the release's server, client, persistence, UI, and integration paths.
Changed Files
sky_mechanicjob/README.md
sky_mechanicjob/config/adv_config.lua
sky_mechanicjob/config/config.lua
sky_mechanicjob/config/locales/*
sky_mechanicjob/fxmanifest.lua
sky_mechanicjob/import.sql
sky_mechanicjob/source/* — delete and reinsert
Update InstructionsA guided update for server owners1.22.01.23.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server after both dependencies are current. Back up the complete resource, public config files, generated creator settings, and database. Export existing mechanic invoices, tuning orders, vehicle tuning, and shop configuration before applying the schema.
Install 1.23.0 as a clean package. Pricing, billing, memberships, deliveries, persistence, generated defaults, and the tablet UI depend on matching client, server, config, SQL, and UI files.
Phase 2 of 5
Replace files
Replace fxmanifest.lua, source, the complete built UI, locales, README, and import.sql. Start from the new config/config.lua and config/adv_config.lua, then transfer deliberate server values into the matching new blocks.
Phase 3 of 5
Merge config
Apply every public value change; Absent -> New means the path did not exist in 1.22.0:
Billing defaults exist globally and per job. Replace every job's complete billingSettings table with this block; the first four fields existed in 1.22.0, and every following field is new:
Replace the complete fallback table. showRecipientName, the extended invoice fields, and gradeRules are new; job-specific billingSettings still take precedence:
The /jobconfigFeatures section saves vehicleMaintenanceNotifications and subscriptions; those values override Config.ToggleFeatures. Saved global keys are maintenanceNotificationsEnabled, maintenanceNotificationsThreshold, maintenanceNotificationsCooldownMinutes, subscriptionsEnabled, subscriptionsAllowJobSubscriptions, subscriptionsCurrency, subscriptionsMaximumModels, subscriptionsMaximumDurations, subscriptionsNpcPedModel, subscriptionsNpcScenario, subscriptionsNpcEmoteDict, subscriptionsNpcEmoteClip, tuningBlockedPlates, allowsprint, priceType, and vehicleClassPricing. The exact advanced-pricing keys are advancedPricingEnabled, advancedPricingSupplierSharePercent, advancedPricingRoundingStep, advancedPricingDefaultMarginPercent, advancedPricingMinimumMarginPercent, advancedPricingMaximumMarginPercent, advancedPricingMinimumRetailPrice, advancedPricingMaximumRetailPrice, advancedPricingTaxPercent, advancedPricingQuoteLifetimeMinutes, advancedPricingMaximumDiscountPercent, advancedPricingReturnRefundPercent, advancedPricingAnalyticsPeriodDays, advancedPricingPreviewCostPercent, advancedPricingPreviewCompactValue, advancedPricingPreviewSportsValue, advancedPricingPreviewSuperValue, advancedPricingInventoryEnabled, advancedPricingInventoryBaseStock, advancedPricingInventoryLowStockThreshold, advancedPricingInventoryLowStockMarkupPercent, advancedPricingInventoryDemandMarkupPerUnitPercent, advancedPricingInventoryMaximumDemandMarkupPercent, advancedPricingInventoryRestockPerDay, advancedPricingInventoryDemandDecayPerDay, advancedPricingDifficultyRules, advancedPricingCategoryRules, advancedPricingVehicleClassRules, and advancedPricingMechanicGradeRules.
Saved per-job values are shop, partsDeliveryShop, billingSettings, tuningCostProfile, and allowedVehicleClasses. The defaults migration adds missing oil_absorbent and broom rows without duplicating existing rows; add or verify drift_tyres separately and then verify all three items once. Self-service points additionally save their own allowedVehicleClasses, where an empty list means every GTA class.
Config.Interactions.self_service_tuning.vehicleClassWhitelist = true is only the capability flag that exposes the per-point class editor; it is not a saved class list. Config.Interactions.subscription_terminal exposes a placeable creator point, while each terminal's position is separate saved creator data. Subscription models start from Config.Subscriptions.models and are then managed in the Subscriptions tablet/database, not as ordinary /jobconfig model rows. When Config.UseJobConfigurator = true, resave every workshop because saved overrides win over Lua defaults.
After enabling subscriptions, assign View subscriptions to every workshop role that may open the tablet app and Manage subscriptions to every workshop role that may edit availability, models, durations, prices, or discounts. A player purchasing a company-wide subscription additionally needs Manage money in the purchasing company job; the permission is checked against that company, not the selling workshop.
/antilag is available only while Config.ToggleFeatures.antiLag is enabled. The player must run it in-game as the driver of their own vehicle, and the persisted vehicle tuning must contain an installed Anti-Lag kit. The command rejects passengers, non-owned vehicles, vehicles without the kit, and concurrent toggles for the same plate.
Public pricing and supplier server exports are CreatePricingQuote, GetPricingQuote, ValidatePricingQuote, GetPricingAnalytics, and GetSupplierCatalog. Public billing server exports are CreateInvoice, CreateEstimate, GetInvoice, GetPlayerInvoices, PayInvoice, RespondToEstimate, SendInvoiceReminder, CancelInvoice, and GetBillingAnalytics. GetSubscriptionDiscount(sourceOrIdentifier, jobName) returns the strongest applicable discount percent and its subscription record.
Server-local integration events are sky_mechanicjob:server:pricingQuoteCreated, sky_mechanicjob:server:pricingQuoteExpired, sky_mechanicjob:server:supplierStockChanged, sky_mechanicjob:server:invoiceCreated, sky_mechanicjob:server:invoiceStatusChanged, sky_mechanicjob:server:invoiceOverdue, sky_mechanicjob:server:invoicePaymentRecorded, sky_mechanicjob:server:estimateResponded, sky_mechanicjob:server:invoiceReminderSent, and sky_mechanicjob:server:invoiceCancelled.
The configured oil provider accepts states starting and started; all other states reject the relay and write an English debug diagnostic containing the provider and state. No player-facing notification is emitted for this rejection. Start Config.OilLeaks.integration.resource before Mechanic, select another compatible provider, or deliberately set Config.OilLeaks.enabled = false.
Phase 4 of 5
SQL & items
Run the complete import.sql before startup when Config.AutoExecuteQuery = false. It applies every one of these changes:
Creates sky_mechanic_subscription_settings with society_job, enabled, models, updated_by, and updated_at; primary key society_job.
Creates sky_mechanic_subscriptions with id, identifier, society_job, model_id, model_label, discount_percent, price_paid, purchased_at, expires_at, and updated_at; one customer/workshop unique key plus expiry and workshop/expiry indexes.
Creates sky_mechanic_job_subscriptions with id, customer_job, society_job, model_id, model_label, discount_percent, price_paid, purchased_by_identifier, purchased_by_name, purchased_at, expires_at, and updated_at; one company/workshop unique key plus expiry and workshop/expiry indexes.
Adds document_type, amount_paid, deposit_required, due_at, valid_until, accepted_at, declined_at, reminder_count, reminder_fees, last_reminder_at, and updated_at to sky_mechanic_invoices.
Adds category and cost_type to sky_mechanic_invoice_items.
Creates sky_mechanic_invoice_payments with id, invoice_id, amount, payment_method, payer_identifier, payer_name, and created_at; indexes invoice/time and creation time.
Creates sky_mechanic_pricing_entries with id, order_id, part_index, order_uid, society_job, part_id, part_label, category, vehicle_class, mechanic_grade, retail_revenue, supplier_cost, labor_cost, margin_amount, tax_amount, discount_amount, refund_amount, status, created_at, and updated_at; unique order/part plus job/time, part/time, and status indexes.
Creates sky_mechanic_supplier_stock with society_job, item_name, stock, demand, last_restock_at, and updated_at; composite primary key plus update-time index.
Adds only the ESX items seed drift_tyres (Drift Tyres, weight 15000, not rare, removable). Register it manually in QBCore, Qbox, ox_inventory, or any other active inventory.
oil_absorbent and broom are pre-existing cleanup items and are not inserted by Mechanic SQL. Confirm both are registered before enabling their shop rows. Existing invoice, order, tuning, and membership rows are extended in place; do not drop those tables.
Add a subscription_terminal point to each intended workshop, then restart sky_base, sky_jobs_base, and sky_mechanicjob in that order.
Phase 5 of 5
Restart & test
Base 1.34.0, Jobs Base 1.37.0, and Mechanic 1.23.0 start in order.
Existing tuning, stance, invoices, and workshop settings survive migration and restart.
Advanced pricing stays inactive until enabled, then produces stable server-side quotes, grade caps, supplier costs, returns, and analytics.
Estimates, invoices, deposits, partial payments, reminders, manual lines, privacy, and role limits persist correctly.
Personal and job subscriptions charge the configured account, select only the strongest discount, expire, and display through the configured NPC terminal.
Parts deliveries list every active order in the tablet and allow sprinting only when configured.
drift_tyres, oil_absorbent, and broom are registered in the active inventory; drift tuning uses the first item and both cleanup supplies appear once in migrated shops.
Blocked plates cannot use any tuning route; motorcycle rear wheels and public anti-lag behave correctly.
Add-on stance survives resource start and garage retrieval without duplicate tyres or shutdown-save errors.
Maintenance notices obey threshold/cooldown, and oil leaks reach a started compatible integration resource or remain deliberately disabled.
Update sky_base to 1.33.0 and sky_jobs_base to 1.36.0 before updating sky_mechanicjob.
Highlights
Reliable parts deliveries - partial deliveries preserve their remaining items, pallets keep their targets after movement, carried boxes clean up correctly, and failures return a clear result.
Server-side mechanic integrations - trusted server resources can repair vehicles or wheel damage, inspect and repair wear/condition, check whether tuning exists, and react to completed mechanic operations.
Global Stance control - Stance can be disabled as one complete feature and reacts to Job Configurator changes without a resource restart.
Per-location vehicle-class enforcement - self-service tuning points can apply their configured class whitelist before opening.
Notable Changes
Test-drive vehicles are excluded from persistent wear and wheel-damage processing.
Full repairs preserve custom native engine audio and reapply saved Stance values.
Orphaned tyre damage, tuning state, welding animations, delivery-box movement, and billing-spec updates are handled more consistently.
Workshop lifts and Stance items respond to live configuration changes.
Ordered item and vehicle image sources are used throughout shops, diagnostics, tuning, and dealer views.
Added a complete Serbian locale.
Other Changes
Removed obsolete tyre-reset SQL guidance; no database reset is part of this release.
Added focused regression checks for engine audio, install animations, server integrations, and Stance gating.
Changed Files
sky_mechanicjob/config/config.lua
sky_mechanicjob/config/locales/*
sky_mechanicjob/fxmanifest.lua
sky_mechanicjob/source/* — delete and reinsert
Update InstructionsA guided update for server owners1.21.01.22.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Back up the complete resource and intentional public configuration changes. Use a clean package so client, server, UI, locales, and generated defaults remain synchronized.
Phase 2 of 5
Replace files
Replace the complete runtime and built UI, current locales, generated defaults, and API documentation. Keep all files listed in Changed Files from the new package.
Phase 3 of 5
Merge config
Without /jobconfig, apply these exact additions:
Config path
1.22.0 shipped value / action
Config.ToggleFeatures.stance
New: true; set false to hide and disable Stance functionality globally
New capability flag: true; enables per-location vehicle-class whitelist editing for this interaction type
With /jobconfig, review and save the managed Stance feature. The vehicleClassWhitelist boolean itself is part of the interaction definition, not a normal saved setting; use the configurator to review the actual allowed classes for every self_service_tuning location. No existing public value was removed or changed.
Phase 4 of 5
SQL & items
No SQL migration or reset is required. Do not run old tyre-reset guides. No new inventory item, image, stream file, or metadata file is required.
Phase 5 of 5
Restart & test
Base 1.33.0, Jobs Base 1.36.0, and Mechanic 1.22.0 are running.
Partial deliveries retain undelivered parts and pallet/box targets remain usable.
Disabled Stance is absent from tuning and its usable item is not registered.
Self-service tuning rejects disallowed vehicle classes when whitelist enforcement is enabled.
Test-drive vehicles do not gain persistent wear or wheel damage.
Repairs preserve custom engine audio and saved Stance values.
Trusted server integrations return clear results for repair, condition, wear, tuning, and completion flows.
Version 1.21.0
Update sky_base to 1.32.0 and sky_jobs_base to 1.35.0 before updating sky_mechanicjob.
Highlights
Unpaid public tuning orders - workshops that hide public prices can now accept an unpaid customer order for a mechanic to review and invoice later instead of showing zero-cost work.
Lift bypass for unsuitable vehicles - configurable vehicle classes and models, including motorcycles by default, can complete lift-dependent service work without forcing them onto a workshop lift.
Better workshop lift placement - creator lifts support gizmo placement, initialize vehicle control before lifting, and handle order/service actions more reliably.
Clearer drivetrain tuning - the active drivetrain and drivetrain presets are visible in the correct Handling and Performance sections.
Notable Changes
Custom wheels are installed and displayed correctly in tuning flows.
Parts deliveries use the active job's delivery bay instead of another workshop's location.
Public-order price visibility now clearly distinguishes paid self-service orders from mechanic-invoiced unpaid orders.
Nitro no longer repeats a missing-system notification while the control key is held.
Missing Base or Jobs Base dependencies are reported clearly during startup.
Other Changes
Restored German characters and refreshed the setup documentation.
Updated the resource version to 1.21.0.
Update InstructionsA guided update for server owners1.20.01.21.0
Guided update
Update sky_mechanicjob safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Update sky_base to 1.32.0 and sky_jobs_base to 1.35.0, then stop the server.
Back up
Safe location
Complete sky_mechanicjob folder
Outside the live resources folder
Customized config/function files
Separate custom-config folder
Use a clean resource folder so the rebuilt interface and current runtime always match.
Phase 2 of 5
Replace files
Replace the resource first:
Action
Current server path
New package / destination
Delete
resources/[sky]/sky_mechanicjob
Remove only after the backup exists
Copy
—
Copy the new sky_mechanicjob folder to resources/[sky]/sky_mechanicjob
Keep from new release
fxmanifest.lua, source, and source/html
Do not restore these from 1.20.0
Keep from new release
config/locales
Contains the current setup text
Merge only if customized
Old config/function edits
Reapply intentional values inside the matching new files
Do not copy the old config/adv_config.lua over the new one: it contains an obsolete drivetrain whitelist.
Phase 3 of 5
Merge config
Keep placementGizmo = true in Config.Interactions.workshop_lift in the newconfig/config.lua. This is a placement definition, not an editable /jobconfig setting.
If you do not use /jobconfig, also merge the lift-bypass values with your server settings:
If you use /jobconfig, review Order Install → Lift Bypass Vehicle Classes/Models and Charge public self-service orders, then save. Keep placementGizmo in the runtime config and keep the old drivetrain whitelist removed.
Phase 4 of 5
SQL & items
No SQL migration and no new inventory item are required for sky_mechanicjob1.21.0.
Existing mechanic items, images, workshops, orders, and vehicle data remain in place.
The console reports Mechanic 1.21.0 without dependency errors.
A paid public order charges immediately when prices are visible.
An unpaid public order can be reviewed and invoiced by a mechanic when prices are hidden.
Motorcycles and every configured model/class bypass the lift; ordinary cars still require it.
Lift gizmo placement and vehicle control work.
Custom wheels, drivetrain presets, and the active drivetrain appear correctly.
Parts delivery uses the active job's workshop location.
Version 1.20.0
Update sky_base to 1.31.0 and sky_jobs_base to 1.34.0 before updating sky_mechanicjob.
Highlights
Fake plates survive compatible garage storage - new compatibility helpers let garage resources resolve the real stored plate while Police, radar, dispatch, and visible UI can continue to see the active fake plate.
Safer RGB controller tuning - mechanics can only edit installed neon directions, unavailable controls are disabled, and vehicles without compatible neon are rejected clearly.
Workshop management in Job Configurator - workshop entries now have a dedicated creator section with localized labels and job-aware filtering.
Optional mechanic-first repair policy - repair-kit use by non-mechanics can be blocked while a mechanic is on duty, with a clear localized message.
Notable Changes
Added the Full Dark theme across Mechanic tablet apps.
Fake plate state can be restored after compatible garage flows instead of being lost during storage.
Vehicle ownership queries now use owned_vehicles on ESX and player_vehicles on QB-based frameworks.
Custom chrome paint is hidden and rejected when the active tuning profile does not allow it.
Mechanic item and vehicle artwork now supports PNG and WebP fallbacks.
Other Changes
Added public compatibility files and setup guidance for fake-plate-aware garage resources.
Updated the resource version to 1.20.0.
Update sky_base to 1.31.0 and sky_jobs_base to 1.34.0.
Download sky_mechanicjob from the CFX Portal and create a resource backup.
Replace the /source folder, including the rebuilt interface under /source/html.
Replace /fxmanifest.lua so version 1.20.0 and the new /compat files are loaded.
Add the complete new /compat folder. For garage/framework resources that must resolve the real stored plate, add shared_script "@sky_mechanicjob/compat/fakeplates_realplate_native.lua" near the top of that resource's manifest and declare dependency "sky_mechanicjob". Do not add this override to Police, dispatch, radar, or UI resources that should see the displayed fake plate. See Fake Plate Integration for complete manifest and persistence examples.
If a resource should choose between real and displayed plates itself, load @sky_mechanicjob/compat/fakeplates.lua and use the provided compatibility helpers described in the updated README and integration guide.
If you do not use /jobconfig, merge these /config/config.lua changes manually:
Change Config.FakePlates.resetOnGarageStore from true to false when fake plates should persist through compatible garage storage. Retain true if storing a vehicle should deliberately remove its fake plate.
Under Config.VehicleCare.repair, add blockForNonMechanicsWhenMechanicsOnDuty = false. Set it to true to reserve repair-kit use for mechanics whenever at least one mechanic is on duty.
If you use /jobconfig, verify the Fake Plate garage-reset and Vehicle Care repair-access values before saving.
Replace /config/sv_functions.lua, then restore customer-specific integration code from your backup.
No SQL migration is required.
Restart sky_mechanicjob and test fake plate storage/restoration with every installed garage, RGB controller neon restrictions, profile-blocked chrome paint, repair-kit access, and Workshop Creator filtering.
Version 1.19.0
Update sky_base to 1.30.0 and sky_jobs_base to 1.33.0 before updating sky_mechanicjob.
Highlights
Complete fake plate system - mechanics can create and install temporary display plates with ownership, distance, engine, duplicate, cooldown, expiry, crash-loss, blacklist, and audit controls.
Synchronized engine-sound previews - preview revs are relayed to nearby players so engine-sound tuning can be evaluated together before purchase.
Safer workshop deletion - jobs with active deliveries, tuning work, invoices, or vehicle service obligations cannot be removed until their operational records are resolved.
Notable Changes
Framework-spawned vehicles now restore broken tyres, doors, and windows along with their other saved properties.
Overdue delivery orders are promoted when ready orders are fetched, and on-duty staff receive refreshed ready pallets.
Duplicate vehicle-lift props are prevented after reconnects and creator-owned lift props disappear when their creator entry is deleted.
The mechanic tablet closes correctly after invoice payment.
Sliders update visually when a tuning option is reset to its default.
Registered Job Configurator defaults now cover the complete current mechanic configuration.
Added an administrator command permission for resetting an active fake plate.
Other Changes
Added configurable optional risk and illegal-market rules for fake plates.
Added audit storage and default item records for blank plates, fake-plate kits, plate scanners, and plate printers.
Updated the resource version to 1.19.0.
Update sky_base to 1.30.0 and sky_jobs_base to 1.33.0.
Download sky_mechanicjob 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 fake-plate scripts and version 1.19.0 are loaded.
If you do not use /jobconfig, copy the complete Config.FakePlates block into /config/config.lua. Review at least the enabled state, item names, plate length/pattern/blacklist, ownership and vehicle-state requirements, interaction distances, install time, cooldown, expiry/restart/garage behavior, duplicate prevention, audit logging, crash falloff, optional typo risk, and optional illegal market.
If you use /jobconfig, verify the same Fake Plates values there before saving. The block must still exist in config.lua when your setup does not import configurator defaults.
Add the fakeplatereset command permission to /config/adv_config.lua.
Replace /config/sv_functions.lua, then restore customer-specific server integration code from your backup.
Run the updated /import.sql if automatic query execution is disabled. It creates the fake-plate audit table and adds the four default plate-related items for compatible inventories.
Register the plate items and images manually if your inventory does not use the bundled SQL/item integration.
Restart sky_mechanicjob and test plate installation/removal, garage expiry behavior, nearby engine-sound previews, saved vehicle damage, active deliveries, and protected job deletion.
Version 1.18.0
Before updating, make sure sky_base and sky_jobs_base are up to date. The updated Job Configurator defaults and config import flow require the matching shared-resource release.
Highlights
Tyre repairs now follow each damaged wheel. Missing and burst tyres are tracked individually, mechanics work on the affected side with the car jack, and Vehicle Diagnostics shows the remaining tyre condition and repair progress.
Optional vehicle-fire integration with Sky Fire Job. Critical engine damage and severe frontal impacts can create configurable vehicle fires when sky_firejob is available, while mechanic repairs clear matching fire and entrapment states.
Safer Job Configurator defaults and imports. Shipped defaults remain stable even when local config files are customized, and existing local values can be imported deliberately through the matching jobs-base workflow.
Notable Changes
Added configurable workshop map blips, including station labels, sprite, color, scale, display mode, and short-range behavior.
Added optional mechanic notifications when customers place self-service tuning orders, with an optional vehicle plate in the message.
Added configurable non-minigame installation rules for large vehicles and selected vehicle models.
Vehicle washing and waxing now support large vehicles more reliably.
Tire smoke color changes now preview live during tuning, with smoother preview updates and restoration when the preview is cancelled.
Added /fix as an admin repair alias.
Instant Tuning now consistently rejects Stance wheel-size and wheel-width options when those features are disabled.
Other Changes
Improved tyre repair restoration so unrelated body, engine, window, door, dirt, and remaining wheel damage are preserved correctly.
Improved oil-leak diagnostics for frontal-impact and active-leak flows.
Wear, oil-leak, fire, and wheel-damage effects no longer apply to invulnerable vehicles.
Pressing the Nitro control no longer shows a missing-installation notification when Nitro is disabled for the current job.
Job Configurator fire settings are hidden automatically when the optional Fire Job integration is unavailable.
Workshop Creator-owned settings remain sourced from customer configuration during generated-default builds.
Update sky_base and sky_jobs_base to their matching releases first.
Download sky_mechanicjob from the CFX Portal and create a backup of customized files.
Replace the /source folder, the built frontend files in /source/html, and fxmanifest.lua.
Replace /config/locales so the new self-service order and tyre-repair text is available.
Merge the updated Config.Jobs entries from config/config.lua, especially the new blip and selfServiceOrderNotifications settings.
Merge the updated Config.OrderInstall vehicle-class and vehicle-model lists if large vehicles should use the non-minigame installation flow.
Merge Config.FirejobVehicleFires if you use sky_firejob, and review its critical-engine and frontal-impact thresholds in /jobconfig. No Fire Job resource is required when this integration is not used.
Merge the new Config.WheelDamage.repairRestore, tyreRepair, and deformation settings if you keep a customized config file.
Open /jobconfig, review workshop blips, self-service order notifications, vehicle-fire settings, and wheel-damage repair settings, then save the jobs you changed.
If existing local config values should become the initial Job Configurator values, use the config import workflow provided by the matching sky_jobs_base release before making further edits.
Restart sky_jobs_base, sky_mechanicjob, and sky_firejob when the optional vehicle-fire integration is enabled.
Test a missing tyre on each vehicle side, a burst tyre, self-service order notifications, workshop blips, large-vehicle installs, and optional vehicle-fire cleanup after a mechanic repair.
Version 1.17.0
Before updating, make sure sky_base and sky_jobs_base are up to date. Several billing and storage improvements require the matching jobs-base release.
Highlights
Billing was expanded as one complete workflow. Mechanic billing now supports protected default prices, Bossmenu custom positions, editable custom invoice prices, saved labels, and cleaner Billing settings inside the Job Configurator.
Order parts can be taken from job storage. Mechanic jobs can choose whether tuning-order parts are consumed from the player's inventory or from the workshop's shared storage.
Vehicle and Nitro systems were tightened up. Wheel tasks now follow the real vehicle wheel count, diagnostics repairs have a safer vehicle-class fallback, pushed vehicles align better with stance height, and external Nitro HUDs have a supported API.
Notable Changes
Added a Custom position dropdown to the mechanic tablet Billing app for boss-created custom prices.
Custom invoice positions support editable prices when custom prices are enabled and are stored as normal invoice items.
Added a new inventory image for engine_sound_kit.
Added the per-job Order item source setting for Player inventory or Storage.
Storage mode shows combined job-storage item amounts in Orders and consumes installed parts directly from storage.
Mechanic default billing rows are now protected in Bossmenu and keep their labels and prices synchronized.
Mechanic billing price controls are shown inside the Billing settings page instead of a separate Billing Prices tab.
Added Config.Nitro.externalUpdateIntervalMs in config/adv_config.lua for external Nitro HUD update timing.
Vehicle wheel tasks now adapt to the real vehicle wheel count, so motorcycles use front/rear tasks while cars keep four wheel positions.
Vehicle persistence was adjusted to avoid engine sound dropouts and fuel HUD value jumps while driving.
Vehicle push animations now stay aligned better on vehicles with raised stance settings.
Vehicle Diagnostics repairs now work better on server artifacts where the server cannot read the vehicle class directly.
Added an external Nitro HUD API for resources that want to display their own Nitro interface.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal and create a backup of customized files.
Replace the /source folder and update fxmanifest.lua.
Replace the built frontend files in /source/html.
Replace /config/locales so the new billing and wheel-task text keys are available.
Copy config/inventory/engine_sound_kit.png into your active inventory image setup if your inventory does not load images directly from the resource.
Merge config/adv_config.lua if you keep a custom file, especially the new Nitro external update interval:
Config.Nitro.externalUpdateIntervalMs = 150
Open /jobconfig, review every mechanic job's Order item source and Billing settings, then save the jobs you changed. Player inventory keeps the old behavior; Storage requires the workshop storage to contain the required install parts.
Make sure the matching sky_jobs_base billing migration is installed so billing labels can be saved in sky_jobs_billing_specs.
Restart sky_jobs_base and sky_mechanicjob.
Test custom billing positions, storage-based order installation, billing price editing, motorcycle wheel tasks, diagnostics repairs, and Nitro HUD integration if used.
Version 1.16.0
Before updating, make sure sky_base and sky_jobs_base are up to date. The configurable Instant Tuning profile and workshop vehicle-class selection require the matching shared-resource releases.
Highlights
Configurable Instant Tuning. Administrators can now control the performance stages, appearance modifications, wheel types, special options, and individual values available at global Instant Tuning locations. Client menus use the dedicated profile, and purchases are validated by the server.
Workshop vehicle specializations. Each mechanic workshop can be limited to selected GTA vehicle classes. The restriction applies to tuning, removal, diagnostics repairs, and order installation, while an empty selection continues to allow every class.
Configurable vehicle fluid leaks. Severely damaged engine-oil or transmission-fluid parts can create fluid trails while driving. Heavy frontal impacts can also create an immediate spill and start a configurable timed leak for combustion vehicles.
Notable Changes
Existing Job Configurator entries are migrated automatically to add engine_sound_kit to the normal mechanic shop and tablet Parts Shop. The migration is idempotent and preserves custom items and prices.
Added configurable thresholds, probabilities, intervals, speed and distance limits for wear-based oil leaks under Config.OilLeaks.
Added configurable frontal-impact detection using impact speed, speed loss, vehicle damage, optional front deformation, trigger chance, cooldown, leak duration, and spill radius.
Added all vehicle fluid leak and frontal-impact settings to the global in-game Job Configurator under Vehicle Fluid Leaks.
Added configurable provider routing plus SetFluidLeakProvider and ResetFluidLeakProvider client exports for external spill systems.
Added inventory definitions for engine_sound_kit to the ox_inventory, qs-inventory, QB-Core, and ESX documentation examples.
Fixes and Improvements
Fixed custom xenon RGB colors reverting to white after server restarts or garage cycles. Persisted indexed and custom colors are now reapplied after late garage property updates, and transient white values no longer overwrite the saved color.
Fixed txAdmin vehicle repair leaving Vehicle Diagnostics parts damaged. Repairing the occupied vehicle now restores all wear parts, clears catalytic-converter damage when required, and synchronizes the repaired state to clients.
Fixed mechanic debug messages appearing while sky_base debug mode was disabled. Debug helpers now consistently use the shared gated logger without suppressing production warnings or errors.
Fixed /debugwearzero engine_oil being interpreted as a vehicle plate. The command now supports both /debugwearzero [part] for the current vehicle and /debugwearzero [plate] [part].
Improved frontal-impact detection with a short sampling window and removed reliance on GTA's short-lived collision flag.
Update sky_base and sky_jobs_base to their matching releases first.
Download sky_mechanicjob from the CFX Portal and back up your customized files.
Replace the /source folder and update fxmanifest.lua to version 1.16.0.
Replace the built frontend files in /source/html and update /config/locales.
In config/config.lua, add allowedVehicleClasses to every entry inside Config.Jobs. Use an empty table to preserve unrestricted behavior, or list GTA class IDs from 0 through 22:
Config.Jobs = {
{
name = "mechanic",
-- Empty accepts every vehicle class. Example restriction: { 8, 9 }.
allowedVehicleClasses = {},
-- ... existing job settings ...
}
}
In config/config.lua, add the complete Config.OilLeaks block after Config.Wear and before Config.WheelDamage. The new integration table selects the fluid-spill provider; the remaining values become fallback defaults for the in-game Job Configurator:
The new Vehicle Fluid Leaks section is stored by /jobconfig. After the first save, its 25 runtime values override the matching enabled, trail, part-threshold, chance, and frontalImpact fallback values above. The integration provider fields remain managed in config/config.lua.
Open /jobconfig, configure Instant Tuning > Tuning, review Vehicle Fluid Leaks, and review allowedVehicleClasses for every mechanic workshop. Empty vehicle-class selections allow all classes.
Existing Job Configurator jobs receive engine_sound_kit in the normal shop and tablet Parts Shop automatically. If you do not use that migration, add the item to both catalogs manually and add its definition to your inventory framework.
No new setting is required in config/engine_sounds_config.lua when updating from 1.15.0; keep its existing defaultPrice, stockPrice, requiredItem, disableVehicleRadio, and per-sound price values.
Restart sky_base, sky_jobs_base, and sky_mechanicjob.
Test Instant Tuning restrictions, an unsupported vehicle class, custom xenon persistence after a garage cycle, txAdmin repair, and both wear-based and frontal-impact fluid leaks.
Version 1.15.0
Before updating, make sure sky_base and sky_jobs_base are up to date — install the matching releases first. 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
Self-service engine sound orders. Customers can now buy custom engine sounds through self-service tuning, fulfilled as a mechanic tablet order. The install flow opens the hood, plays a mechanic work animation, applies the selected sound, and closes the hood. A new engine_sound_kit item is required for the order.
Configurable engine sound prices. Each custom engine sound can have its own fixed price, including fallback and stock-restoration prices. Prices show correctly in the tuning basket and respect the instant-tuning price multiplier.
Physical brake installs. Normal and ceramic brake tuning now use the same workshop-lift workflow as stance installs — the vehicle must be raised, and the mechanic is guided through all four wheel positions with brake-specific checklist and radial text before the install completes.
Plate installs at the plate. License-plate tuning (plate holder, vanity plate, plate style) now requires the mechanic to stand at the front or rear license plate instead of the vehicle side, with a dedicated checklist step, a contextual radial action, and front/rear distance checks.
Notable Changes
Stance wheel size & width toggles — separate mechanic feature toggles for Stance wheel size and wheel width, disabled by default. When off (via config.lua or the in-game Job Configurator), the related Stance sliders are removed from tuning menus and their values are ignored everywhere, so wheel-scale tuning is not applied.
Engine sound preview no longer touches the radio — applying or previewing a custom engine sound no longer turns the GTA vehicle radio on or switches stations. A dedicated EngineSounds.disableVehicleRadio toggle optionally suppresses only the normal vehicle radio, without changing the custom engine audio itself.
Plate install positioning — new Config.OrderInstall.plateInstallDistance and plateInstallSideTolerance tune how close and how centered on the plate the mechanic must stand for plate installs.
Fixes and Improvements
Fixed engine hoist props not always appearing after a server start or player join until sky_mechanicjob was restarted — the hoist props are now re-synced and respawned reliably during startup.
Fixed custom engine sounds not always persisting for tuning orders or after a vehicle was spawned from a garage — live engine-sound state is now saved and reapplied after restore, so late garage writes can't leave the vehicle on stock audio.
Fixed mechanic paint and persisted tuning not applying immediately to vehicles spawned through Quasar AdvancedGarages map parking — saved paint, stance, RGB, and performance tuning are now reapplied before the player enters the vehicle.
Fixed vehicle mileage resetting when a player drove a vehicle and then disconnected or restarted the resource without a normal driver-exit — mileage is now saved periodically while driving and once more on resource stop.
Migrated internal item add/remove calls to the new sky_base inventory signature (slot + metadata).
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_mechanicjob from the CFX Portal and create a backup of your customized files.
Replace the /source folder and update fxmanifest.lua (version 1.15.0).
Replace the built frontend files in /source/html.
Run the updated import.sql to seed the new engine_sound_kit item (or add the item to your inventory manually). With Config.AutoExecuteQuery enabled (default) this runs on start.
Update /config/locales (new cz.lua; new brake, plate-install, engine-sound, and Stance-toggle strings in English & German — other languages fall back to English).
Merge config/engine_sounds_config.lua — it adds defaultPrice, stockPrice, requiredItem = "engine_sound_kit", the disableVehicleRadio toggle, and an optional per-sound price:
Config.EngineSounds = {
-- ... existing settings ...
+ defaultPrice = 5000,
+ stockPrice = 5000,
+ requiredItem = "engine_sound_kit",
+ disableVehicleRadio = true, -- keep the normal GTA radio off while applying a custom engine sound
sounds = {
- { audioName = "MONSTER", label = "Monster" },
+ { audioName = "MONSTER", label = "Monster", price = 5000 },
-- ... add a per-sound `price` to each entry (falls back to defaultPrice if omitted) ...
}
}
In config/config.lua, apply the additive changes below (defaults keep the previous behaviour):
Add the two new Stance toggles to Config.ToggleFeatures (both off by default):
Config.ToggleFeatures = {
workshopLift = true,
stanceWheelSize = false, -- enable the Stance wheel-size slider
stanceWheelWidth = false, -- enable the Stance wheel-width slider
}
- Add the `engine_sound_kit` item to each job's tuning catalog and point the `engine_sound` tuning option at it:
```diff
-- in each Config.Jobs[*] item catalog:
{ name = "engine_sound_kit", label = "Engine Sound Kit", price = 750 },
-- and in the tuning options:
engine_sound = {
enabled = true,
Open /jobconfig and review the new Stance wheel-size / wheel-width toggles and engine-sound prices for every mechanic job.
Restart the server, or fully restart sky_base, sky_jobs_base, and sky_mechanicjob.
Test self-service engine sound orders, brake installs on the lift, plate installs at the front/rear plate, and engine-sound persistence after a garage spawn.
Version 1.14.0
Before updating, make sure sky_base and sky_jobs_base are up to date. This release uses the latest shared interaction, Job Configurator, and tablet notification behavior.
Highlights
Added synchronized custom engine sounds with an audible tuning preview for the mechanic and nearby players.
Added a multiplayer vehicle push system for heavily damaged vehicles, including steering, stamina, terrain effects, and support for up to three players.
Added finer per-job tuning controls for individual upgrade stages, values, and paint ranges such as Chameleon colors.
Improved Stancer synchronization, tuning preview protection, Parts Delivery notifications, and overall client performance.
Notable Changes
Custom engine sounds are now replicated through the vehicle state so nearby players hear the selected sound. The engine continuously revs while an Engine Sound option is focused, making sounds easier to compare before purchase.
Engine sound entries accept common field formats and case-insensitive matching while preserving the configured GTA audio name.
Disabled vehicles can be pushed from the front or rear with E, steered with A/D, moved with W/S, and boosted with SHIFT.
Vehicle pushing supports weight classes, slopes, stamina, helper bonuses, synchronized three-player formations, automatic cancellation, and a dedicated status HUD.
Tuning profiles can enable or disable individual upgrade stages and use allowedValues or blockedValues for exact values and ranges.
The Job Configurator now provides value controls and presets for Standard and Chameleon paint ranges without requiring manual JSON editing.
Realistic Wheel Damage multipliers now update immediately after saving Job Configurator changes and support decimal values such as 0.1.
Secondary tuning sections are grouped under a localized More menu, while the main categories and basket stay directly accessible.
Fixes and Improvements
Unpaid tuning previews now freeze the connected vehicle and restore its original state if the player exits, changes driver, moves the vehicle, or leaves the workshop area.
Stancer wheel size, wheel width, camber, track width, and suspension height remain more reliable after rim changes, installation, garage spawning, vehicle damage, stream-in, and driver changes.
Parts Delivery notifications now validate that a delivery still exists before creating a waypoint. Valid notifications mark the pickup location instead of reopening the Parts Shop.
Mechanic tablet apps are registered for mechanic jobs created only through /jobconfig, not only jobs listed in config.lua.
Reduced idle client usage for Stancer updates, vehicle persistence, vehicle push detection, Parts Delivery checks, and self-service tuning interactions.
Healthy vehicles can no longer be pushed only because their engine was switched off.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal and create a backup of your customized files.
Replace the /source folder and update fxmanifest.lua.
Replace the built frontend files in /source/html.
Update /config/locales, or merge the new Engine Sound, Parts Delivery waypoint, Vehicle Push, and More menu translation keys into custom locale files.
Add or merge config/engine_sounds_config.lua. Custom sound audio files and audio data must still be supplied and ensured by your sound resource. See Custom Engine Sounds for the complete setup.
If you keep a customized adv_config.lua, merge the new Config.VehiclePush section and review its damage threshold, movement, stamina, HUD position, unsupported classes, and weight classes.
If you keep custom tuning profiles in config.lua, review per-stage enabled values and the new allowedValues / blockedValues rules.
Open /jobconfig and review Tuning Prices and Wheel Damage for every mechanic job.
Restart the server or fully restart sky_base, sky_jobs_base, and sky_mechanicjob.
Test custom engine sounds with two players, damaged-vehicle pushing, restricted tuning values, Stancer persistence, and Parts Delivery notification waypoints.
Version 1.13.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Added partial tuning-order refunds for individual uninstalled positions or all remaining uninstalled positions while keeping installed tuning paid.
Added live inventory counters for every required part in the mechanic tablet's tuning-order details.
Added per-job Nitro access overrides with inherit, enabled, and disabled modes.
Added configurable account or inventory-item payouts for the stolen parts dealer.
Added configurable Stancer slider scales, bounds, and defaults.
Added an external HUD visibility hook for tuning sessions.
Notable Changes
Refunded tuning positions now keep their amount, timestamp, and responsible employee for a complete audit trail.
Order totals and statuses are recalculated after partial refunds, and refunded positions can no longer be installed.
Server-side order locking prevents refund and installation actions from modifying the same order simultaneously.
Required-part counters total matching items across all inventory slots and display (0) when an item is missing.
Parts Delivery now waits for valid network IDs, recreates invalid delivery entities, retries client resolution, and requests a fresh sync when necessary.
Delivery resolver threads are cancelled when deliveries are removed, preventing missing or resurrected pallets and repeated network-object warnings.
Wheel size and width synchronization now handles late-streaming garage vehicles, delayed property restoration, changed wheel setups, and superseded state updates.
Instant Tuning now has its own localized menu title while preserving the existing Admin Tuning, Self Service Tuning, RGB Controller, and Stance Kit titles.
Stance wheel adjustments on Workshop Lifts now use the dedicated streamed tune/anim animation and continue when FiveM reports a custom clip duration of 0.0.
Per-job Nitro access is enforced for boost use, Nitro Kit installation, installation callbacks, and state updates without restricting other workshop tuning features.
Stolen parts dealer item payouts validate inventory capacity and restore the sold part if the payout item cannot be added.
Saved vehicle-specific Stance values remain higher priority than configured slider defaults, while Reset Stance still restores the captured factory state.
Other Changes
Added Config.Functions.SetExternalHudVisible(visible) so external HUDs can be hidden while tuning is open and restored through every central close path.
External HUD export failures are logged without blocking the tuning menu.
Existing tuningCostProfile.nitroAccess values remain supported as a compatibility fallback.
Added detailed stolen parts dealer diagnostics for configurator updates, payout targets, inventory checks, framework results, and balances.
Added validation for invalid Stancer scales and reversed slider bounds.
Added the localized Instant Tuning title to every bundled mechanic locale and rebuilt the production NUI.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder and update fxmanifest.lua.
Replace the built frontend files and /config/locales, or copy the new Instant Tuning and refund translation keys into your custom locale files.
Copy the new /stream/tune.ycd animation file included with the resource.
If you keep your own mechanic job entries in config.lua, add the new Nitro access setting to each job:
nitroAccess = "inherit" -- "inherit", "enabled", or "disabled"
If you keep your own Config.PartsTheft, update the stolen parts dealer settings:
If you keep your own adv_config.lua, add the new Stancer slider configuration:
Config.StancerOptions = {
scale = 100,
bounds = {
camber_front = { min = -45, max = 45 },
camber_rear = { min = -45, max = 45 },
track_width_front = { min = 0, max = 150 },
track_width_rear = { min = 0, max = 150 },
suspension_height = { min = -30, max = 30 }
},
defaults = {
camber_front = 0,
camber_rear = 0,
track_width_front = 80,
track_width_rear = 80,
suspension_height = 0
}
}
To integrate an external HUD, override the new hook in adv_config.lua:
Config.Functions.SetExternalHudVisible = function(visible)
exports["your_hud_resource"]:SetHudVisible(visible)
end
Review the new Nitro access and stolen parts dealer payout settings in /jobconfig.
Restart the server or fully restart sky_base, sky_jobs_base, and sky_mechanicjob.
Version 1.12.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Added support for GTA V's VMT Lightbar tuning slot, including pricing, required items, previews, installation, localization, and persistence.
Added automatic Workshop Lift detection for configured MLO/YMAP lift props and support for multiple lift model sets.
Reworked Stance installation into a physical four-wheel Workshop Lift workflow for tuning orders and the usable Stance Kit.
Added optional police dispatch alerts for successful wheel and catalytic converter thefts.
Notable Changes
Stance changes are now installed at all four wheel positions while the vehicle is raised on a configured Workshop Lift.
A localized Stance checklist and contextual radial actions track each completed wheel position before the selected Stance is applied and saved.
Existing matching MLO/YMAP lift props can now be reused instead of spawning duplicate lift objects.
Configured lift prop pairs can be discovered automatically without placing a workshop_lift point in Workshop Creator.
Compatible vehicles now show Lightbar variants from modification slot 49 in the Bodywork tuning section; vehicles without variants remain unchanged.
Repair Kits can now separately control normal vehicle damage, realistic wheel damage, and every mechanic wear part they restore.
Persisted engine, brake, transmission, suspension, turbo, armor, and Custom Handling upgrades are restored more reliably after garage spawning.
Self-service tuning markers are restored correctly when older Job Configurator data contains self_service_tuning.interaction=false.
Successful parts thefts can send configurable police dispatches with custom jobs, title, message, and cooldown.
Other Changes
Added Config.Functions.SendPartsTheftDispatch(source, data) so server owners can replace the default sky_jobs_base dispatch integration.
Existing MLO lift props are preserved during cleanup, refreshes, and resource stops.
Added periodic lift prop discovery for MLO objects that stream in after resource start.
Added detailed stolen parts dealer payout diagnostics for the active payout account, inventory changes, framework payout result, and before/after balances.
Added performance tuning values to vehicle persistence debug logs.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder and update fxmanifest.lua.
Replace the /config/locales folder, or copy the new Lightbar, Stance installation, checklist, progress, notification, and validation translation keys into your custom locale files.
If you keep your own adv_config.lua, update Config.WorkshopLiftSystem with configurable lift model sets and existing MLO/YMAP prop detection:
If you keep your own adv_config.lua, add the new Workshop Lift radial distance setting inside Config.WorkshopLiftSystem:
radialDistance = 4.5
If you keep your own parts delivery config, add the new timer HUD settings inside Config.PartsDelivery:
timerHud = {
enabled = true,
position = {
left = "50%",
top = "3vh"
}
}
Restart the server or fully restart sky_base, sky_jobs_base, and sky_mechanicjob.
Version 1.10.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Improved vehicle repair reliability so fix kit repairs now also reset mechanic wear consequences and limp-mode states.
Stabilized Stancer defaults, persistence, wheel size, and wheel width handling across tuning, checkout, parking, and restarts.
Added stronger RGB xenon and neon persistence guards so saved light settings are not overwritten by temporary stock-like vehicle reads.
Added Workshop Lift debug diagnostics to help investigate invisible, duplicated, or incorrectly synced lift props.
Improved Job Configurator integration by disabling the legacy Workshop Creator when the configurator flow is active.
Notable Changes
Fixed normal fix_kit repairs so they clear transmission limp mode, electric limp mode, engine damage, undriveable state, and related wear effects.
Fixed stale physical carry item states so mechanics can take parts from storage again without needing to reconnect.
Updated the mileage HUD runtime toggle so it appears or disappears immediately for active drivers after Job Configurator changes.
Reworked Stancer reset/default handling so vehicle defaults are captured once and custom stance changes are saved separately.
Preserved persisted Stancer values when unstable native reads return stock-like values during save or restore windows.
Improved Wheel Size and Wheel Width handling with dedicated Stancer option detection, tire/rim collider updates, and debug readback output.
Protected saved xenon and underbody neon settings from being replaced by transient disabled/default live reads outside active tuning sessions.
Added localized Workshop Creator disabled messages for all supported mechanic locale files.
Added detailed debug-only lift logs for model names, hashes, entities, coordinates, nearby objects, cleanup, creator sync, and attach/detach broadcasts.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace fxmanifest.lua so version 1.10.0 is loaded (it now also 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):
Replace the mechanic locale files if you want the new Workshop Creator disabled message in all supported languages.
Restart the server or fully restart sky_base, sky_jobs_base, and sky_mechanicjob.
Test fix kit repairs, Stancer reset/persistence, RGB xenon/neon persistence, carry-item storage pickup, mileage HUD toggles, and workshop lift behavior.
Version 1.9.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Improved mechanic tuning, carry-item, parts delivery, and instant tuning flows.
Added Engine Hoist support for engine installs.
Added better Instant Tuning management through the Job Configurator.
Notable Changes
Fixed engine installs so carried engines and inventory engines are both handled correctly.
Fixed moved parts delivery pallets so they can still be unpacked.
Fixed tuning freecam focus so players can return to the tuning UI more reliably.
Fixed tuning basket removal so other preview changes are not lost.
Fixed unpaid light previews so they are restored when tuning is closed.
Added stancer support to the applied tuning list in the mechanic tablet.
Added an admin full vehicle repair export.
Improved customer name display by preferring in-game character names.
Fixed self-service tuning so it creates mechanic orders again.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace fxmanifest.lua so version 1.9.0 is loaded.
Replace config/config.lua if you want the new default Engine Hoist carry-item transport setting.
Restart the server or fully restart sky_base, sky_jobs_base, and sky_mechanicjob.
Open /jobconfig and verify Instant Tuning, Tuning Prices, and Carry Items if Config.UseJobConfigurator = true.
Version 1.8.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Added shared in-game job configurator support for mechanic jobs, features, interactions, pricing/settings, parts delivery, wear, wheel damage, vehicle care, and carry-item settings.
Notable Changes
Fixed Nitro, Anti-Lag, and Two-Step backfire effects on tuned exhausts through shared vehicle effect handling.
Added config/adv_config.lua and moved advanced/static settings out of the main config/config.lua.
Update sky_base and sky_jobs_base first.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace fxmanifest.lua so version 1.8.0 and the new config file list are loaded.
Replace config/config.lua.
Add the new config/adv_config.lua.
Restart the server or fully restart sky_mechanicjob.
Open /jobconfig and verify the Mechanic Job settings if Config.UseJobConfigurator = true.
Version 1.7.1
Before updating, make sure sky_base and sky_jobs_base are up to date.
Changes
Fixed vehicle color handling so selected paint, custom colors, pearlescent, wheel, dashboard, and interior colors are kept more reliably after tuning and restoring vehicles.
Reworked Stancer saving and loading so stance changes stay synced better, while self-service previews no longer save unpaid changes before checkout.
Download sky_mechanicjob from the CFX Portal.
Replace the /source folder.
Replace fxmanifest.lua so version 1.7.1 is loaded.
Restart the server.
Version 1.7.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Stancer persistence was fully stabilized across re-enter, garage outpark, impound retrieval, menu close/reopen, and resource restart.
Vehicle restore timing and guard flow were cleaned up to stop duplicate overwrite waves and workshop flicker behavior.
Core runtime systems (Anti-Lag, Nitro, Two-Step, Self-Service pricing, Instant Tuning access) were unified and made more reliable.
Notable Changes
Stancer persistence overhaul:
Added session snapshot + dirty-state handling to prevent transient GTA defaults from overwriting tuned stance.
Added immediate debounced save for camber, track width, suspension height, wheel size, and wheel width.
Added stronger delayed stance stability checks for suspension/camber/track after restore.
Persistence stability fixes:
Fixed runtime blockers around sanitizePlate and lastKnownStanceByPlate.
Fixed local guard scope/order in vehicle persistence to prevent purchase callback instability.
Reduced broad reapply storms and duplicate late restore paths.
Self-Service / Instant Tuning:
Public self-service pricing visibility is now controlled by Config.TuningCostProfile.publicUsersSeePrices.
Instant tuning now supports global and per-location job restrictions (mechanicOnly, allowedJobs/jobs) with client/server enforcement.
Two-Step / Anti-Lag / Nitro runtime:
Anti-Lag moved to config-driven runtime balancing.
Two-Step now includes configurable launch-control behavior and improved trigger consistency.
Nitro got live HUD/progress sync improvements, better hide behavior, and stronger config runtime control.
Other Changes
Reduced repeated paint apply bursts and restore spam in heavy spawn/re-enter windows.
Improved tuning close behavior so unpaid preview/reset flows do not persist unintended changes.
Restart the server or fully restart the affected resources.
Test vehicle restore after garage, impound, outpark, re-enter, and restart flows.
Test paint, pearlescent, xenon, RGB, livery, and stance values on multiple vehicle types.
Version 1.5.0
Before updating, make sure sky_base and sky_jobs_base are up to date.
Highlights
Added optional physical item carrying through Config.CarryItems, where delivered orders must be unpacked and parts become physical objects that mechanics carry through the workshop by hand or transport in bulk with pallets and forklifts.
Added workshop prop placement support, including configurable props such as cones, barriers, work lights, and parts boxes for better rp.
Notable Changes
Added a forklift to the default mechanic vehicle list for workshops that use physical delivery handling.
Added optional drivetrain swap whitelisting through Config.CustomHandlingOptions.drivetrainWhitelist for vehicles that are safe to switch between drivetrain presets.
Tuning orders are now scoped per workshop, and the vehicle registry now keeps each mechanic business separated correctly.
Added Kiminaze Advanced Parking integration to avoid duplicate vehicles during stance resets.
Improved install flows by skipping hood-opening steps on vehicles without a hood and hiding armor tuning on bikes.
Other Changes
Improved persistence for window tint, liveries, underbody neons, anti-lag state, and paint data.
Fixed vehicles becoming chrome, windows breaking unexpectedly, and braking issues on some addon vehicles.
Fixed stance synchronization for nearby players.
Refunds are now limited to unstarted orders, and refunded orders can now be deleted.
Added Russian translations.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace fxmanifest.lua so version 1.5.0 is loaded.
Add the new workshop props and forklift vehicle entries from the updated Config.Jobs section if you want to use the new prop placement and delivery workflows.
Add interactionDistance to Config.Interactions.self_service_tuning and Config.Interactions.part_delivery if you want to customize those ranges:
interactionDistance = 2.5
Add Config.CarryItems from the new config if you want delivered parts to become physical objects that must be transported through the workshop.
Add the optional drivetrain whitelist if you use drivetrain swaps and want to restrict them to tested vehicle models:
Requires sky_base 1.14.0 or newer andsky_jobs_base 1.15.0 or newer. The admin permission system has been replaced - sky_base must be updated and the three bootstrap ACEs must be added to your server.cfg before ensure sky_base, otherwise /admintuning, /migrate, /workshopcreator, /setboss, and every other admin command will deny everyone except the server console.
Highlights
Added an Applied Tuning section to Vehicle Diagnostics App so mechanics can see and set installed tuning back to stock and receive configured install items back.
Tuning removal now uses the same install workflows as tuning installs, including wheel, brake, suspension, and simple checklist flows.
Added optional workshop-location enforcement for tuning installs and removals through Config.TuningWorkshopRequirement.
Added synced stance state so stance changes are visible to nearby players without them entering the vehicle.
Notable Changes
Command permissions now use sky_base ACE auto-wiring through Config.CommandPermissions, including the Workshop Creator permission.
Parts theft configuration was consolidated into Config.PartsTheft, including lug wrench item settings, stolen wheel item settings, and stolen parts dealer settings.
Instant tuning points can now force marker interaction through Config.InstantTuning.forceMarkerInteraction.
Vehicle lookup now includes a fallback for police vehicles, fixing car jack, wheel, nitro, and catalytic converter interactions on some vehicle classes.
Saved vehicle properties no longer re-apply persisted dirt level when vehicles are entered or tuning data is loaded.
Nitro HUD, order item images, and stolen parts dealer images now use the configured NUI item image base from sky_jobs_base.
Other Changes
Added Swedish translations.
Improved applied tuning loading for diagnostics.
Improved stance sync performance.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace fxmanifest.lua so version 1.4.0 is loaded.
Update Config.CommandPermissions so command permissions are registered through sky_base ACE auto-wiring:
Add overwriteHandling to Config.CustomHandlingOptions:
Config.CustomHandlingOptions = {
enabled = true,
-- Set this to true only when another handling editor/resource overwrites handling on every vehicle enter.
-- WARNING: If no other handling script resets the vehicle handling first, this can multiply tuning again on each vehicle enter.
overwriteHandling = false,
-- ...
}
Add the electric vehicle fallback config if your server run below game build 3258:
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added Vehicle Part Theft as a new criminal gameplay loop where catalytic converters and wheels can be stolen, sold, and repaired.
Added the stolen parts dealer interaction and UI so stolen wheels and catalytic converters can be sold to configured NPC dealers.
Added realistic theft consequences: stolen catalytic converters change vehicle sound and create smoke, while stolen wheels leave vehicles sitting on bricks.
Notable Changes
Added lug wrench theft selection so players can choose whether to steal a wheel or catalytic converter.
Added realistic catalytic converter removal and installation minigames using a jack, bolt interaction, and guided checklist flow.
Added wheel theft support using the existing wheel workflow, synced missing-wheel state, and inventory rewards.
Mechanics can repair stolen parts through diagnostics by replacing catalytic converters or missing wheels.
Added electric vehicle wear support for traction batteries and power inverters, including diagnostics labels and repair flows.
Tuning options can now be disabled individually and can define their own required install items directly in Config.TuningCostProfile.
Added Config.TuningCostProfile.freeVehicles for vehicles that should create free tuning orders.
Vehicle purchase price lookup is now configurable through Config.Functions.GetVehiclePurchasePrice.
Other Changes
Fixed vehicle paint saving and engine health restoration after re-entering vehicles.
Disabled stance support for motorbikes.
Self service tuning now always uses a marker instead of target.
Added lug_wrench.png, catalytic_converter.png, traction_battery.png, inverter.png, antilag_kit.png, and nitro_kit.png inventory images.
Added English, German, and French locale keys for part theft, catalytic converter work, wheel theft, stolen parts dealer, and electric vehicle wear parts.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace the /html or built frontend files included with the resource so the catalytic converter minigame, lug wrench choice, and stolen parts dealer UI are available.
Replace fxmanifest.lua so the new client/server files and version 1.2.0 are loaded.
Copy the new inventory images from config/inventory into your inventory item image setup if your inventory requires item images.
Add the new theft and electric vehicle items to your mechanic shop items:
Add forceMarkerInteraction = true to Config.Interactions.self_service_tuning if you use marker-based self-service tuning.
Update Config.TuningCostProfile from the new config.
Add or merge Config.Functions.GetVehiclePurchasePrice from config/sv_functions.lua.
Add lug_wrench, catalytic_converter, traction_battery, and inverter to your inventory item definitions.
Add one or more stolen_parts_dealer points in Workshop Creator where stolen parts should be sold.
Version 1.1.0
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added configurable instant tuning locations that can apply tuning directly without creating a workshop order.
Added tuning order refund and completed-order delete actions in the mechanic tablet.
Added a fix_kit usable item workflow for repairing nearby vehicles, including realistic wheel damage repair support.
Notable Changes
Tuning prices can now use percentage-based or fixed money values through Config.TuningCostProfile.priceType.
Tuning cost config keys were standardized from percentage-specific names to generic cost fields.
The mechanic tablet now shows order status and payment method, and supports refunded order state.
Currency display is now configurable through locale files.
Custom handling tuning options now save correctly and show as applied in the tuning menu.
Fix kit repairs can reset realistic wheel damage when Config.VehicleCare.repair.fixRealisticWheelDamage is enabled.
Other Changes
Added fix_kit.png inventory image.
Added society_job, refunded_at, refunded_by_identifier, and refunded_by_name columns to sky_mechanic_tuning_orders.
Added English, German, and French locale keys for instant tuning, order refunds, order deletion, fix kit, and configurable currency symbols.
Updated French translations.
Fixed wheel damage repair behavior when using the fix kit.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace the /html or built frontend files included with the resource so the updated tablet order actions and currency display are available.
Replace fxmanifest.lua so version 1.1.0 is loaded.
Copy config/inventory/fix_kit.png into your inventory item image setup if your inventory requires item images.
If you use custom locale files, copy the new instant tuning, order refund/delete, fix kit, and currency translation keys from the updated locale files.
Update Config.TuningCostProfile to the new pricing format in the new config.
Add fix_kit to your inventory item definitions if your inventory requires explicit item registration.
If Config.AutoExecuteQuery = false, run the updated import.sql manually so the tuning order refund columns are created.
Version 1.0.0
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added a realistic wheel damage system with synced wheel damage state, popped tyres, detached wheels, and handling penalties.
Added damaged-wheel repair support through the vehicle diagnostics repair flow.
Improved workshop car lift synchronization so raised vehicles and lift attachments stay consistent for other players.
Notable Changes
Wheel damage now reacts to collisions and hard landings, with configurable multipliers per vehicle class and off-road wheel type.
Wheel damage is synchronized through vehicle state bags and can be reset by mechanic repair actions.
Only one wheel can detach from a vehicle at a time to reduce vehicle physics issues.
Wheel damage runtime performance was improved and the default config was cleaned up.
Sponge and wax inventory item images were added for the vehicle care items introduced in the previous update.
Fixed lift vehicle sync and duplicate lift prop issues.
Other Changes
Added source/client/wheel_damage.lua and source/server/wheel_damage.lua.
Added source/server/lift.lua.
Added Config.WheelDamage.
Updated the diagnostics tablet flow for damaged wheel repairs.
Added wash_sponge.png and vehicle_wax.png inventory images.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace the /html or built frontend files included with the resource so the updated diagnostics repair flow is available.
Replace fxmanifest.lua so source/client/wheel_damage.lua, source/server/wheel_damage.lua, source/server/lift.lua, and version 1.0.0 are loaded.
Copy config/inventory/wash_sponge.png and config/inventory/vehicle_wax.png into your inventory item image setup if your inventory requires item images.
Add the new wheel damage config to config/config.lua:
If you use custom diagnostics or wear repair config, make sure tyre repairs are allowed to use the updated wheel repair flow.
Version 0.6.0
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added vehicle wash and vehicle wax usable-item workflows, including dedicated wash/wax items, animations, particle effects, and a vehicle-care minigame.
Added realistic wheel-based brake and suspension install flows so brake and suspension work now uses jack, wheel detach, component install, wheel attach, and jack removal steps.
Added a configurable install duration and an on-screen progress bar for non-minigame install actions.
Notable Changes
Vehicle wax now keeps a clean vehicle clean for a configurable mileage window through Config.VehicleCare.wax.cleanKilometers.
Wash and wax items are now available in the mechanic shop and Parts Shop delivery catalog.
Brake pad and suspension wear repairs now use the wheel workflow instead of a simple repair flow.
Improved mechanic animations for under-hood repairs, engine swaps, oil draining, oil pouring, and underbody installs.
Added storage, locker, and trunk background images for the mechanic UI.
Fuel level is no longer overwritten when saving or restoring mechanic vehicle properties.
Other Changes
Added source/client/vehicle_care.lua and source/server/vehicle_care.lua.
Added Config.OrderInstall.nonMinigameDurationMs.
Added Config.VehicleCare for wash and wax item configuration.
Added English, German, and French translation keys for vehicle care and the new wheel checklist steps.
Fixed repaint workflow particle effects.
Updated the wheel attach minigame so brake and suspension workflows can reattach the existing wheel.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace the /html or built frontend files included with the resource so the vehicle-care minigame, install progress bar, and storage backgrounds are available.
Replace fxmanifest.lua so source/client/vehicle_care.lua, source/server/vehicle_care.lua, config/img/**, and version 0.6.0 are loaded.
If the release package includes /config/img, copy it so the new storage, locker, and trunk background images are available.
If you use custom locale files, copy the new vehicle-care and wheel-checklist translation keys from the updated locale files.
Add the new wash and wax items to your mechanic shop items:
Add wash_sponge and vehicle_wax to your inventory item definitions and item images if your inventory requires them.
If you use custom wear repair config, make sure brake pad and suspension repairs use the wheel flow.
Version 0.5.0
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added the Parts Shop tablet app for mechanic part orders, including catalog browsing, category filters, basket checkout, own-card and company-card payment, and order history.
Added Parts Delivery points for Workshop Creator so ordered parts arrive as physical delivery boxes at configured workshop locations.
Added tablet push notifications when part deliveries are ready to collect.
Notable Changes
Parts purchases can now be logged in the boss menu, including order UID, price, and ordered item summary.
Parts deliveries now support delivery ETA, pending/ready/claimed status tracking, claim history, and ready-delivery lookup by delivery point.
Delivery box props now scale by order size so larger orders use larger box piles.
Company-card checkout now uses the PURCHASE_SUPPLIES job permission and validates company balance before placing an order.
The Parts Shop app now reopens correctly after closing the tablet, and app permission routing was fixed.
Tuning freecam now blocks player controls while keeping camera look controls available.
Wheel lug nut indicators are easier to see in the wheel detach minigame.
Other Changes
Added the sky_mechanic_part_deliveries database table and automatic migration support.
Added English translation keys for Parts Shop, Parts Delivery, checkout errors, order history, and delivery notifications.
Fixed order history timestamps.
Improved delivery interaction logic.
Refined Parts Shop navbar, color theming, and overall design.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace the /html or built frontend files included with the resource so the new Parts Shop tablet app is available.
Replace fxmanifest.lua so @sky_jobs_base/source/enums/Permission.lua, source/client/parts_delivery.lua, source/server/parts_delivery.lua, and version 0.5.0 are loaded.
If you use custom locale files, copy the new Parts Shop and Parts Delivery translation keys from the updated locale files.
Add the new Parts Delivery interaction to Config.Interactions:
Add a part_delivery point in Workshop Creator for every workshop that should receive part orders.
If Config.AutoExecuteQuery = false, run the updated import.sql manually so sky_mechanic_part_deliveries is created.
Version 0.4.0
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added synced custom xenon colors across players, including re-application when vehicles stream in or players join.
Added German and French translations.
Added a tuning menu reset button for stancing so vehicles can be restored to default stance values directly from the UI.
Notable Changes
Improved stancing persistence when leaving and re-entering vehicles, including wheel size, wheel width, camber, track width, suspension height, and wheel rotation values.
Improved performance for nitro, anti-lag, two-step, RGB effects, vehicle wear, and general in-vehicle idle loops.
Nitro now uses keymapping support through Config.Nitro.activationKey, with separate timing controls for active ticks, input checks, local effects, and remote effects.
Engine hoist props created through the Workshop Creator now spawn and sync more reliably from configured placement points.
Fixed unwanted neon installs during the order workflow.
Other Changes
Fixed stance reset behavior in the tuning menu.
Fixed engine hoist placement in the Workshop Creator flow.
Cleaned up stancing and nitro runtime logic for better maintainability.
Updated two-step default flame scale values.
Download sky_mechanicjob from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/locales folder.
Replace fxmanifest.lua so the new source/client/xenon_sync.lua file and version metadata are loaded.
If you use custom locale files, copy the new translation keys from the updated locale files.
If you use custom config files, update Config.Interactions.self_service_tuning:
If Config.AutoExecuteQuery = false, run the updated import.sql manually so the vehicle profile primary-key migration fix is applied.
Version 0.2.0
Before updating, make sure sky_base and sky_jobs_base is up to date.
Highlights
Added the Vehicles App to the mechanic tablet with searchable, paginated vehicle records, linked tuning orders, service history, tags, notes, and gallery image assignment.
Added automatic database migration support through Config.AutoExecuteQuery.
Added /migrate command for importing tuning data from previous mechanic scripts such as jg-mechanic.
Notable Changes
Vehicle history is now logged for order installs, nitro installs/refills, and wear repairs, including used items, mechanic details, duty state, and action metadata.
Tuning orders can now link back into the Vehicles App, and vehicle records only list vehicles that have mechanic orders.
Tablet apps now reopen and close more reliably, including direct order selection from linked vehicle records.
Self-service tuning now supports multiple placement points and requires the player to be the driver.
Added optional off-duty job configuration per mechanic job.
Xenon color changes now calculate order pricing correctly.
Other Changes
Added sky_mechanic_vehicle_profiles and sky_mechanic_vehicle_history database tables.