Vehículos Persistentes Lite
Vehículos · Lite

LV Persistent Vehicles Lite

Sistema completo de vehículos persistentes para FiveM: tus coches permanecen en el mundo, guardan estado en MySQL, incluyen concesionario cinematográfico, garajes configurables y sistema de llaves propio.

ESX QBCore Standalone oxmysql OneSync

Introducción

LV Persistent Vehicles Lite es el recurso oficial de LV Scripts para servidores que necesitan persistencia real de vehículos sin depender de scripts externos pesados. Cada vehículo comprado o spawnado queda registrado en base de datos con posición, daños, combustible, colores y estado de bloqueo.

A diferencia de soluciones básicas, este script no elimina vehículos abandonados, restaura el mundo tras reinicios del servidor o del recurso, y optimiza el rendimiento con streaming por distancia compatible con OneSync.

Recurso: lv-persistent-vehicles-lite · Producto tienda: lv-persistent-vehicles-lite · Autenticación: licencia por IP + clave

Características

💾 Persistencia MySQL

Posición, rotación, colores, daños, combustible, bloqueo y propiedades JSON en lv_pv_vehicles.

🏪 Concesionario

Showroom privado con routing buckets, personalización visual, test drive y compra con cuenta banco/efectivo.

🅿️ Garajes

Múltiples garajes públicos configurables en config/garages.lua. Guardar y sacar vehículos con zona E.

🔑 Sistema de llaves

Bloqueo con tecla U, animación, luces y sonido. Compartir o revocar llaves entre jugadores.

📡 Streaming OneSync

Spawn/despawn por radio configurable. Los datos permanecen en BD aunque la entidad no esté activa.

⚡ Guardado inteligente

Solo escribe en BD cuando hay cambios reales (flags dirty). Menos carga en MySQL.

Requisitos

ComponenteObligatorioNotas
FiveM + OneSyncRecomendado Infinity o Legacy con distancia ampliada
oxmysqlConexión MySQL configurada en server.cfg
ox_libNoMejora notificaciones en cliente
ESX / QBCore / StandaloneUnoAuto-detección con Config.Framework.Type = 'auto'
Licencia LV ScriptsGenerada en lvscripts.net vinculada a la IP del servidor

Instalación

  1. Copia el recurso en tu carpeta resources/:
    resources/lv-persistent-vehicles-lite/
  2. Base de datos — ejecuta el SQL (también se auto-instala al arrancar):
    lv-persistent-vehicles-lite/sql/install.sql
  3. server.cfg — orden recomendado:
    set mysql_connection_string "mysql://usuario:pass@localhost/nombre_bd?charset=utf8mb4"
    ensure oxmysql
    ensure lv-persistent-vehicles-lite
  4. Configura config.lua con tu licencia, framework y ubicaciones de garaje/concesionario.
  5. Reinicia el servidor y comprueba la consola: debe aparecer verificación de licencia correcta.
Sin licencia válida el script no arranca: concesionario, garaje y persistencia quedan desactivados.

Licencia

La licencia se genera en tu panel de LV Scripts tras la compra. Debe estar vinculada a la IP pública de tu servidor FiveM.

Config.License = {
    Key = 'LV-XXXX-XXXX-XXXX',   -- Tu clave del panel
    ApiBase = 'https://lvscripts.net',
    RecheckInterval = 300000,    -- Re-verificación cada 5 min (ms)
}

Puedes activar Config.General.Debug = true temporalmente para ver en consola la URL de verificación y la respuesta de la API.

Configuración

Persistencia

Config.Persistence = {
    SaveInterval = 60,              -- Guardado automático (segundos)
    SaveOnExitVehicle = true,
    SaveOnPlayerDrop = true,
    SaveOnResourceStop = true,
    FullVehicleState = true,      -- Puertas, ventanas, ruedas, suciedad...
    DeleteAbandoned = false,      -- NUNCA eliminar coches abandonados
    SpawnOnStart = true,          -- Restaurar al iniciar servidor
    UseRoutingBuckets = true,     -- Showroom / test drive privados
}

Streaming (OneSync)

Config.Streaming = {
    Enabled = true,
    SpawnRadius = 350.0,    -- Metros para mantener vehículo spawneado
    DespawnRadius = 450.0,  -- Metros para despawn (datos en BD)
    TickMs = 2500,
}

Concesionario

