Añadir coches a la tienda de vehículos FiveM (tabla ESX vehicles, QBCore, QBox)

Cómo añadir un coche a una concesionaria: las tablas ESX vehicles y vehicle_categories, entradas de shared/vehicles.lua en QBCore y QBox, y por qué un coche aparece sin precio.

Síntomas típicos:

text
The addon car works with /car, but the dealership does not sell it. Or it shows with no name, no price, or in the wrong category.

Una concesionaria vende lo que está listado en sus datos, no lo que existe en el juego. Añadir un coche toma dos pasos: el modelo tiene que transmitirse al juego, luego tiene que estar listado en los datos que usa tu framework. Este artículo cubre el segundo paso para ESX, QBCore y QBox.

Paso uno: el modelo debe transmitirse

Si el modelo no está cargado, la concesionaria no puede mostrarlo, y una compra no invoca nada. Añade el coche como un recurso primero, y comprueba que funciona en el juego:

text
/car mycar

Usa el nombre de invocación, que viene del vehicles.meta del coche. Si /car falla, arréglalo antes de tocar la tienda, ver añadiendo coches addon.

ESX: la tabla vehicles

La concesionaria de ESX lee dos tablas SQL. vehicle_categories contiene las categorías mostradas en el menú de la tienda, y vehicles contiene los coches.

sql
DESCRIBE vehicle_categories;
DESCRIBE vehicles;

En una base de datos estándar de ESX Legacy se ven así:

Tabla Columnas
vehicle_categories name, label
vehicles name, model, price, category

Añade una categoría si necesitas una nueva:

sql
INSERT INTO vehicle_categories (name, label) VALUES ('mycars', 'My cars');

Luego añade el coche:

sql
INSERT INTO vehicles (name, model, price, category)
VALUES ('My Car', 'mycar', 85000, 'mycars');
  • name es la etiqueta mostrada en la tienda.
  • model es el nombre de invocación, como en /car. Minúsculas, exacto.
  • price es un número entero.
  • category debe coincidir con el name de una fila en vehicle_categories, o el coche no aparece en ninguna categoría.

Reinicia el recurso de la concesionaria, o toda la tienda, así lee la tabla de nuevo. Tu lista de columnas puede diferir si usas una tienda de vehículos personalizada, así que confía en DESCRIBE sobre esta tabla.

Consejo: para ver cómo se ve un coche que funciona, copia los valores de una fila que ya está en la tienda con SELECT * FROM vehicles LIMIT 5; y edítalos.

QBCore: shared/vehicles.lua

QBCore mantiene su lista de vehículos en un fichero Lua, qb-core/shared/vehicles.lua. Cada entrada es un coche:

lua
['mycar'] = {
    model = 'mycar',
    name = 'My Car',
    brand = 'Mic',
    price = 85000,
    category = 'sports',
    categoryLabel = 'Sports',
    hash = `mycar`,
    shop = 'pdm',
},

Los campos:

  • model: el nombre de invocación, igual que la clave de la tabla.
  • name y brand: lo que la tienda muestra.
  • price: el precio de venta.
  • category y categoryLabel: el grupo en el menú.
  • hash: el hash del modelo. La forma de backtick lo computa para ti.
  • shop: el id de la concesionaria que lo vende, por ejemplo la predeterminada. Un nombre de tienda que no existe significa que ninguna tienda vende el coche.

El diseño exacto depende de la versión de qb-core. Algunas versiones usan una tabla con clave del modelo, otras una lista simple. Abre tu propio fichero y copia una entrada vecina, luego cambia los valores, así la estructura siempre coincide.

Después de editar, reinicia qb-core y el recurso de la concesionaria. Reiniciar el core en un servidor en vivo desconecta a jugadores en algunas configuraciones, así que hazlo en un momento tranquilo, o reinicia el servidor completo.

QBox: qbx_core shared vehicles

