Ajouter des voitures au magasin de véhicules FiveM (table ESX vehicles, QBCore, QBox)

Comment ajouter une voiture à un concessionnaire : les tables ESX vehicles et vehicle_categories, les entrées QBCore et QBox shared vehicles.lua, et pourquoi une voiture s'affiche sans prix.

Symptômes typiques :

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.

Un concessionnaire vend ce qui est listé dans ses données, pas ce qui existe dans le jeu. Ajouter une voiture prend deux étapes : le modèle doit être streamé au jeu, puis il doit être listé dans les données que votre framework utilise. Cet article couvre la deuxième étape pour ESX, QBCore et QBox.

Étape un : le modèle doit être streamé

Si le modèle n'est pas chargé, le concessionnaire ne peut pas le montrer, et un achat ne génère rien. Ajoutez d'abord la voiture comme ressource, et vérifiez qu'elle fonctionne en jeu :

text
/car mycar

Utilisez le nom de génération, qui vient du vehicles.meta de la voiture. Si /car échoue, corrigez d'abord cela avant de toucher au magasin, voir ajout de voitures addon.

ESX : la table vehicles

Le concessionnaire ESX lit deux tables SQL. vehicle_categories contient les catégories affichées dans le menu du magasin, et vehicles contient les voitures.

sql
DESCRIBE vehicle_categories;
DESCRIBE vehicles;

Dans une base de données ESX Legacy standard ils ressemblent à ceci :

Tableau Colonnes
vehicle_categories name, label
vehicles name, model, price, category

Ajoutez une catégorie si vous en avez besoin d'une nouvelle :

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

Ensuite ajoutez la voiture :

sql
INSERT INTO vehicles (name, model, price, category)
VALUES ('My Car', 'mycar', 85000, 'mycars');
  • name est le label affiché dans le magasin.
  • model est le nom de génération, comme dans /car. Minuscules, exact.
  • price est un nombre entier.
  • category doit correspondre au name d'une ligne dans vehicle_categories, ou la voiture n'apparaît dans aucune catégorie.

Redémarrez la ressource du concessionnaire, ou le magasin entier, pour qu'il relise la table. Votre liste de colonnes peut différer si vous utilisez un magasin de véhicules personnalisé, donc faites confiance à DESCRIBE plutôt qu'à ce tableau.

Conseil : pour voir ce qu'une voiture fonctionnelle ressemble, copiez les valeurs d'une ligne déjà dans le magasin avec SELECT * FROM vehicles LIMIT 5; et éditez-les.

QBCore : shared/vehicles.lua

QBCore garde sa liste de véhicules dans un fichier Lua, qb-core/shared/vehicles.lua. Chaque entrée est une voiture :

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

Les champs :

  • model : le nom de génération, identique à la clé de la table.
  • name et brand : ce que le magasin affiche.
  • price : le prix de vente.
  • category et categoryLabel : le groupe dans le menu.
  • hash : le hash du modèle. La forme backtick le calcule pour vous.
  • shop : l'identifiant du concessionnaire qui la vend, par exemple celui par défaut. Un nom de magasin qui n'existe pas signifie qu'aucun magasin ne vend la voiture.

La disposition exacte dépend de la version de qb-core. Certaines versions utilisent une table indexée par le modèle, d'autres une liste simple. Ouvrez votre propre fichier et copiez une entrée voisine, puis changez les valeurs, pour que la structure corresponde toujours.

Après l'édition, redémarrez qb-core et la ressource du concessionnaire. Redémarrer le core sur un serveur actif déconnecte les joueurs dans certaines configurations, donc faites-le à un moment calme, ou redémarrez tout le serveur.

QBox : qbx_core shared vehicles

QBox garde les véhicules dans son propre core, qbx_core/shared/vehicles.lua. L'idée est la même que sur QBCore : une entrée avec le modèle, nom, marque, prix, catégorie et magasin. QBox change sa disposition de données entre les versions, donc ouvrez le fichier et copiez une entrée qui fonctionne déjà sur votre version, puis éditez-la.

