Editar handling.meta en FiveM: velocidad, grip, frenos y HANDLING_FILE
Edita un handling.meta de coche en FiveM: campos clave (fInitialDriveForce, fBrakeForce, fTractionCurveMax, fMass), HANDLING_FILE, coincidir handlingName, pruebas y en tiempo de ejecución.
Quieres que un coche acelere más rápido, tenga mejor grip o frene más fuerte, y los valores están en handling.meta. Esta guía muestra qué hacen los campos clave, cómo se carga el fichero, cómo está vinculado al vehículo y cómo probar tus cambios sin adivinar.
Cómo está vinculada la conducción a un coche
Un coche tiene una entrada de conducción, y el coche apunta a ella por nombre:
<!-- vehicles.meta -->
<Item>
<modelName>mycar</modelName>
<handlingId>MYCAR</handlingId>
...
</Item><!-- handling.meta -->
<Item type="CHandlingData">
<handlingName>MYCAR</handlingName>
...
</Item>El handlingName en handling.meta debe ser igual al handlingId en vehicles.meta. Si difieren, el juego no encuentra la entrada y el coche usa la predeterminada. Si dos packs usan el mismo handlingName, uno de ellos gana y el otro coche conduce mal, así que mantén los nombres únicos.
Carga el fichero
El recurso debe declarar el fichero en 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'Sin la línea HANDLING_FILE, el fichero no se usa y tus ediciones no hacen nada. El conjunto completo de ficheros para un coche addon está en cómo añadir coches addon.
Los campos clave
El fichero de conducción tiene muchos valores. Estos son los que cambiarás más:
<fMass value="1500.000000" />
<fInitialDriveForce value="0.320000" />
<fInitialDriveMaxFlatVel value="160.000000" />
<fBrakeForce value="0.800000" />
<fTractionCurveMax value="2.400000" />fMass: el peso del coche en kilogramos. Un coche pesado es más difícil de empujar y de detener, y gana colisiones con coches más ligeros.fInitialDriveForce: aceleración. Un valor más alto da un empuje más fuerte desde la línea de salida. Los coches en el juego base normalmente se sientan bien por debajo de 1.0, así que un cambio de unos centésimos ya es visible.fInitialDriveMaxFlatVel: la velocidad máxima que el motor puede alcanzar en terreno plano, en una unidad cercana a km/h. La velocidad mostrada en el juego no coincide exactamente, ya que la resistencia y el engranaje también juegan un papel.fBrakeForce: potencia de frenado. Aumentalo para distancias de frenado más cortas; demasiado alto hace que el coche se bloquee o voltee la nariz hacia abajo.fTractionCurveMax: el grip de los neumáticos en una curva. Más alto significa más grip, hasta que el coche se siente pegado a la carretera.
Otros que puedas encontrar son fInitialDragCoeff (resistencia del aire), fTractionCurveMin (grip cuando el coche derrapa), fSteeringLock y fSuspensionForce. Cambia una cosa a la vez para saber qué causó el resultado.
Consejo: copia el fichero original antes de empezar, y cambia los valores en pasos pequeños, aproximadamente 10 a 20 por ciento. Algunos cambios grandes a la vez hacen el coche difícil de entender y difícil de deshacer.
Prueba tus cambios
La conducción se lee cuando se crea un vehículo, así que:
- Reinicia el recurso (
restart mycar), o todo el servidor si un reinicio del recurso no parece aplicar. - Elimina el coche e invoca uno nuevo. Un coche ya invocado mantiene sus valores antiguos.
- Conduce la misma ruta de prueba cada vez: una carretera recta para velocidad máxima y aceleración, una curva larga para grip, una parada repentina para frenos.
- Cambia un valor, prueba, anota qué cambió.
Si el coche aún se comporta como antes, trabaja a través de las causas: la línea data_file, la coincidencia de handlingName, y si otro recurso también define el mismo nombre de conducción.
Cambia la conducción en tiempo de ejecución
Para un valor que depende de una situación, como un impulso de nitro, un coche de trabajo o un motor dañado, puedes cambiar la conducción de un vehículo desde un script de cliente:
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 cambia el valor para ese vehículo, siempre que exista. No toca el fichero, otros coches del mismo modelo, o el próximo coche que invokes. Es la herramienta correcta para efectos temporales, y la incorrecta para ajustes permanentes: pon esos en handling.meta para que cada coche del modelo los tenga.
Cuidado: no ejecutes el cambio en un bucle cada fotograma. Establécelo una vez cuando comience la situación, y establece el valor original de vuelta cuando termine.
Reemplazando un coche del juego base
Una entrada de conducción con el nombre de un coche del juego base, en un recurso, cambia ese coche para cada jugador e invocación, incluyendo tráfico. Esto puede ser lo que quieres para un paquete de «conducción realista», pero pruébalo, ya que todos los coches de ese modelo cambian a la vez.
Problemas comunes
- Sin cambio en absoluto. Comprueba la línea
HANDLING_FILE, elhandlingNamey elhandlingId, e invoca un coche nuevo. - El recurso no inicia. La ruta en
fileses incorrecta, o el XML tiene un error como una etiqueta de cierre faltante. Ver couldn't start resource. - El coche se voltea o gira.
fInitialDriveForceofTractionCurveMaxes demasiado alto para la masa. Retrocede un paso. - Un coche diferente cambió. Dos ficheros usan el mismo
handlingName. Renombra el tuyo y elhandlingIdcoincidente.
Lista de verificación
| Síntoma | Solución |
|---|---|
| Las ediciones no tienen efecto | Añade data_file 'HANDLING_FILE' e invoca el coche de nuevo |
| El coche usa conducción predeterminada | Haz que handlingName sea igual a handlingId en vehicles.meta |
| Necesita más aceleración | Aumenta fInitialDriveForce en pasos pequeños |
| Necesita una velocidad máxima más alta | Aumenta fInitialDriveMaxFlatVel |
| Demasiado poco grip | Aumenta fTractionCurveMax; demasiado se siente poco natural |
| Efecto temporal | SetVehicleHandlingFloat en el cliente, una vez, y restauralo después |
Respuestas rápidas
¿Por qué mi cambio de handling.meta no hace nada?
Normalmente el fichero no se carga con data_file 'HANDLING_FILE', o el handlingName no coincide con el handlingId en vehicles.meta. También reaparece el coche: un vehículo que ya existe mantiene sus valores antiguos.
¿Cómo hago un coche más rápido?
Aumenta fInitialDriveMaxFlatVel para la velocidad máxima y fInitialDriveForce para la aceleración, en pasos pequeños. Los saltos grandes hacen el coche inmanejable o poco realista.
¿Puedo cambiar la conducción en un script mientras el servidor se ejecuta?
Sí, con SetVehicleHandlingFloat en el cliente. Cambia solo un vehículo y se pierde cuando el vehículo se elimina, así que no reemplaza al fichero.
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 →
Car BombColoca, detecta y desactiva bombas en coches — con detonador y minijuego de C4.Ver script →