Daño de vehículo en FiveM: salud del motor, salud de la carrocería y ajustes de handling

Cómo funciona el daño del vehículo en FiveM: los rangos de salud del motor, la carrocería y el tanque de gasolina, GetVehicleEngineHealth, multiplicadores de daño de handling y cómo funcionan los scripts de daño realista.

Síntomas típicos:

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

El daño en GTA es un puñado de valores de salud por vehículo, y unos pocos números de handling que escalan qué tan rápido caen. Este artículo da los rangos, los nativos, los valores de handling y la idea detrás de los scripts de daño realista.

Los valores de salud

Un vehículo tiene varios valores de salud que puedes leer y escribir en el cliente:

Valor Rango Leer con
Salud del motor -4000 a 1000 GetVehicleEngineHealth
Salud de la carrocería 0 a 1000 GetVehicleBodyHealth
Salud del tanque de gasolina 0 a 1000 GetVehiclePetrolTankHealth

Un coche nuevo está en 1000.0 en los tres. El motor es el inusual porque baja de cero:

  • En 1000, el motor es saludable.
  • A medida que el valor baja, el coche emite humo y pierde potencia.
  • En 0 y por debajo, el motor está muerto y el coche puede coger fuego. El rango baja a -4000.
lua
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)

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

El tanque de gasolina importa para los incendios. Cuando la salud del tanque cae, puede fugar, y un tanque que fuga puede encenderse. El motor y el tanque son separados, así que un motor en 1000 aún puede quemar si el tanque es golpeado.

Establecer los valores

Para reparar o dañar un vehículo, escribe los valores de vuelta:

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

Para reparar un vehículo completamente, incluyendo la deformación visible y la suciedad, hay nativos separados:

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

SetVehicleFixed reinicia la salud y repara el modelo. SetVehicleDeformationFixed elimina abolladuras. Usa ambos para una reparación completa.

Para guardar el daño de un coche propiedad, almacena los valores con las otras propiedades, mira propiedades del vehículo. Si no lo haces, cada coche sale del garaje completamente reparado.

Consejo: un vehículo que se cala de inmediato y no arrancará de nuevo a menudo tiene una salud del motor bajo 0. Establecerla de nuevo a un valor como 400.0 la devuelve sin una reparación completa, que es lo que muchos scripts de mecánico hacen. Mira también el trabajo de mecánico.

Multiplicadores de handling

Qué tan rápido caen los valores se decide por el handling del vehículo. Tres de ellos son los botones habituales:

Valor de handling Efecto
fCollisionDamageMult Cuánto una colisión daña la carrocería y el motor
fDeformationDamageMult Cuánto una colisión deforma el modelo, las abolladuras visibles
fEngineDamageMult Cuánto daño recibe el motor

Un valor de 1.0 es neutral, menor significa menos daño y mayor significa más. En un handling.meta se ven así:

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

Los pequeños cambios van muy lejos, así que muévete por décimos. Para saber dónde vive el archivo y cómo aplicar el cambio, mira editar handling de vehículo. Los mismos valores se pueden cambiar en tiempo de ejecución con SetVehicleHandlingFloat, que afecta un vehículo:

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

Los cambios en tiempo de ejecución se aplican a ese vehículo mientras existe. Reaplicar cada vez que se desova.

Scripts de daño realista

Los scripts de daño no cambian el motor del juego, usan los valores anteriores. El concepto es simple:

  1. Un bucle lee la salud del motor y la carrocería del vehículo que el jugador conduce.
  2. Cuando los valores caen por debajo de ciertos umbrales, el script aplica efectos: menos potencia con SetVehicleEnginePowerMultiplier, un motor que se cala, un volante que tira, una advertencia en pantalla.
  3. Mantiene el motor de morir completamente, por ejemplo manteniéndolo en un pequeño valor positivo, así que el coche cojea en lugar de quemarse.
  4. Un mecánico o un kit de reparación establece los valores de nuevo hacia arriba.

El bucle no tiene que ejecutarse cada frame. Una comprobación cada pocos cientos de milisegundos es suficiente y más barato, mira cómo funciona Wait:

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)

Esto mantiene el motor de quemarse, y lo apaga en su lugar. Trátalo como un punto de partida: un script real añade una forma de reiniciarlo, para que el jugador no esté atrapado.

Prevenir explosiones

Si solo quieres menos muertes por fuego, las opciones seguras más simples son las anteriores: un multiplicador de daño más bajo, y mantener la salud del motor y el tanque de caer a cero.

También hay nativos que desactivan partes del sistema de incendios y explosiones para un vehículo, como los que detienen la degradación del motor. Úsalos en un vehículo específico, como un vehículo de trabajo, y lee la documentación del nativo antes de confiar en ellos. No los apliques a cada vehículo en el servidor:

  • Scripts como una bomba de coche o un heist dependen de vehículos que pueden explotar.
  • Los jugadores usan daño en roleplay: una persecución, una escena de choque, una parada de policía.
  • Un vehículo que no se puede destruir es una herramienta de griefing, y una forma de evitar consecuencias.

Decide por caso de uso, y prefiere los multiplicadores.

Daño después de un reinicio o una reaparición

Si un coche es reparado cada vez que se desova, la causa es una de estas:

  • El garaje no guarda la salud del motor y la carrocería, así que cada desove comienza en 1000. Guarda los valores al almacenar y aplícalos en el desove.
  • Un script llama a SetVehicleFixed en cada desove.
  • El coche es una entidad fresca, y su salud siempre comienza llena. Solo tus datos guardados llevan daño.

Lista de comprobación

Síntoma Solución
Necesito la salud del motor GetVehicleEngineHealth, rango -4000 a 1000
El coche muere al más leve golpe Baja fCollisionDamageMult y fEngineDamageMult en handling
Las abolladuras demasiado visibles Baja fDeformationDamageMult
El coche se quema después de un pequeño golpe Mantén la salud del tanque de gasolina alta, o limita la caída del motor
Coche calado no arrancará Establece la salud del motor por encima de 0
La reparación deja abolladuras Añade SetVehicleDeformationFixed después de SetVehicleFixed
Daño perdido después de almacenar Guarda la salud del motor y la carrocería con las otras propiedades

Respuestas rápidas

¿Cuál es el rango de salud del motor del vehículo?

De -4000 a 1000. Un motor saludable está en 1000. Bajo 0 el motor está muerto, y el coche puede quemarse.

¿Cómo hago que los coches reciban menos daño?

Baja los multiplicadores de daño en el handling del vehículo, como fCollisionDamageMult y fDeformationDamageMult, o mantén los valores de salud en su máximo desde un script.

¿Puedo impedir que los vehículos exploten?

Puedes reducirlo manteniendo los valores de salud altos o cambiando el handling, pero ten cuidado: una configuración general elimina una parte del juego que otros scripts, como un heist o una bomba de coche, pueden necesitar.

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 →Car BombColoca, detecta y desactiva bombas en coches — con detonador y minijuego de C4.Ver script →Chameleon Paints82 pinturas camaleón que cambian de color, en un menú de un clic.Ver script →

Sigue leyendo