Redémarrez qbx_core et votre concessionnaire. N'exécutez pas un dossier qb-core séparé à côté, voir conversion de scripts QBCore en QBox.

Scripts de concessionnaire avec leur propre configuration

Pas tous les concessionnaires utilisent la liste du framework. Certains lisent leur propre fichier de configuration ou une table de base de données, et la table vehicles ou le fichier partagé est ignoré. Vérifiez d'abord la configuration du script pour une liste de véhicules. S'il en a une, ajoutez aussi la voiture là.

Problèmes de nom, prix et catégorie

La voiture n'affiche pas de nom. Le champ name est vide, ou le concessionnaire utilise le nom d'affichage du jeu. Un nom d'affichage en jeu vient de AddTextEntry avec le gameName du modèle dans vehicles.meta. Sans cela le magasin peut afficher NULL ou le modèle. Définissez le label dans vos données.

Une voiture qui coûte 0 ou est gratuite. Le prix est manquant ou pas un nombre. Supprimez les guillemets autour.

La catégorie ne s'affiche pas. Sur ESX, la valeur category n'a pas de ligne dans vehicle_categories. Sur QBCore le label de catégorie est manquant, ou le magasin filtre par une catégorie qu'il ne connaît pas.

Mauvais nom de génération. Mycar et mycar ne sont pas les mêmes dans les recherches de données. Utilisez le nom exactement comme défini, en minuscules.

Acheté, mais pas de voiture. L'achat a fonctionné et la génération non. Le modèle n'est pas streamé sur le client, ou la plaque et le propriétaire ne sont pas enregistrés. Vérifiez la console et la base de données, voir les tables du garage.

Gestion et performance des voitures addon

Une voiture ajoutée avec une mauvaise gestion ou un modèle lourd nuit à tout le serveur. Vérifiez la gestion avant de la vendre, éditez la gestion du véhicule, et testez le modèle pour la mémoire de texture, voir assets surdimensionnés.

Ajouter beaucoup de voitures à la fois

Pour un pack de voitures, une boucle en SQL économise du temps sur ESX. Écrivez les lignes en une seule instruction :

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

Sur QBCore et QBox, collez les entrées l'une après l'autre dans le fichier Lua, avec une virgule après chacune.

Checklist

Problème Solution
La voiture fonctionne avec /car mais n'est pas vendue Ajoutez-la à la table vehicles, ou shared/vehicles.lua
La voiture manque d'une catégorie sur ESX Le category doit correspondre à un name dans vehicle_categories
Pas de nom ou prix affiché Remplissez name et price, avec le prix en tant que nombre
Rien ne vend la voiture sur QBCore ou QBox Vérifiez que la valeur shop correspond à un concessionnaire
L'achat ne génère rien Le modèle n'est pas streamé : corrigez d'abord la voiture addon
Les données éditées n'ont pas d'effet Redémarrez la ressource de données et le concessionnaire
Erreurs du fichier Lua après l'édition Vérifiez les virgules et accolades autour de votre nouvelle entrée

Réponses rapides

Pourquoi ma voiture addon ne se trouve pas dans le concessionnaire ?

Le magasin ne liste que ce qui est dans ses données : la table vehicles sur ESX, ou shared/vehicles.lua sur QBCore et QBox. Ajouter la voiture au serveur stream est une étape séparée, et les deux sont nécessaires.

Quel est le nom du modèle que je mets dans la table ?

Le nom de génération du véhicule, celui utilisé dans /car, qui est défini dans vehicles.meta du véhicule. Il doit correspondre exactement, en minuscules.

Dois-je redémarrer le serveur après l'ajout d'une voiture ?

Redémarrez la ressource qui contient les données, et le script du concessionnaire. Sur ESX le magasin lit généralement la table au démarrage, donc redémarrer suffit.

Des scripts sans ce problème

Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →Chameleon Paints82 peintures caméléon à reflets changeants, dans un menu à appliquer en un clic.Voir le script →Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →

À lire aussi