Dégâts des véhicules FiveM : santé du moteur, santé de la carrosserie et réglages de manipulation

Comment fonctionnent les dégâts des véhicules dans FiveM : les plages de santé du moteur, de la carrosserie et du réservoir d'essence, GetVehicleEngineHealth, multiplicateurs de dégâts de manipulation et comment fonctionnent les scripts de dégâts réalistes.

Symptômes typiques :

text
Cars lose their engine after a small bump, explode when someone lightly hits a wall, or never take damage at all.

Les dégâts dans GTA sont une poignée de valeurs de santé par véhicule, et quelques chiffres de manipulation qui dimensionnent à quelle vitesse elles chutent. Cet article donne les plages, les natives, les valeurs de manipulation et l'idée derrière les scripts de dégâts réalistes.

Les valeurs de santé

Un véhicule a plusieurs valeurs de santé que vous pouvez lire et écrire sur le client :

Valeur Plage Lire avec
Santé du moteur -4000 à 1000 GetVehicleEngineHealth
Santé de la carrosserie 0 à 1000 GetVehicleBodyHealth
Santé du réservoir d'essence 0 à 1000 GetVehiclePetrolTankHealth

Une nouvelle voiture est à 1000.0 sur les trois. Le moteur est celui inhabituel car il descend en dessous de zéro :

  • À 1000, le moteur est sain.
  • À mesure que la valeur baisse, la voiture fume et perd de la puissance.
  • À 0 et au-dessous, le moteur est mort et la voiture peut prendre feu. La plage descend jusqu'à -4000.
lua
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)

print('engine', GetVehicleEngineHealth(vehicle))
print('body', GetVehicleBodyHealth(vehicle))
print('tank', GetVehiclePetrolTankHealth(vehicle))

Le réservoir d'essence compte pour les feux. Quand la santé du réservoir tombe, il peut fuir, et un réservoir qui fuit peut s'enflammer. Le moteur et le réservoir sont séparés, donc un moteur à 1000 peut toujours brûler si le réservoir est touché.

Définir les valeurs

Pour réparer ou endommager un véhicule, écrivez les valeurs en retour :

lua
SetVehicleEngineHealth(vehicle, 1000.0)
SetVehicleBodyHealth(vehicle, 1000.0)
SetVehiclePetrolTankHealth(vehicle, 1000.0)

Pour réparer complètement un véhicule, y compris la déformation visible et la saleté, il y a des natives séparés :

lua
SetVehicleFixed(vehicle)
SetVehicleDeformationFixed(vehicle)
SetVehicleDirtLevel(vehicle, 0.0)

SetVehicleFixed réinitialise la santé et répare le modèle. SetVehicleDeformationFixed supprime les bosses. Utilisez les deux pour une réparation complète.

Pour sauvegarder les dégâts d'une voiture possédée, stockez les valeurs avec les autres propriétés, voir vehicle properties. Si vous ne le faites pas, chaque voiture sort du garage complètement réparée.

Conseil : un véhicule qui s'arrête à l'instant et ne redémarrera plus est souvent une santé du moteur inférieure à 0. Le définir à une valeur comme 400.0 le ramène sans réparation complète, ce que font de nombreux scripts mécanicien. Voir aussi le mechanic job.

Multiplicateurs de manipulation

À quelle vitesse les valeurs chutent est décidé par la manipulation du véhicule. Trois d'entre eux sont les commandes habituelles :

Valeur de manipulation Effet
fCollisionDamageMult Combien une collision endommage la carrosserie et le moteur
fDeformationDamageMult Combien une collision déforme le modèle, les bosses visibles
fEngineDamageMult Combien de dégâts le moteur subit

Une valeur de 1.0 est neutre, plus bas signifie moins de dégâts et plus haut signifie plus. Dans un handling.meta, ils ressemblent à ceci :

xml
<fCollisionDamageMult value="0.700000" />
<fDeformationDamageMult value="0.700000" />
<fEngineDamageMult value="1.500000" />

Les petits changements vont loin, donc bougez par dixièmes. Pour où le fichier se trouve et comment appliquer le changement, voir editing vehicle handling. Les mêmes valeurs peuvent être changées au runtime avec SetVehicleHandlingFloat, ce qui affecte un véhicule :

lua
SetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fCollisionDamageMult', 0.7)

Les changements au runtime s'appliquent à ce véhicule tant qu'il existe. Appliquez-les à nouveau chaque fois qu'il se génère.

Scripts de dégâts réalistes

