# Changelog

<details>

<summary>Changelog - Version 2.1.2</summary>

### Changes

* Added a config option to block lockpicking vehicles while inside garage sections, with a corresponding notification.
* Added debug logging for the vehicle actions loop to help troubleshoot vehicle lock and engine state syncing.

### Files Affected

* <mark style="color:yellow;">client/unlocked/small\_resources/lockpicking.lua</mark>
* <mark style="color:yellow;">server/unlocked/vehicleactions.lua</mark>
* <mark style="color:yellow;">shared/unlocked/config.lua</mark>
* <mark style="color:yellow;">shared/unlocked/functions.lua</mark>
* <mark style="color:yellow;">fxmanifest.lua</mark>

<p align="right"><sup><sub><mark style="color:$info;">2026-04-22 06:40 CET</mark></sub></sup></p>

</details>

<details>

<summary>Changelog - Version 2.1.1</summary>

**Changes**

* Added a live preview wall when creating garage sections to better visualize boundaries and height.
* Improved boat garage support in the Garage Builder.
  * The system now uses a boat model for previews instead of a car when editing boat-only garages.
  * Raycasting now respects water levels to ensure accurate placement of boat spawn points.
* Added a developer command to remove vehicles that are currently outside of defined sections.
* Updated the vehicle cleanup logic to automatically ignore and preserve vehicles located within a section.
* Refactored the Blip Settings interface and logic within the Garage Builder for better usability.
* Improved the UI responsiveness when editing labels by implementing debounced inputs.
* Fixed an issue where garage section points could be placed in invalid locations when the placement cursor wasn't hitting a surface.
* Fixed a bug in the persistent vehicle system that caused certain values to reset incorrectly.
* Implemented a more dedicated and reliable saving method for persistent vehicles.
* Fixed a calculation error in the vehicle locking logic and adjusted the check interval for better performance.
* Improved UI text input styling to ensure placeholder and error text remains legible.
* Updated localization files for all supported languages.

**Files Affected**

* <mark style="color:yellow;">client/locked/garage\_builder/EditSection.lua</mark>
* <mark style="color:yellow;">client/locked/garage\_builder/EditSpawnPositions.lua</mark>
* <mark style="color:yellow;">server/unlocked/developer/commands.lua</mark>
* <mark style="color:yellow;">server/unlocked/vehicleactions.lua</mark>
* <mark style="color:yellow;">shared/unlocked/config.lua</mark>
* <mark style="color:yellow;">shared/unlocked/types.lua</mark>
* <mark style="color:yellow;">nui/\*</mark>
* <mark style="color:yellow;">external\_support/safe\_dv/server.lua</mark>
* <mark style="color:yellow;">locales/\*</mark>
* <mark style="color:yellow;">modules/persistent\_vehicles/server/constructor.lua</mark>
* <mark style="color:yellow;">modules/persistent\_vehicles/server/functions.lua</mark>
* <mark style="color:yellow;">fxmanifest.lua</mark>

</details>

<details>

<summary>Changelog - Version 1.1.4</summary>

**Changes**

* Provides more informative error message when attempting to initialize vehicle access from a database fetch, but the vehicle is missing required values. Usually the result of an incorrectly configured vehicle dealer or old vehicles that have not yet been initialized.

**Files Affected**

* server/locked/initialize.lua
* fxmanifest.lua

</details>

<details>

<summary>Changelog - Version 1.1.3</summary>

**Changes**

* Function to handle initialization of spawned vehicles, available as export for 3rd party scripts.
* Stops attempting to find and modify a vehicle that can not be found in a reasonable timeframe.
* Overhaul to key stealing, including various settings and a minigame option.

**Files Affected**

* client/unlocked/eventhandler.lua
* client/unlocked/small\_resources/lockpicking.lua
* client/unlocked/small\_resources/stealkeys.lua
* client/unlocked/menus/vehicleactions.lua
* server/unlocked/functions.lua
* server/unlocked/persistent\_vehicles/functions.lua
* server/locked/vehicleactions.lua
* locales/en.lua
  * Added `searchingKeys`
  * Added `failedToFindKeys`