QBox mantiene los vehículos en su propio core, qbx_core/shared/vehicles.lua. La idea es la misma que en QBCore: una entrada con el modelo, nombre, marca, precio, categoría y tienda. QBox cambia su diseño de datos entre versiones, así que abre el fichero y copia una entrada que ya funciona en tu versión, luego edítala.

Reinicia qbx_core y tu concesionaria. No ejecutes una carpeta separada qb-core junto a él, ver converting QBCore scripts to QBox.

Scripts de concesionaria con su propia configuración

No toda concesionaria usa la lista del framework. Algunas leen su propio fichero de configuración o una tabla de base de datos, y la tabla vehicles o el fichero compartido se ignora. Comprueba primero la configuración del script para una lista de vehículos. Si tiene una, añade el coche allí también.

Problemas de nombre, precio y categoría

El coche no muestra nombre. El campo name está vacío, o la concesionaria usa el nombre de pantalla del juego. Un nombre de pantalla en el juego viene de AddTextEntry con el gameName del modelo en vehicles.meta. Sin él la tienda puede mostrar NULL o el modelo. Establece la etiqueta en tus datos.

Un coche que cuesta 0 o es gratis. El precio falta o no es un número. Elimina comillas alrededor de él.

La categoría no se muestra. En ESX, el valor de category no tiene fila en vehicle_categories. En QBCore la etiqueta de categoría falta, o la tienda filtra por una categoría que no conoce.

Nombre de invocación incorrecto. Mycar y mycar no son lo mismo en búsquedas de datos. Usa el nombre exactamente como se define, en minúsculas.

Comprado, pero sin coche. La compra funcionó y la invocación no. El modelo no se transmite en el cliente, o la matrícula y el propietario no se guardan. Comprueba la consola y la base de datos, ver the garage tables.

Manejo y rendimiento de coches addon

Un coche añadido con mal manejo o un modelo pesado daña a todo el servidor. Comprueba el manejo antes de venderlo, edita la conducción del vehículo, y prueba el modelo para memoria de textura, ver oversized assets.

Añadir muchos coches a la vez

Para un pack de coches, un bucle en SQL ahorra tiempo en ESX. Escribe las filas en una declaración:

sql
INSERT INTO vehicles (name, model, price, category) VALUES
('Car A', 'cara', 60000, 'mycars'),
('Car B', 'carb', 75000, 'mycars'),
('Car C', 'carc', 90000, 'mycars');

En QBCore y QBox, pega las entradas una tras otra en el fichero Lua, con una coma después de cada una.

Lista de verificación

Síntoma Solución
El coche funciona con /car pero no se vende Añádelo a la tabla vehicles, o a shared/vehicles.lua
El coche falta de una categoría en ESX El category debe coincidir con un name en vehicle_categories
Sin nombre o precio mostrado Rellena name y price, con el precio como número
Nada vende el coche en QBCore o QBox Comprueba que el valor de shop coincide con una concesionaria
La compra no invoca nada El modelo no se transmite: arregla el coche addon primero
Los datos editados no tienen efecto Reinicia el recurso de datos y la concesionaria
Errores de fichero Lua después de editar Comprueba comas y llaves alrededor de tu nueva entrada

Respuestas rápidas

¿Por qué mi coche addon no está en la concesionaria?

La tienda solo lista lo que está en sus datos: la tabla vehicles en ESX, o shared/vehicles.lua en QBCore y QBox. Añadir el coche al stream del servidor es un paso separado, y ambos son necesarios.

¿Qué nombre de modelo pongo en la tabla?

El nombre de invocación del vehículo, el que se usa en /car, que se define en el vehicles.meta del vehículo. Debe coincidir exactamente, en minúsculas.

¿Necesito reiniciar el servidor después de añadir un coche?

Reinicia el recurso que contiene los datos, y el script de la concesionaria. En ESX la tienda normalmente lee la tabla cuando inicia, así que reiniciarla es suficiente.

Scripts que evitan este problema

Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →Chameleon Paints82 pinturas camaleón que cambian de color, en un menú de un clic.Ver script →Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →

Sigue leyendo