Molo Modding — FiveM Resources

MOLO AUTOPARK V2

Automatic multi-floor parking system with physical lift, cyberpunk NUI, SQL persistence, and full framework support.

SQL EDITION ESX / QBCORE / STANDALONE v2.1.0
01

OVERVIEW

Molo AutoPark V2 is a fully-featured automatic parking system for FiveM. Players can place multi-floor parking structures anywhere on the map using a precision placement system. Vehicles are physically lifted by an animated hydraulic lift, moved to the correct floor and column, and stored in an SQL database.

The system is fully public: any player can use any garage. Vehicles are tied to each player's identity, so only the owner can retrieve their own car. Framework integration ensures that parked vehicles are correctly marked as stored in your existing garage system.

On server restart, all garages and vehicles are automatically restored from the database — structures respawn, vehicles appear in their slots, and everything is exactly as it was.

Physical Lift

Animated 4-step hydraulic path: rise, slide, push. Real lift sounds via Web Audio.

🗃

SQL Persistence

Full oxmysql integration. Two tables, auto-created. Survives restarts.

🎨

Cyberpunk NUI

Dark terminal with scanlines, glow effects, custom cursor, and animated slots.

02

FEATURES

▲ Parking System

Two variants — Large (14 slots, 3 floors: 4+5+5) and Small (5 slots, 2 floors: 2+3)
Full vehicle props — Colors, mods, livery, neon, plate, engine, body health all saved & restored
Physical animated lift — 4-step path with hydraulic tick sounds and arrival ping
Real-time NUI — Slot availability, activity log, floor tabs with counters
500m LOD distance — Garages and vehicles visible from far away

💾 Database & Sync

SQL persistence via oxmysql — no JSON files, no data loss
owned_vehicles sync — ESX: stored=1/0 • QBCore: state=1/0, garage='autopark'
Auto table creation on first startup — no manual SQL import needed
Cascade delete — removing a garage auto-cleans all vehicle entries

🌐 Framework & Language

Auto-detect ESX, QBCore, or Standalone — zero config needed
Native framework props — uses ESX.Game or QBCore.Functions when available
3 languages included: English, French, Spanish — single-line switch
03

REQUIREMENTS

DependencyStatusDetails
FiveM ServerREQUIREDLatest recommended build
oxmysqlREQUIREDMust start before molo-autopark
MySQL / MariaDBREQUIREDXAMPP, dedicated, or any MySQL server
ox_targetOPTIONALEnables 3D interact points on garage terminal
ESX or QBCoreOPTIONALAuto-detected. Works standalone without any framework
04

INSTALLATION

Extract the molo-autopark folder into your server's resources directory.
Database: Tables are created automatically on first start. Optionally import autopark.sql via phpMyAdmin.
server.cfg — Add the following lines (oxmysql must start first):
ensure oxmysql
ensure molo-autopark
Verify — Start the server and check the console output:
[AUTOPARK] Framework detected: ESX
[AUTOPARK] Database tables ready.
[AUTOPARK] Loaded 0 garages from database.
If you see these messages, the installation is complete. Use /applace in-game to place your first garage.
05

CONFIGURATION

All settings are in config.lua:

SettingDefaultDescription
Config.Framework'auto'Framework mode: 'auto', 'esx', 'qb', or 'standalone'
Config.Language'en'Language: 'en', 'fr', or 'es'
Config.MaxGaragesPerPlayer3Maximum garages a player can place
Config.DebugtrueEnable debug prints. Set false in production
Advanced settings for placement speed, rotation, and slot coordinates are available in config.lua. Slot coordinates should not be modified unless you understand the lift path system.
06

PAYMENT SYSTEM

Molo AutoPark V2 includes a fully integrated in-game payment system. Charge players for parking, retrieving, and placing garages using your framework's economy. All prices are configurable in config.lua.

💰 Configuration

SettingDefaultDescription
Config.Payment.EnabledtrueEnable or disable the entire payment system. When false, all actions are free
Config.Payment.ParkPrice100Amount charged to park a vehicle in a slot
Config.Payment.RetrievePrice50Amount charged to retrieve a vehicle from the garage
Config.Payment.PlacePrice5000Amount charged to place a new garage structure (/applace)
Config.Payment.MovePrice1000Amount charged to move an existing garage (/apmove)
Config.Payment.Account'bank'Payment source: 'bank', 'cash', or 'money' (framework-dependent)

📝 Example config.lua

-- Payment System
Config.Payment = {
    Enabled       = true,          -- false = all free
    ParkPrice     = 100,           -- $ to park
    RetrievePrice = 50,            -- $ to retrieve
    PlacePrice    = 5000,          -- $ to place a garage
    MovePrice     = 1000,          -- $ to move a garage
    Account       = 'bank',         -- 'bank' or 'cash'
}

🌐 Framework Integration

Payments are automatically handled by the detected framework. The system uses the correct money functions for each framework:

FrameworkDebit FunctionBalance CheckAccounts
ESXxPlayer.removeMoney()xPlayer.getMoney()money, bank
QBCorePlayer.Functions.RemoveMoney()Player.Functions.GetMoney()cash, bank
StandalonePayment disabled — no economy system available

⚡ How It Works

