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 any garage that deletes the vehicle on store is handled automatically.
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 player to sit in the driver seat of any unowned vehicle becomes its permanent owner and the vehicle starts persisting.
Call the export from the spawning resource:
1exports.ml_vehicle_persistence:DoNotSave(plateOrNetId, 'mission')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 an owner keeps. When the limit is hit, the oldest parked vehicle stops being persistent. Set it to 0 for no limit.
Saved vehicles live in memory and are only spawned into the world when a player is within Config.SpawnDistance, then despawned once everyone leaves. Only the vehicles near players exist as entities, so hundreds of saved records cost nothing in the world.
Config.RespawnOnExternalDelete is true, which treats every external delete as an accident. Set it to false for the expected behavior, or route the deleting resource 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.
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. Set Config.AdminAcePermission to a dedicated ACE node to restrict it to a sub-team.
Yes. Settings changed in the panel are stored as overrides on top of shared/config.lua. Use the panel's reset button to drop an override and go back to the config file value.
/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.