[Release] MSK Garage & Impound - In-Game Admin Dashboard (no config editing) [ESX, QBCore, Qbox] | v5.6.0

Tebex [19.99€ incl. VAT] - Encrypted
Tebex [39.99€ incl. VAT] - Source Code

MSK Garage - Documentation


MSK Garage is a garage and impound system for ESX Legacy, built on top of msk_core. It handles cars, boats and aircraft, gives players an impound to get their lost vehicles back, and lets you share job vehicles across a whole society. Everything is validated on the server, and the UI is React-based and runs completely offline.

The big change in v5.0.0: you barely touch the config files anymore. Garages, impounds and all the settings now live in the database, and you manage them from an in-game admin panel. So no more editing Lua and restarting the server every time you want to move a garage or tweak a fee.


:star2: The new in-game admin dashboard

Type /garageadmin in-game and you get a full panel to manage the whole script. On the first start your existing config is imported into the database once, and from then on the dashboard is where you do everything. Changes apply live, no restart needed.

What you can do in there:

  • Create, edit and delete garages and impounds. Coordinates are grabbed with a “use my current position” button, so you don’t have to copy them from anywhere. You can add as many entrances and park-out spots as you want.
  • Set up a proper permission system. There are separate rights for viewing, creating, editing and deleting garages and impounds, plus rights for the settings and the permissions themselves. group.admin always has full access and can’t be locked out, and group.user can never open the panel. It works with your server.cfg ACE groups as well as your framework groups (for example an ESX admin group from the database).
  • Restrict a garage to a job and pick the exact ranks that are allowed, not just a minimum grade. You choose the job from a dropdown of every job on your server and tick the ranks you want.
  • Change every setting from the UI: language, parking mode, the default garages per category (land / sea / air), the target and vehicle-key script, the command name itself, and more.
Screenshot: Admin Dashboard





:sparkles: What it does

A quick note first: you can drop your own vehicle-key adapter into /server/keys/, but I only give support for the scripts listed under Optional further down.

The basics:

  • As many garages and impounds as you like, each with its own ped, blip, 3D text, marker and park-out spots.
  • Proper vehicle categories (car, truck, bike, boat, submarine, helicopter, aircraft, trailer, train) so a boat doesn’t show up in a car garage.
  • Job and society garages. Vehicles can belong to the individual player or to the whole society, and access can be limited to specific ranks.
  • An impound for vehicles that got lost after a crash, a death or a restart. Players pay a fee you set, and there’s a track button that puts a waypoint on the car.
  • Key holders can park in and out too, not just the owner. Works with msk_vehiclekeys, VehicleKeyChain and vehicles_keys.
  • Vehicle condition is kept. Engine, body and tank health, dirt and even the visual dents come back on park-out (dents need the optional VehicleDeformation resource).
  • Players can favourite their vehicles and rename them.
Screenshot: Garage & Impound


About the UI:

The interface is written in React + Vite + TypeScript in the MSK dark/green style. It’s fully offline, so all fonts and icons ship with the script. There are no Google Fonts, no FontAwesome CDN and no outside requests at runtime. You get live search, a type filter, fuel bars and vehicle-class icons, and it comes in 7 languages out of the box: EN, DE, HU, FR, ES, PT and PL.

On the security side:

Everything important runs through the server. Park-in, park-out and every action in the admin panel are checked server-side, so a modified client can’t inject a garage, a plate, a fee or a permission. There are per-plate spawn locks and a claim/rollback flow to stop duplicates even when someone’s connection hiccups, custom garages from other resources have to be registered server-side so their coordinates and fees can’t be faked, and if an impound payment goes through but the spawn fails for any reason, the fee is refunded automatically.

A few things you can configure:

  • Let players park out anywhere, or only at the garage where the vehicle was stored.
  • Use your own fuel script. The default reads the state bag, and if msk_fuel is running it’s picked up automatically and shows the real tank volume (like 50 / 65 L).
  • Use the built-in TextUI, plug in your own (okokTextUI for example), or switch to ox_target. The target script is a dropdown in the dashboard.
  • AdvancedParking is supported and detected automatically, there’s no flag to toggle.
  • Custom plates, configurable blips, and client/server exports plus park-in/park-out events if you want to hook into it from another resource.

