Vehicle Scripts
ds-advancedgarage


standaloneRequirements
- QBCore / Qbox / ESX
- OneSync Infinity
- Server v7290 or newer
- oxmysql

Overview
# DS Advanced Garage 2.0 Huge Update!!!
A full-featured garage resource for FiveM: store and retrieve vehicles at configurable locations, impound, private and house garages, vehicle transfer, optional **walk-in interiors (showroom)**, **parking meters**, and support for **QB-Core**, **Qbox**, **ESX**, and **standalone**. Current resource version: **2.0** (see [CHANGELOG.md](CHANGELOG.md) for release notes).
## Features
- **Multiple frameworks** — QB-Core, Qbox, ESX, or standalone (auto-detect)
- **Garage locations** — Public, job, gang, impound; NPC or marker interaction (E key, ox_target, or qb-target)
- **Impound** — Police can impound vehicles; owners pay a fee at impound lots to release
- **Private garages** — Owner-only garages (e.g. real estate); optional interiors and **billing** (buyer accept/deny offers)
- **House garages** — Preset/buyable house garage slots, maker command for coords export, owner tracking (framework SQL)
- **Walk-in garage interiors** — Showroom-style interiors from the garage UI; optional **music playlist**, **stash** (many inventories), **paid stash upgrades**, **player invites**, floating NUI labels over vehicles
- **Parking meters** — Paid timed parking at configured props (`ParkingConfig` in `shared/parkingconfig.lua`)
- **Job vehicle spawner** — Helper for job fleet workflows (see config / locations)
- **Vehicle transfer** — Move stored vehicles between garages (optional fee)
- **Shared garages** — Take any stored vehicle from any garage, or restrict by storage location
- **Integrations** — Fuel, keys, banking, gangs; notifications: default framework, builtin toasts, **ds-notifications**, ox_lib, okokNotify, ps-ui
- **Locales** — en, de, es, fr, it, pt, nl, pl, ru, tr
## Dependencies
- **ox_lib** (required — `shared_scripts` includes `@ox_lib/init.lua`)
- **oxmysql** (required, server)
- **PolyZone** (required, client) — garage zones
Your framework (QB-Core, Qbox, or ESX) and optional integrations (fuel, keys, banking, **inventory for interior stash**) as configured in `shared/config.lua`.
## Installation
1. **Dependencies**
Ensure **ox_lib**, **oxmysql**, and **PolyZone** are installed and start **before** this resource.
2. **Database — framework base**
Run the SQL for your stack under `sql//`:
- **QB-Core:** `sql/qb/player_vehicles.sql` (plus impound extras in that folder if you use impound)
- **Qbox:** `sql/qbox/player_vehicles.sql` (and impound extras if needed)
- **ESX:** `sql/esx/owned_vehicles.sql`, `sql/esx/dsag_impounds.sql`, and other files in `sql/esx/` as needed
3. **Database — DS Advanced Garage tables**
- **Private garages:** `sql/qb/dsag_private_garages.sql`, `sql/qbox/dsag_private_garages.sql`, or `sql/esx/dsag_private_garages.sql` (pick one matching your framework).
- **House garage owners** (buyable/preset house garages): `sql/qb/dsag_house_garage_owners.sql`, `sql/qbox/dsag_house_garage_owners.sql`, or `sql/esx/dsag_house_garage_owners.sql`.
4. **Database — migrations (`sql/migrations/`)**
Run only what you enable; typical files:
- `dsag_private_garages_add_interior_key.sql` / `dsag_private_garages_add_interior_props.sql` — private garage showroom columns
- `dsag_interior_stash.sql` — interior stash upgrades
- `dsag_showroom_music_playlist.sql` — showroom music persistence
- `dsag_vehicle_nicknames.sql` — optional vehicle nicknames
- `dsag_house_garage_allowed.sql` — house garage allow-list support
5. **Configure**
Edit **`shared/config.lua`**, **`shared/parkingconfig.lua`**, **`shared/locations/locations_config.lua`**, and **`shared/locations/garagespropsconfig.lua`** (interior props) for your server.
6. **Start**
Add `ensure ds-advancedgarage` (or your folder name) after dependencies and your framework.
Upgrading from an older bundle: see **[CHANGELOG.md](CHANGELOG.md)** (section for 2.0).
## Configuration overview
### Main config (`shared/config.lua`)
| Option | Description |
|--------|-------------|
| `Config.Framework` | `'auto'`, `'qbcore'`, `'qbox'`, `'esx'`, or `'standalone'` |
| `Config.Locale` | Language code (see Features list) |
| `Config.Notifications` | `'default'`, `'builtin'`, `'ds-notifications'` , `'okokNotify'`, `'ox_lib'`, `'ps-ui'` |
| `Config.BuiltinNotify.duration` | Toast time in ms when using `builtin` |
| `Config.FuelSystem` | Your fuel script or `'none'` |
| `Config.VehicleKeys` | Keys script or `'none'` |
| `Config.Banking` | Banking resource for fees / impound |
| `Config.Garagesresources` | Alias name (e.g. `'qb-garages'`) so other scripts call this resource |
| `Config.SaveVehiclePropsOnInsert` | First sync can write mods when DB row has empty mods |
| `Config.CheckVehicleModel` | Extra check that spawned model matches stored vehicle |
### Garage NPC (`Config.GarageNPC`)
- **enabled** — Uses spots in `shared/locations/locations_config.lua`
- **useNPC** — Ped vs marker-only
- **interaction** — `'e'`, `'ox_target'`, `'qb-target'`, `'auto'`
- **distance**, **key**, **marker** — Interaction range and marker look; marker **drawDistance** also clamps private interior decorator range
### Garages and locations
- **`shared/locations/locations_config.lua`** — Location coords + garage keys; **`Config.Garages`** for spawn points, blips, type, categories.
- Each location references a key defined in `Config.Garages` (e.g. `legionsquare`, `impounda`).
### Walk-in interiors / showroom
- **`Config.GarageEnableInteriors`**, **`Config.GarageInteriorAccess`** — `'both'` | `'nui'` | `'command'` | `'none'` (command default documented in config).
- **`Config.GarageInteriorShowroomVehicleUi`** — Floating labels near vehicles in showroom.
- **`Config.GarageInteriorStash`** — Stash in showroom; set **inventory** or `'auto'` and run **`sql/migrations/dsag_interior_stash.sql`** if you use upgrades.
- **`Config.GarageInteriorUpgrades`** — Paid stash tiers / rename (NUI).
- **`Config.GarageInteriorInvite`** — Invite another player into your session showroom.
- Interior definitions live in config / `shared/locations` as documented next to **`Config.GarageInteriors`** in `shared/config.lua`.
### Parking meters (`shared/parkingconfig.lua`)
- **`ParkingConfig.Enabled`** — Toggle system.
- **Prices, account type, timer**, prop hashes, and optional override keys for 1h / 10h actions.
### Impound
- **`Config.UseImpound`**, **`Config.Impound`** — Jobs, impound garage keys, fees.
- Run the impound-related SQL for your framework from `sql//`.
### Private garages
- **`Config.PrivGarageCreateCommand`**, **`Config.PrivGarageCreateJobRestriction`**, **`Config.PrivGarageBlip`**
- **`Config.PrivGarageEnableInteriors`**, **`Config.PrivGarageBilling`** — Interiors and paid offers to buyers
- Framework file: **`sql//dsag_private_garages.sql`** plus migrations if you use interiors.
### House garages
- **`Config.HouseGarageCreateCommand`** / **`Config.HouseGarageCreateJobRestriction`** — Maker command (exports snippet for your houses config).
- **`Config.HouseGaragePurchase`** — Buyable house garage flow; requires owner SQL for your framework.
- Data helper: **`housegaragesdata/housegarages.txt`** (see config comments).
### Other options
- **Config.AutoRespawn**, **Config.VisuallyDamageCars**, **Config.SharedGarages**, **Config.ClassSystem**, **Config.Warp**, **Config.AllowSpawnWhenOccupied**
- **Config.TransferToGarageFee**, **Config.ShowVehiclesOutCount**, **Config.ShowWaypointToNearestGarage**
- **Config.ShowWatermark** / **Config.ShowBrand** — UI toggles
- **Admin-style commands** (ACE `dsag.admin` or `group.admin`): names in config for job/gang garage vehicles, plate change, DB delete, vehicle return (see `shared/config.lua`)
## Commands / usage
- **Garage** — Interact at a garage NPC or marker (or target) to open the UI; store the current vehicle or retrieve a stored one.
- **Transfer** — From the garage UI, transfer a vehicle to another garage (fee from config).
- **Impound** — Jobs in **`Config.Impound.jobs`** use the impound command (e.g. `/impound`) at a vehicle; owner pays at the configured impound garage.
- **Private garage** — Command from **`Config.PrivGarageCreateCommand`** (e.g. `/privategarage`) if your job is allowed; manage access from the UI.
- **House garage maker** — Command from **`Config.HouseGarageCreateCommand`** (e.g. `/createhousegarage`) for authorized jobs; paste exported data into your house garage config and restart as documented in config.
- **Showroom / interior** — Access mode from **`Config.GarageInteriorAccess`** (NUI button and/or command such as `/garageinterior` when enabled in config).


