handling.meta explicado: campos, unidades y flags
handling.meta define cómo se conduce un vehículo en GTA V. Cada entrada fija la masa, la fuerza motriz, las marchas, la velocidad máxima, los frenos, la dirección, el agarre de los neumáticos, la suspensión y los multiplicadores de daño, además de flags en hexadecimal y bloques opcionales de sub-handling para coches, motos, barcos y aeronaves. Un vehículo usa la entrada cuyo handlingName es igual a su handlingId en vehicles.meta.
¿Qué es handling.meta?
handling.meta es una lista XML de elementos CHandlingData. Cada elemento es un perfil de física, identificado por handlingName. En FiveM se carga con data_file 'HANDLING_FILE'. La entrada de abajo es el Sultan original con el nombre cambiado; los valores de las tablas de esta página se refieren a ella.
<?xml version="1.0" encoding="UTF-8"?>
<CHandlingDataMgr>
<HandlingData>
<Item type="CHandlingData">
<handlingName>MYCAR</handlingName>
<fMass value="1400.000000" />
<fInitialDragCoeff value="8.000000" />
<fPercentSubmerged value="85.000000" />
<vecCentreOfMassOffset x="0.000000" y="0.000000" z="0.000000" />
<vecInertiaMultiplier x="1.000000" y="1.400000" z="1.600000" />
<fDriveBiasFront value="0.400000" />
<nInitialDriveGears value="5" />
<fInitialDriveForce value="0.260000" />
<fDriveInertia value="1.000000" />
<fClutchChangeRateScaleUpShift value="1.800000" />
<fClutchChangeRateScaleDownShift value="1.800000" />
<fInitialDriveMaxFlatVel value="145.000000" />
<fBrakeForce value="0.400000" />
<fBrakeBiasFront value="0.650000" />
<fHandBrakeForce value="0.700000" />
<fSteeringLock value="35.000000" />
<fTractionCurveMax value="2.350000" />
<fTractionCurveMin value="1.950000" />
<fTractionCurveLateral value="22.500000" />
<fTractionSpringDeltaMax value="0.150000" />
<fLowSpeedTractionLossMult value="1.400000" />
<fCamberStiffnesss value="0.000000" />
<fTractionBiasFront value="0.485000" />
<fTractionLossMult value="1.000000" />
<fSuspensionForce value="2.800000" />
<fSuspensionCompDamp value="1.200000" />
<fSuspensionReboundDamp value="2.100000" />
<fSuspensionUpperLimit value="0.150000" />
<fSuspensionLowerLimit value="-0.140000" />
<fSuspensionRaise value="0.000000" />
<fSuspensionBiasFront value="0.500000" />
<fAntiRollBarForce value="0.300000" />
<fAntiRollBarBiasFront value="0.530000" />
<fRollCentreHeightFront value="0.240000" />
<fRollCentreHeightRear value="0.250000" />
<fCollisionDamageMult value="0.700000" />
<fWeaponDamageMult value="1.000000" />
<fDeformationDamageMult value="0.700000" />
<fEngineDamageMult value="1.500000" />
<fPetrolTankVolume value="65.000000" />
<fOilVolume value="5.000000" />
<fSeatOffsetDistX value="0.000000" />
<fSeatOffsetDistY value="0.000000" />
<fSeatOffsetDistZ value="0.050000" />
<nMonetaryValue value="35000" />
<strModelFlags>440010</strModelFlags>
<strHandlingFlags>0</strHandlingFlags>
<strDamageFlags>0</strDamageFlags>
<AIHandling>AVERAGE</AIHandling>
<SubHandlingData>
<Item type="CCarHandlingData">
<fBackEndPopUpCarImpulseMult value="0.100000" />
<fBackEndPopUpBuildingImpulseMult value="0.030000" />
<fBackEndPopUpMaxDeltaSpeed value="0.600000" />
</Item>
<Item type="NULL" />
<Item type="NULL" />
</SubHandlingData>
</Item>
</HandlingData>
</CHandlingDataMgr>
Cada campo tiene un mínimo y un máximo en el esquema de datos del juego. Para la mayoría de los floats el rango es de 0 a 1000, fMass llega hasta 100000 y el número de marchas está limitado a 10. Los valores de las tablas son lo que el juego hace con el número después de cargarlo, sacado del código de handling.
¿Qué hacen fMass, la resistencia del aire y el centro de masa?
| Campo | Unidad | Sultan | Qué hace |
|---|---|---|---|
fMass | kg | 1400 | Masa del vehículo. Se usa en todos los cálculos de fuerzas y colisiones. |
fInitialDragCoeff | se multiplica por 0.0001 al cargar | 8.0 | Resistencia del aire. Los valores altos frenan más al vehículo a alta velocidad. |
fPercentSubmerged | % | 85 | Qué parte del vehículo queda bajo el agua cuando flota. El juego calcula su constante de flotabilidad como 100 dividido por este valor. |
vecCentreOfMassOffset | metros | 0, 0, 0 | Mueve el centro de masa. y es de delante a atrás, z es arriba y abajo. Un centro más alto hace que el vehículo vuelque con más facilidad. |
vecInertiaMultiplier | multiplicador por eje | 1.0, 1.4, 1.6 | Inercia de rotación. Un valor más bajo en un eje hace que el vehículo gire con más facilidad alrededor de él. |
¿Qué campos definen la aceleración y la velocidad máxima?
La velocidad máxima sale de fInitialDriveMaxFlatVel y la aceleración de fInitialDriveForce. El juego convierte la velocidad de km/h a m/s al cargar y después le suma un 20% para obtener la velocidad que usa para las marchas. Por eso los vehículos van un poco más rápido que el número del archivo.
| Campo | Unidad | Sultan | Qué hace |
|---|---|---|---|
fInitialDriveMaxFlatVel | km/h | 145 | Referencia de velocidad máxima en llano. Las marchas usan este valor multiplicado por 1.2. |
fInitialDriveForce | escala | 0.26 | Fuerza motriz del motor. Aumenta la aceleración. |
nInitialDriveGears | cantidad | 5 | Número de marchas hacia delante. Todo lo que pase de 10 se recorta a 10. |
fDriveInertia | escala | 1.0 | Con qué rapidez suben y bajan las revoluciones del motor. |
fClutchChangeRateScaleUpShift, ...DownShift | escala | 1.8 | Con qué rapidez vuelve a acoplarse el embrague tras un cambio. Cuanto más alto, más rápido el cambio. |
fDriveBiasFront | 0 a 1 | 0.4 | Parte de la tracción que va a las ruedas delanteras. Por debajo de 0.1 el juego lo trata como tracción trasera pura, por encima de 0.9 como tracción delantera pura, y todo lo que queda en medio es tracción total. |
¿Cómo funcionan los campos de frenos y dirección?
| Campo | Unidad | Sultan | Qué hace |
|---|---|---|---|
fBrakeForce | escala | 0.4 | Fuerza de frenado general. |
fBrakeBiasFront | 0 a 1 | 0.65 | Parte del frenado que va al eje delantero. El trasero recibe el resto. |
fHandBrakeForce | escala | 0.7 | Fuerza del freno de mano. |
fSteeringLock | grados | 35 | Ángulo máximo de giro de las ruedas. Se convierte a radianes al cargar. |
¿Qué es la curva de tracción?
La curva de tracción es el modelo de agarre de los neumáticos. El agarre es máximo con un ángulo de deslizamiento pequeño (fTractionCurveMax) y cae hacia fTractionCurveMin a medida que el neumático desliza. Max debe ser mayor que Min y estar por encima de cero, o el cargador avisa de una curva no válida.
| Campo | Unidad | Sultan | Qué hace |
|---|---|---|---|
fTractionCurveMax | coeficiente de agarre | 2.35 | Agarre máximo, antes de que el neumático empiece a deslizar. |
fTractionCurveMin | coeficiente de agarre | 1.95 | Agarre cuando el neumático ya está deslizando. |
fTractionCurveLateral | grados | 22.5 | Rango de ángulo de deslizamiento de la curva. Un ángulo mayor hace que el agarre caiga más poco a poco, así que los derrapes perdonan más. |
fTractionSpringDeltaMax | límite | 0.15 | Límite que usa el muelle lateral del modelo de neumático. |
fLowSpeedTractionLossMult | multiplicador | 1.4 | Pérdida de agarre extra al arrancar desde parado. 0 desactiva el efecto; los valores altos hacen que las ruedas patinen más en la salida. |
fCamberStiffnesss | multiplicador | 0 | Fuerza lateral al inclinarse; solo hace algo por encima de 0 y lo usan sobre todo las motos. La etiqueta se escribe de verdad con tres s. |
fTractionBiasFront | 0 a 1 | 0.485 | Parte del agarre que va al eje delantero. Los valores bajos hacen que el tren delantero deslice primero (subviraje). |
fTractionLossMult | multiplicador | 1.0 | Cuánto agarre quita, cuánta resistencia añade y cuánta velocidad máxima recorta la superficie bajo las ruedas (hierba, arena, barro). 0 ignora la superficie. |
El flag de handling HF_HAS_RALLY_TYRES (0x8) invierte la curva: el agarre sube hacia Max a medida que el neumático desliza en lugar de bajar.
¿Qué hacen los campos de suspensión?
| Campo | Sultan | Qué hace |
|---|---|---|
fSuspensionForce | 2.8 | Rigidez del muelle. |
fSuspensionCompDamp, fSuspensionReboundDamp | 1.2, 2.1 | Amortiguación mientras el muelle se comprime y mientras se extiende. Ambos se multiplican por 0.1 al cargar. Con valores bajos el vehículo rebota, con valores altos se siente asentado. |
fSuspensionUpperLimit, fSuspensionLowerLimit | 0.15, -0.14 | Cuánto puede subir y bajar la rueda desde la posición de reposo, en metros. |
fSuspensionRaise | 0 | Sube o baja la carrocería respecto a las ruedas, en metros. |
fSuspensionBiasFront | 0.5 | Parte de la fuerza del muelle que va al eje delantero (0 a 1). |
fAntiRollBarForce, fAntiRollBarBiasFront | 0.3, 0.53 | Fuerza de la barra estabilizadora y su reparto delantero. Con más fuerza, la carrocería balancea menos en las curvas. |
fRollCentreHeightFront, fRollCentreHeightRear | 0.24, 0.25 | Alturas del centro de balanceo en metros, que se usan para la transferencia de peso en las curvas. |
Si las ruedas de un coche rebajado atraviesan los pasos de rueda, suele ser que tiene demasiado recorrido superior para el hueco que hay: reduce fSuspensionUpperLimit y sube la amortiguación antes de tocar la fuerza del muelle.
¿Qué son los campos de daño y los campos varios?
fCollisionDamageMult,fWeaponDamageMult,fEngineDamageMult: multiplicadores del daño por choques, por armas y al motor.fDeformationDamageMult: cuánto se deforma visiblemente la carrocería.fPetrolTankVolume,fOilVolume: volumen del depósito y del aceite.fSeatOffsetDistX/Y/Z: desplazamientos de la posición del asiento.nMonetaryValue: valor base del vehículo, hasta 1000000.AIHandling: nombre del perfil de conducción de la IA, por ejemploAVERAGE. Solo afecta a los conductores controlados por el ordenador.fDownforceModifier(0 a 100),fRocketBoostCapacityyfBoostMaxSpeed: campos opcionales más recientes para la carga aerodinámica y el impulso de cohete.
¿Cómo funcionan strModelFlags y strHandlingFlags?
Los tres campos de flags son máscaras de bits en hexadecimal escritas sin el prefijo 0x. Para construir una, suma los valores hexadecimales de los flags que quieres. El 440010 del Sultan son tres flags:
MF_ABS_STD 0x00000010
MF_AXLE_F_MCPHERSON 0x00040000
MF_AXLE_R_MCPHERSON 0x00400000
----------
strModelFlags 0x00440010 -> <strModelFlags>440010</strModelFlags>
| Campo | Flag | Hex | Efecto |
|---|---|---|---|
strModelFlags | MF_IS_VAN | 0x1 | Furgoneta. |
MF_ABS_STD | 0x10 | ABS de serie. | |
MF_NO_DOORS | 0x100 | El vehículo no tiene puertas. | |
MF_NO_WHEEL_BURST | 0x2000000 | Los neumáticos no pueden reventar. | |
MF_IS_RC | 0x10000000 | Coche teledirigido. | |
strHandlingFlags | HF_HAS_RALLY_TYRES | 0x8 | Invierte la curva de tracción. |
HF_NO_HANDBRAKE | 0x10 | Sin freno de mano. | |
HF_STEER_REARWHEELS | 0x20 | Gira con las ruedas traseras. | |
HF_NO_REVERSE | 0x200 | No puede ir marcha atrás. | |
HF_CVT | 0x1000 | Transmisión variable continua. | |
HF_OFFROAD_ABILITIES | 0x100000 | Gravedad extra para el agarre fuera de carretera. | |
HF_ARMOURED | 0x8000000 | A prueba de balas. | |
strDamageFlags | DF_DRIVER_SIDE_FRONT_DOOR | 0x1 | Flag de daño de puerta para la puerta del conductor. |
DF_BONNET, DF_BOOT | 0x10, 0x20 | Flags de daño de puerta para el capó y el maletero. |
¿Qué son los bloques SubHandlingData?
SubHandlingData contiene hasta cuatro bloques extra, cada uno para un tipo de vehículo. Añade el bloque que corresponde al vehículo y deja los demás huecos como <Item type="NULL" />. El juego ignora un bloque del tipo equivocado.
| Tipo de bloque | Para | Ejemplos de campos |
|---|---|---|
CCarHandlingData | Coches | fToeFront, fCamberFront, fCastor, fEngineResistance, strAdvancedFlags |
CBikeHandlingData | Motos y bicicletas | fMaxBankAngle, fWheelieBalancePoint, fInAirSteerMult, fJumpForce |
CFlyingHandlingData | Aviones y helicópteros | fThrust, fYawMult, fRollMult, fPitchMult, fFormLiftMult |
CBoatHandlingData | Barcos | fBoxFrontMult, fAquaplaneForce, fRudderForce |
CSpecialFlightHandlingData | Modos de levitación y de vuelo en vehículos terrestres | mode, fMaxThrust, vecAngularDamping, strFlags |
CSubmarineHandlingData, CTrailerHandlingData, CSeaPlaneHandlingData, CVehicleWeaponHandlingData | Submarinos, remolques, hidroaviones, vehículos armados | Velocidad de inmersión, límites de enganche, flotadores, límites de la torreta |
El handling de vuelo de los hoverboards de Nilo3D está hecho así, en el archivo de handling y sin ningún script. En el bloque de moto, los ángulos de inclinación y de equilibrio se escriben en grados y se convierten a radianes al cargar.
Los demás archivos que necesita una tabla están en cómo funciona un hoverboard FiveM sin script.
¿Cómo pruebo los cambios de handling?
Cambia un valor cada vez, reinicia el resource y conduce por el mismo tramo de carretera antes de cambiar el siguiente. Guarda una copia de la última versión que iba bien. La entrada original de un vehículo parecido es la mejor referencia para saber si un valor está en un rango normal: el handling.meta del propio juego tiene una entrada para cada vehículo original.
El handling solo tiene efecto cuando la entrada está bien enlazada: handlingName aquí, handlingId en vehicles.meta, y una línea HANDLING_FILE en el manifest, como se muestra en cómo añadir un vehículo add-on a FiveM. Si el vehículo no reacciona a ningún cambio, consulta la sección de handling de la guía de solución de problemas.
Preguntas frecuentes
- ¿Cómo aumento la velocidad máxima en handling.meta?
- Sube fInitialDriveMaxFlatVel, que está en km/h. El juego usa ese valor multiplicado por 1.2 para las marchas. Si el vehículo deja de acelerar antes de llegar, sube fInitialDriveForce o baja fInitialDragCoeff.
- ¿En qué unidad está fInitialDriveMaxFlatVel?
- En kilómetros por hora. Al cargar, el juego lo multiplica por 1000/3600 para obtener metros por segundo.
- ¿Cómo hago que un coche tenga tracción total?
- Pon fDriveBiasFront entre 0.1 y 0.9. 0.5 reparte la tracción por igual. Por debajo de 0.1 el juego trata el coche como tracción trasera y por encima de 0.9 como tracción delantera.
- ¿Por qué mi handling.meta no cambia nada?
- O el handlingName no coincide con el handlingId de vehicles.meta, o el archivo no se carga con una línea data_file HANDLING_FILE, u otro resource define el mismo handlingName. Dale a cada vehículo add-on un nombre de handling único.
- ¿Cómo escribo los flags de handling?
- Suma los valores hexadecimales de los flags que quieres y escribe la suma sin 0x. Por ejemplo, 0x10 + 0x40000 + 0x400000 se escribe 440010.
Fuentes
Productos de esta guía
Todas las guías
- Cómo instalar un resource FiveM de Cfx.re Escrow (Granted Assets)
- Cómo añadir un vehículo custom a un servidor ESX, QBCore o QBox
- ¿Qué son los LODs en los vehículos de FiveM?
- Cómo añadir un vehículo add-on a un servidor FiveM
- vehicles.meta explicado, campo por campo
- carvariations.meta y carcols.meta explicados
- vehiclelayouts.meta explicado: asientos, puntos de entrada y animaciones
- Referencia de data_file de fxmanifest para vehículos
- Archivos de modelo del vehículo (yft, _hi.yft, ytd) y el aviso de assets sobredimensionados
- Solución de problemas de vehículos add-on en FiveM: causas y soluciones
- Cómo arreglar "You lack the required entitlement" en un servidor FiveM
- Cómo convertir un mod de coche de un jugador de GTA 5 en un add-on de FiveM
- Cómo funciona un hoverboard de FiveM sin script
- Cómo hacer un vehículo de FiveM en Blender con Sollumz 2.9
- Cómo optimizar un vehículo de FiveM: polígonos, LOD y presupuesto de texturas
- Cómo configurar la colisión de un vehículo en Sollumz
- Comprar vehículos FiveM: qué revisar antes de pagar
- Packs de coches FiveM vs vehículos sueltos
- Coches de marcas reales en FiveM: ¿se permiten?
- CodeWalker vs Sollumz: ¿qué herramienta usar para vehículos de FiveM?