Les scripts de dégâts ne changent pas le moteur du jeu, ils utilisent les valeurs ci-dessus. Le concept est simple :

  1. Une boucle lit la santé du moteur et de la carrosserie du véhicule que le joueur conduit.
  2. Quand les valeurs tombent au-dessous de seuils définis, le script applique des effets : moins de puissance avec SetVehicleEnginePowerMultiplier, un moteur qui cale, une direction qui tire, un avertissement à l'écran.
  3. Il empêche le moteur de mourir complètement, par exemple en le maintenant à une petite valeur positive, pour que la voiture boite au lieu de brûler.
  4. Un mécanicien ou une trousse de réparation définit les valeurs à nouveau.

La boucle n'a pas besoin de fonctionner à chaque frame. Une vérification toutes les quelques centaines de millisecondes est suffisante et moins chère, voir how Wait works :

lua
CreateThread(function()
    while true do
        local ped = PlayerPedId()
        local vehicle = GetVehiclePedIsIn(ped, false)

        if vehicle ~= 0 and GetPedInVehicleSeat(vehicle, -1) == ped then
            if GetVehicleEngineHealth(vehicle) < 200.0 then
                SetVehicleEngineHealth(vehicle, 200.0)
                SetVehicleEngineOn(vehicle, false, true, true)
            end
            Wait(500)
        else
            Wait(1500)
        end
    end
end)

Ceci garde le moteur de brûler, et l'éteint à la place. Traitez-le comme un point de départ : un vrai script ajoute un moyen de le redémarrer, pour que le joueur ne soit pas coincé.

Prévention des explosions

Si vous voulez seulement moins de décès par le feu, les options les plus simples et sûres sont celles ci-dessus : un multiplicateur de dégâts plus bas, et garder la santé du moteur et du réservoir de tomber à zéro.

Il y a aussi des natives qui désactivent des parties du système d'incendie et d'explosion pour un véhicule, comme ceux qui arrêtent la dégradation du moteur. Utilisez-les sur un véhicule spécifique, comme un véhicule de travail, et lisez la documentation du native avant de vous y fier. Ne les appliquez pas à chaque véhicule sur le serveur :

  • Les scripts comme une bombe voiture ou un hoist dépendent de véhicules qui peuvent exploser.
  • Les joueurs utilisent les dégâts dans le roleplay : une poursuite, une scène d'accident, un arrêt policier.
  • Un véhicule qui ne peut pas être détruit est un outil de harcèlement, et un moyen d'éviter les conséquences.

Décidez par cas d'usage, et préférez les multiplicateurs.

Dégâts après un redémarrage ou un respawn

Si une voiture est réparée chaque fois qu'elle se génère, la cause en est l'une de celles-ci :

  • Le garage ne sauvegarde pas la santé du moteur et de la carrosserie, donc chaque spawn commence à 1000. Enregistrez les valeurs en mémoire et appliquez-les au spawn.
  • Un script appelle SetVehicleFixed à chaque spawn.
  • La voiture est une entité fraîche, et sa santé commence toujours à fond. Seules vos données sauvegardées portent les dégâts.

Liste de contrôle

Symptôme Solution
Besoin de la santé du moteur GetVehicleEngineHealth, plage -4000 à 1000
La voiture meurt au plus léger coup Baissez fCollisionDamageMult et fEngineDamageMult dans la manipulation
Les bosses trop visibles Baissez fDeformationDamageMult
La voiture brûle après un petit coup Gardez la santé du réservoir d'essence à jour, ou limitez la chute du moteur
La voiture calée ne redémarrera pas Définissez la santé du moteur au-dessus de 0
La réparation laisse des bosses Ajoutez SetVehicleDeformationFixed après SetVehicleFixed
Les dégâts perdus après stockage Enregistrez la santé du moteur et de la carrosserie avec les autres propriétés

Réponses rapides

Quelle est la plage de santé du moteur du véhicule ?

De -4000 à 1000. Un moteur sain est à 1000. Sous 0, le moteur est mort et la voiture peut brûler.

Comment faire que les voitures prennent moins de dégâts ?

Baissez les multiplicateurs de dégâts dans la manipulation du véhicule, comme fCollisionDamageMult et fDeformationDamageMult, ou maintenez les valeurs de santé à jour depuis un script.

Puis-je empêcher les véhicules d'exploser ?

Vous pouvez le réduire en maintenant les valeurs de santé à jour ou en changeant la manipulation, mais attention : un paramètre général supprime une partie du jeu que d'autres scripts, comme un hoist ou une bombe voiture, peuvent avoir besoin.

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 →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 →Chameleon Paints82 peintures caméléon à reflets changeants, dans un menu à appliquer en un clic.Voir le script →

À lire aussi