Ubicación por defecto: PDM Legion Square. Personaliza en Config.Dealership:

  • Entrance — punto de entrada del jugador
  • Showroom — posición vehículo, cámara y jugador en vista previa
  • TestDrive — duración, spawn y punto de retorno
  • PaymentAccount'bank' o 'cash' (ESX/QBCore)
  • UseAllGtaVehicles — catálogo completo GTA o filtrado

Garajes

Define garajes en config/garages.lua. Cada garaje incluye:

  • Coordenadas de menú y zonas de guardado
  • Puntos de spawn al sacar vehículo
  • Blip y marcador en el suelo (colores en Config.WorldMarkers)

Teclas

Config.Keys = {
    LockToggle = 'U',   -- Bloquear / desbloquear
    Interact = 38,      -- E — concesionario, garaje, guardar
}

Catálogo del concesionario

Edita config/gta_vehicles.lua o usa overrides en Config.VehicleOverrides / Config.VehicleBlacklist para controlar qué modelos aparecen a la venta.

Frameworks

Config.Framework = {
    Type = 'auto',      -- auto | esx | qbcore | standalone
    AutoDetect = true,
}
FrameworkDetecciónCuenta de pago
QBCoreqb-coreCash / Bank de QBCore
ESXes_extendedEfectivo / Banco ESX
StandaloneSin frameworkUsa identificador license:

Con auto, el orden de detección es: QBCore → ESX → Standalone.

Llaves QBCore: si usas qb-vehiclekeys, activa Config.KeySystem.UseQBVehicleKeys = true. Por defecto el script usa su propio sistema de llaves LV.

Uso en juego

AcciónCómo hacerlo
Entrar al concesionarioVe al blip morado (PDM) → pulsa E
Comprar vehículoSelecciona modelo, personaliza colores, confirma compra
Test driveDesde el showroom → botón Test Drive (60 s por defecto)
Abrir garajeBlip de parking → E en el marcador
Guardar vehículoConduce a la zona verde del garaje → E
Bloquear / desbloquearCerca del vehículo → U

Comportamiento tras reinicio

  • Vehículos fuera del garaje se respawnean en su última posición guardada.
  • Vehículos en garaje (stored = 1) permanecen en BD sin entidad en el mundo.
  • Al parar el recurso, las entidades se eliminan del mundo pero los datos persisten en MySQL.

Comandos

ComandoDescripción
/darllave [id]Comparte la llave de tu vehículo cercano con otro jugador (por ID de servidor)
/quitarllaveRevoca llaves compartidas del vehículo actual

Exports (servidor)

Integra con otros recursos usando los exports del servidor:

-- Datos completos por ID interno del vehículo
local data = exports['lv-persistent-vehicles-lite']:GetVehicleData(vehicleId)

-- Buscar por matrícula
local vehicle = exports['lv-persistent-vehicles-lite']:GetVehicleByPlate('ABC 123')

Los datos devueltos incluyen propietario, modelo, posición, estado de garaje, combustible, daños y propiedades JSON.

Base de datos

TablaContenido
lv_pv_vehiclesVehículos persistentes: owner, plate, model, coords, fuel, damage, stored, props JSON...
lv_pv_keysLlaves compartidas entre jugadores por vehículo

El instalador SQL crea índices en owner y plate para consultas rápidas con muchos vehículos.

Solución de problemas

El script no arranca / licencia inválida

  • Comprueba que la IP pública del servidor coincide con la de la licencia en lvscripts.net.
  • Verifica Config.License.Key sin espacios ni comillas extra.
  • Activa Config.General.Debug = true y revisa la consola del servidor.

Los vehículos no persisten

  • Confirma que oxmysql está conectado (ensure oxmysql antes del recurso).
  • Revisa que las tablas lv_pv_vehicles existen en tu BD.
  • Comprueba Config.Persistence.SpawnOnStart = true.

Concesionario o garaje no aparece

  • Licencia debe estar activa (sin ella todo el gameplay se desactiva).
  • Revisa coordenadas en Config.Dealership y config/garages.lua.
  • Comprueba Config.Blips.Enabled y Config.WorldMarkers.Enabled.

Rendimiento con muchos vehículos

  • Ajusta SpawnRadius / DespawnRadius según tu población y hardware.
  • Sube SaveInterval si tienes miles de vehículos activos.
  • Usa garajes con frecuencia para mantener vehículos en stored = 1.
¿Sigues con dudas? Abre un ticket en nuestro Discord o escribe a contacto@lvscripts.com.