F.A.Q
Setup
No. Persistence runs on its own. A garage is only used to decide when a vehicle should leave the world, and with the default Config.RespawnOnExternalDelete = false any garage that deletes the vehicle on store is handled on its own.
Yes. World-vehicle claiming works on any framework. Database-owned vehicle detection needs a framework with a player_vehicles or owned_vehicles table; on standalone, enable Config.WorldVehicles and use the OpenServer.CanPersist hook for custom ownership.
World Vehicles
With Config.WorldVehicles.enabled = true, the first eligible driver can claim an unowned vehicle. Claiming still checks the type, blacklists, exclusions, the CanClaim hook and the parking limit.
Call the export from the spawning resource:
1exports.ml_vehicle_persistence:DoNotSave(plateOrNetId, 'mission')Yes, if it is eligible and not already owned or tracked. Call exports.ml_vehicle_persistence:DoNotSave(plateOrNetId, reason) from the spawning resource to exclude staff, mission, rental or temporary vehicles.
By default yes. Set Config.WorldVehicles.countTowardLimit = false to exempt them.
Persistence
The vehicle stays in the world with its owner attached and respawns after a restart.
Yes. Full vehicle properties, fuel level and body and engine health are stored and reapplied when a player streams the vehicle in.
It leaves persistence by default. Set Config.PersistDestroyed = true and the wreck comes back as a wreck, with burnt body, dead engine and burst tyres, on respawn and after a restart.
Config.MaxVehiclesPerPlayer caps how many parked vehicles count toward an owner. Once full, a new vehicle is not saved and existing saved vehicles remain. Set it to 0 for no limit.
Saved records use server memory and database storage. Vehicle entities spawn only near players within Config.SpawnDistance and despawn when nobody is nearby. The script sets no maximum record count; server memory, database and nearby entity load still matter.
The default Config.RespawnOnExternalDelete = false drops an externally deleted vehicle from persistence. If it comes back, check whether this value is true. With true, route intentional deletes through deletehook.lua or the PurgeVehicle export.
No. A vehicle moved without a driver is detected on the next world scan and its saved position is updated. A tow that deletes and respawns the entity instead counts as a removal.
Decay and Orphans
When saved records are restored after a restart, Config.Decay applies body and engine loss based on time since the last save and the grace period. It does not tick continuously during server uptime. Protected vehicles and vehicles linked to an active protected base skip decay.
With Config.OrphanedVehicles.action = 'delete', claimed World Vehicles are deleted after the owner absence threshold. With 'impound' they stay in persistence. Database-owned vehicles use OpenServer.ImpoundVehicle for the impound action; its default implementation supports Qbox/QBCore.
GPS
It lists the owner's persisted vehicles with their distance and sets a waypoint on the one picked. Vehicles currently in a garage are listed too, marked as stored instead of a waypoint.
A thief uses the gps_scanner item and sweeps around a vehicle. The beep gets faster the closer the GPS is, and bystanders hear it too. Holding the scan next to the vehicle rips the GPS out, and the owner's GPS then freezes on the last known position with a tampered badge.
Only the vehicle's owner can install a gps_module on the recovered vehicle, which consumes the item and restores live tracking. Until then the position stays frozen.
Yes. Set Config.GpsScanner.enabled = false and leave Config.GpsItem set.
Admin
Run /vpadmin in chat, or open it from the shared admin hub. The command is set in Config.Admin.command.
Any ml_bridge admin. Config.AdminAcePermission adds an ACE that also grants access.
Yes. Settings shown in the panel are stored as overrides of shared/config.lua values and survive restarts. Reset clears all panel overrides and restores the config file defaults.
It reports orphaned locks, grants and trackers, mechanic records without a matching vehicle, plate format mismatches and links to missing bases. It reports findings; it does not repair records.
The Integrations page reports available optional providers. When the matching resource is running, its provider can add vehicle data and actions to inspection. Custom providers can be added under open/integrations/.
/vpclear <radius> removes persisted vehicles within that many meters of your ped. /vpclear with no argument wipes every persisted vehicle.
Updates
- Download latest from CFX Portal
- Backup config files
- Replace all files except config
- Restart the resource
New database columns are added automatically on boot. No manual migration is needed.