:clipboard: Requirements

Code is accessible Yes - separate Source Code tier (Escrow otherwise)
Subscription-based No
Lines (approximately) ~ 3000
Requirements ESX Legacy, QBCore, Qbox, oxmysql, msk_core
Support Yes

My other Scripts

Paid

Free

9 Likes

Love it :heart_eyes:

3 Likes

Update v2.2

  • Some little Bugfixes
  • Fixed Bug with Fuel and added more fuel scripts to config.lua
  • Added compatibility for Jaksam Vehicle Keys
  • You can add your own Vehicle Key Script to server_vehiclekeys.lua
1 Like

A super garage, ideal for roleplay servers who want to have simplicity but also quality! :slight_smile:
the support is also very good.

2 Likes

Update v3.0

Changed files: all files including config.lua

  • New UI Design with new Features!
  • Added Favorite Vehicles
  • Added Rename Vehicle Name
  • Added Config.needEnoughMoney for Impound
  • Added new Translations
  • Updated Callbacks for msk_core

In config.lua just add the following and the edits in this file are done. If you updating from a lower version than v2.2 you have to replace the config completely.

Config.needEnoughMoney = true -- Set false if player should be able to parkout a vehicle from impound if not enough money


1 Like

Update v3.0.1

  • Added missing images
  • Added Support for visn_are (isPlayerDead)
  • Fixed lagging ui and server thread hitch warning
  • Fixed Jaksam vehicle_keys

To date a good garage system, bugs are fixed quickly, wishes are taken into account.
top

1 Like

Update v3.2.2

  • Some Bugfixes
  • Changed folder structure
  • Added compatibility for MSK VehicleKeys

Major Update v4.0.0

Updated Tebex and documentation Links

[4.0.2] - Impound Fixes

Fixed

  • Impound listed no vehicles. Config.Impounds entries were missing an
    impoundId field, so the server-side lookup (Validation.GetImpound) always
    resolved to nil and returned an empty list. Each impound now carries its
    config key as impoundId (mirroring how garages carry id).
  • Impounded vehicle was not removed on park-out (AdvancedParking). Taking a
    car out of the impound spawned a fresh copy while the old one remained on the
    map. AdvancedParking persists vehicles in its own table and respawns them, so a
    plain DeleteEntity had no lasting effect. The old copy is now purged from
    AdvancedParking via DeleteVehicleUsingData(..., keepInWorld = false) (raw DB
    plate) in addition to the server-authoritative GetAllVehicles sweep — no
    client broadcast, so there is no performance cost or multi-client delete race.

Changed

  • Simplified impound park-out: impoundId is now read directly from the impound
    definition instead of being resolved via a table-comparison loop.
1 Like

v5.0.0

New: In-game Admin Dashboard (/garageadmin)

  • Create, edit & delete garages and impounds live, no restart — coords via “use my position”
  • Everything now lives in the database (seeded once from your config; config = default template only)
  • Permission system: per-right access (view/create/edit/delete + settings + permissions); group.admin always full, group.user never; uses your server.cfg ACE and framework groups (e.g. ESX group)
  • Per-rank job garages: pick the job + tick the exact ranks allowed
  • All settings in-UI: language, parking, default garages per category (land/sea/air), target & vehicle-key script (dropdowns), command name
  • Search + vehicle-type filter in the lists

Other

  • Default garages per category; a default can’t be deleted until replaced (vehicles reassigned automatically)
  • AdvancedParking auto-detected (removed Config.AdvancedParking)
  • Config split: config/settings.lua (dashboard) vs config/static.lua (code hooks)
  • 5 more languages: HU, FR, ES, PT, PL (+ EN/DE)

Fixes

  • “failed to load ped model” / NPC missing after teleport
  • Dashboard access for DB-defined admins (e.g. ESX group), not only ACE
  • Dashboard freeze when adding/deleting a group or entry