Éditer handling.meta dans FiveM : vitesse, grip, freins et HANDLING_FILE
Éditer un handling.meta de voiture sur FiveM : champs clés (fInitialDriveForce, fBrakeForce, fTractionCurveMax, fMass), HANDLING_FILE, appariement de handlingName, test et runtime.
Vous voulez une voiture qui accélère plus vite, fait meilleur grip ou freine plus fort, et les valeurs sont dans handling.meta. Ce guide montre ce que les champs clés font, comment le fichier est chargé, comment il est lié à la voiture et comment tester vos changements sans deviner.
Comment la gestion est liée à une voiture
Une voiture a une entrée de gestion, et la voiture la pointe par nom :
<!-- vehicles.meta -->
<Item>
<modelName>mycar</modelName>
<handlingId>MYCAR</handlingId>
...
</Item><!-- handling.meta -->
<Item type="CHandlingData">
<handlingName>MYCAR</handlingName>
...
</Item>Le handlingName dans handling.meta doit être le même que le handlingId dans vehicles.meta. S'ils diffèrent, le jeu ne trouve pas l'entrée et la voiture utilise une par défaut. Si deux packs utilisent le même handlingName, l'un d'eux gagne et l'autre a la mauvaise gestion, donc gardez les noms uniques.
Charger le fichier
La ressource doit déclarer le fichier dans fxmanifest.lua :
fx_version 'cerulean'
game 'gta5'
files {
'data/handling.meta',
'data/vehicles.meta',
}
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'Sans la ligne HANDLING_FILE, le fichier n'est pas utilisé et vos modifications ne font rien. L'ensemble complet des fichiers pour une voiture addon est dans comment ajouter des voitures addon.
Les champs clés
Le fichier de gestion a beaucoup de valeurs. Ce sont celles que vous changerez le plus :
<fMass value="1500.000000" />
<fInitialDriveForce value="0.320000" />
<fInitialDriveMaxFlatVel value="160.000000" />
<fBrakeForce value="0.800000" />
<fTractionCurveMax value="2.400000" />fMass: le poids de la voiture en kilogrammes. Une voiture lourde est plus difficile à pousser et à arrêter, et elle gagne les collisions avec les voitures plus légères.fInitialDriveForce: accélération. Une valeur plus élevée donne une poussée plus forte au départ. Les voitures du jeu de base s'assoient généralement bien en dessous de 1.0, donc un changement de quelques centièmes est déjà visible.fInitialDriveMaxFlatVel: la vitesse maximale que le moteur peut atteindre sur un sol plat, dans une unité proche de km/h. La vitesse affichée en jeu ne correspond pas exactement, car la traînée et les rapports jouent aussi.fBrakeForce: puissance de freinage. Augmentez-la pour des distances de freinage plus courtes ; trop élevée fait que la voiture se bloque ou bascule le nez vers le bas.fTractionCurveMax: le grip des pneus en virage. Plus signifie plus de grip, jusqu'à ce que la voiture se sente collée à la route.
D'autres que vous pourriez rencontrer sont fInitialDragCoeff (traînée aérienne), fTractionCurveMin (grip quand la voiture glisse), fSteeringLock et fSuspensionForce. Changez une chose à la fois pour savoir ce qui a causé le résultat.
Conseil : copiez le fichier d'origine avant de commencer, et changez les valeurs par petites étapes, environ 10 à 20 pour cent. Quelques changements importants à la fois rendent la voiture difficile à comprendre et difficile à annuler.
Testez vos changements
La gestion est lue quand un véhicule est créé, donc :
- Redémarrez la ressource (
restart mycar), ou le serveur entier si un redémarrage de la ressource ne semble pas s'appliquer. - Supprimez la voiture et générez-en une nouvelle. Une voiture déjà générée garde ses anciennes valeurs.
- Conduisez le même itinéraire de test chaque fois : une route droite pour la vitesse maximale et l'accélération, une longue courbe pour le grip, un arrêt soudain pour les freins.
- Changez une valeur, testez, écrivez ce qui a changé.
Si la voiture se comporte toujours comme avant, travaillez à travers les causes : la ligne data_file, l'appariement de handlingName, et si une autre ressource définit aussi le même nom de gestion.
Changer la gestion au runtime
Pour une valeur qui dépend d'une situation, comme un boost nitro, une voiture de job ou un moteur endommagé, vous pouvez changer la gestion d'un véhicule depuis un script client :
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if vehicle ~= 0 then
local mass = GetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fMass')
SetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fMass', mass + 200.0)
SetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fInitialDriveForce', 0.35)
endSetVehicleHandlingFloat change la valeur pour ce seul véhicule, aussi longtemps qu'il existe. Cela ne touche pas au fichier, aux autres voitures du même modèle, ou à la prochaine voiture que vous générez. C'est le bon outil pour les effets temporaires, et le mauvais pour le tuning permanent : mettez ceux-ci dans handling.meta pour que chaque voiture du modèle les ait.
Attention : ne lancez pas le changement dans une boucle chaque frame. Définissez-le une fois quand la situation commence, et redéfinissez la valeur d'origine quand elle finit.
Remplacer une voiture du jeu de base
Une entrée de gestion avec le nom d'une voiture du jeu de base, dans une ressource, change cette voiture pour chaque joueur et chaque génération, y compris le trafic. C'est peut-être ce que vous voulez pour un pack « gestion réaliste », mais testez-le, puisque toutes les voitures de ce modèle changent à la fois.
Problèmes courants
- Aucun changement du tout. Vérifiez la ligne
HANDLING_FILE, lehandlingNameet lehandlingId, et générez une nouvelle voiture. - La ressource ne démarre pas. Le chemin dans
filesest faux, ou le XML a une erreur comme une balise de fermeture manquante. Voir impossible de démarrer la ressource. - La voiture se renverse ou tourne.
fInitialDriveForceoufTractionCurveMaxest trop élevé pour la masse. Retournez en arrière d'une étape. - Une voiture différente a changé. Deux fichiers utilisent le même
handlingName. Renommez le vôtre et lehandlingIdcorrespondant.
Checklist
| Problème | Solution |
|---|---|
| Les modifications n'ont aucun effet | Ajoutez data_file 'HANDLING_FILE' et respawner la voiture |
| La voiture utilise la gestion par défaut | Faites que handlingName égale handlingId dans vehicles.meta |
| Besoin de plus d'accélération | Augmentez fInitialDriveForce par petites étapes |
| Besoin d'une vitesse maximale plus élevée | Augmentez fInitialDriveMaxFlatVel |
| Trop peu de grip | Augmentez fTractionCurveMax ; trop se sent contre nature |
| Effet temporaire | SetVehicleHandlingFloat sur le client, une fois, et restaurez-le plus tard |
Réponses rapides
Pourquoi ma modification de handling.meta ne fait rien ?
Généralement le fichier n'est pas chargé avec data_file 'HANDLING_FILE', ou le handlingName ne correspond pas au handlingId dans vehicles.meta. Respawner aussi la voiture : une voiture qui existe déjà garde ses anciennes valeurs.
Comment je rends une voiture plus rapide ?
Augmentez fInitialDriveMaxFlatVel pour la vitesse maximale et fInitialDriveForce pour l'accélération, par petites étapes. De grands sauts rendent la voiture non-conduisible ou irréaliste.
Puis-je changer la gestion dans un script pendant que le serveur s'exécute ?
Oui, avec SetVehicleHandlingFloat sur le client. Cela change une seule voiture et est perdu quand la voiture est supprimée, donc cela ne remplace pas le fichier.
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 →
Car BombPosez, détectez et désamorcez des bombes sur les véhicules — avec téléphone détonateur et mini-jeu de C4.Voir le script →