Balance check — Before any action, the server verifies the player has enough funds in the configured account
Server-side only — All money operations happen server-side to prevent exploitation. No client-side economy calls
Notification — Players receive a notification with the amount debited and the action performed
Insufficient funds — If the player cannot afford the action, a red notification appears and the action is blocked
Free mode — Set Config.Payment.Enabled = false to disable all charges instantly
Setting any individual price to 0 makes that specific action free while keeping other prices active. For example, RetrievePrice = 0 means players pay to park but retrieve for free.
In Standalone mode (no framework), the payment system is automatically disabled regardless of Config.Payment.Enabled. A console warning will be printed at startup.
07

COMMANDS & USAGE

CommandDescription
/applaceOpen variant selection, then enter placement mode to position a new garage
/apmove [id]Move an existing garage (keeps all stored vehicles)
/apdelete [id]Delete a garage. Vehicles are released back to their owners
/apstatusDEBUG Show garage count, vehicles, and framework in console

Parking a Vehicle

Drive your vehicle onto the lift platform at the base of the garage
Interact with the terminal screen (ox_target or proximity)
The NUI terminal opens showing all floors and available slots
Click any free slot (dashed border) to park your vehicle
The lift animates: rises → slides → pushes into the slot
Vehicle is stored in database and visible to all players

Retrieving a Vehicle

Interact with the terminal (no vehicle needed on lift)
Find your vehicle in the grid (highlighted in cyan)
Click your vehicle — the lift retrieves and brings it down
Vehicle spawns on the lift with all properties restored
08

The terminal is a full-screen cyberpunk interface with a custom crosshair cursor, animated scanlines, and procedural hydraulic sounds.

Interface Elements

ElementDescription
HeaderAUTOPARK title, lift status, CLEAR button (owner only), close button
Vehicle BarVehicle on lift (name + plate) or "No vehicle on lift"
Floor TabsSwitch floors. Shows occupied/total count per floor
Parking MapVisual grid of all slots on the selected floor
Activity LogRecent park/retrieve events with timestamps

Slot Colors

⬚ FREE SLOT
● YOUR VEHICLE
● OTHER PLAYER
⬚ NO VEHICLE ON LIFT

CLEAR Button

Only visible to the garage owner. Removes ALL vehicles from the garage and releases them back to their owners' framework garages (stored = 0). The structure remains in place.

CLEAR does not delete vehicles from owned_vehicles. It only sets stored = 0, making them available again in the player's normal garage.
09

SQL DATABASE

Two tables, created automatically on startup:

autopark_garages

ColumnTypeDescription
idINT AUTO_INCREMENTUnique garage ID
ownerVARCHAR(128)Player identifier (ESX/QB/license)
x, y, zFLOATWorld coordinates
headingFLOATRotation angle
variantVARCHAR(32)'large' (14 slots) or 'small' (5 slots)

autopark_vehicles

ColumnTypeDescription
idINT AUTO_INCREMENTUnique vehicle entry ID
garage_idINT (FK)References autopark_garages.id — CASCADE on delete
ownerVARCHAR(128)Player who parked the vehicle
plateVARCHAR(32)Vehicle plate (for owned_vehicles sync)
modelVARCHAR(64)Vehicle model hash
propsLONGTEXTFull vehicle properties as JSON
floor, colINTSlot position in the garage

owned_vehicles Sync

🔒
The autopark NEVER deletes or creates rows in your framework's vehicle table. It only updates the stored flag.
ActionESX (owned_vehicles)QBCore (player_vehicles)
ParkSET stored = 1SET state = 1, garage = 'autopark'
RetrieveSET stored = 0SET state = 0
Clear / DeleteSET stored = 0 (all vehicles)SET state = 0 (all vehicles)
10

FRAMEWORK COMPATIBILITY

Auto-detected at startup. No configuration needed.

FrameworkIdentifierVehicle PropsSync Table
ESXxPlayer.identifierESX.Game functionsowned_vehicles
QBCorecitizenidQBCore.Functionsplayer_vehicles
Standalonelicense:xxxxBuilt-in (GTA natives)None

To force a framework, set Config.Framework = 'esx' or 'qb' in config.lua.

11

MULTI-LANGUAGE

-- config.lua
Config.Language = 'en' -- English (default)
Config.Language = 'fr' -- French
Config.Language = 'es' -- Spanish

40+ text keys translated: notifications, NUI terminal, placement UI, variant selection, floor names, activity log. Adding a new language: copy the English block in Config.Locales and translate each key.

12

TROUBLESHOOTING

ProblemSolution
"CARNOTFOUND" in terminalFixed in V2.1 — model hash string/number bug resolved
Vehicles disappear on restartEnsure oxmysql starts before molo-autopark in server.cfg
NUI crashes when openingFixed in V2.1 — all handlers have try/catch protection
"Modele invalide" in consoleFixed in V2.1 — SQL model hash now properly converted
Vehicle stuck on liftUse /apstatus to check, then /apdelete [id] to reset
CLEAR button not visibleOnly the garage owner can see the CLEAR button
Framework not detectedCheck es_extended / qb-core starts before this resource
Tables not createdCheck oxmysql connection string and ensure MySQL is running
13

SUPPORT

💬

Discord

Join 10,000+ members for help, updates, and feature requests.

🛒

Tebex Store

molo-modding.tebex.io — Silver & Gold subscription tiers.

Updates

All updates included with your subscription. Changelog in Discord.