* shared/unlocked/config.lua
  * Modified `Config.Settings.keys`
  * Added `Config.Settings.tempKeys`
* fxmanifest.lua

</details>

<details>

<summary>Changelog - Version 1.1.2</summary>

**Changes**

* Added a client-sided export to remove persistent vehicles.
* Better error handling for removing persistent vehicles.

**Files Affected**

* client/unlocked/persistent\_vehicles/functions.lua
* server/unlocked/persistent\_vehicles/functions.lua
* server/unlocked/persistent\_vehicles/eventhandler.lua
* locales/en.lua
  * Added `vinNotFound`.
* fxmanifest.lua

</details>

<details>

<summary>Changelog - Version 1.1.1</summary>

**Changes**

* Fixed issue where the QBCore version could not check if the rank was considered boss.
* Removed unused argument for inventory update event.
* Extra check to see if metadata exist for keys in case it was obtained incorrectly or has missing data. Only prints a debug now.

**Files Affected**

* client/locked/functions.lua
* client/unlocked/main.lua
* server/unlocked/functions.lua
* fxmanifest.lua

</details>

<details>

<summary>Changelog - Version 1.1.0</summary>

[**Video Showcase**](https://youtu.be/3k_qIH9rETM?si=Iyexk_NZ7kWBqPD5)

**Changes**

* New vehicle actions menu.
  * Hold keybind to open menu, press keybind to open keyfob for the closest vehicle you have access to.
* Keyfob UI.
* Keybind to lock closest vehicle.
* Optionally keys as items.
  * Your items decide your access to vehicles.
  * Change frequency and void older keys, ensuring the right people have access to your vehicles.
* Persistent vehicles.
  * Leaving area / relogging does not despawn the vehicle.
  * Server-restart proof, will respawn vehicles that are removed.
  * Temporary vehicles are consistent.
  * Removed previous "on restart" actions, now part of cleanup parameters.
  * Adding cleanup parameters and execution.
  * Better vehicle actions syncing, no need for exports to be placed everywhere, as other resources can now override the vehicle's state.
* New impound UI design.
* New finance UI design
* Updated the performance modifications UI design.
* Expanded the exports and events section.
* Configuration to require being inside of an impound zone to impound vehicles.
* Minor performance optimizations.

**Files Affected**

Replace all your files.

**Database Updates v1.0.1 -> v1.1.0**

Run the queries for your framework below, in order.

**ESX**

```sql
DROP TABLE zyke_garages_restart_actions
```

```sql
ALTER TABLE owned_vehicles
ADD COLUMN keyFreq MEDIUMINT;
```

* Run zyke\_cleanup\_settings.sql.

***

**QBCore**

```sql
DROP TABLE zyke_garages_restart_actions
```

```sql
ALTER TABLE player_vehicles
ADD COLUMN keyFreq MEDIUMINT;
```

* Run zyke\_cleanup\_settings.sql.

***

*If starting fresh, simply run the new standard databases as usual.*

</details>

<details>

<summary>Changelog - Version 1.0.1</summary>

**Changes**

* Further exploitation proofing.
* Additional event to set vehicle ownership after car dealer purchase.
* GiveTempKeys export also accepts plate, and finds vehicle by matching it.
* New OpenImpounderMenu export found [here](https://docs.zykeresources.com/paid-resources/garages/exports-and-events#open-impounder-menu).

**Files affected**

* server/unlocked/eventhandler.lua
  * Additional executor protection for setting new owner.
* server/unlocked/functions.lua
  * Additional executor protection for setting new owner.
* client/unlocked/menus/impound.lua
  * Created export to open impounder menu.
* client/unlocked/functions.lua
  * GiveTempKeys accepting plate.
  * Added zyke\_garages:HandleVehiclePurchaseWithPlate event.

</details>

<details>

<summary>Changelog - Version 1.0.0</summary>

Official release for ESX and QBCore.

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zykeresources.com/paid-resources/garages/changelog.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
