handling.meta explicado: campos, unidades e flags
O handling.meta define como um veículo anda no GTA V. Cada entrada traz massa, força de tração, marchas, velocidade máxima, freios, direção, aderência dos pneus, suspensão e multiplicadores de dano, além de flags em hexadecimal e blocos opcionais de sub-handling para carros, motos, barcos e aeronaves. Um veículo usa a entrada cujo handlingName é igual ao seu handlingId no vehicles.meta.
O que é o handling.meta?
O handling.meta é uma lista em XML de itens CHandlingData. Cada item é um perfil de física, identificado por handlingName. No FiveM ele é carregado com data_file 'HANDLING_FILE'. A entrada abaixo é o Sultan original com o nome trocado; os valores das tabelas desta página se referem a ela.
<?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>
Todo campo tem um mínimo e um máximo no schema de dados do jogo. Para a maioria dos floats a faixa é de 0 a 1000, o fMass vai até 100000, e a quantidade de marchas é limitada a 10. Os valores das tabelas são o que o jogo faz com o número depois de carregar, tirados do código de handling.
O que fazem fMass, arrasto e centro de massa?
| Campo | Unidade | Sultan | O que faz |
|---|---|---|---|
fMass | kg | 1400 | Massa do veículo. Usada em todo cálculo de força e de colisão. |
fInitialDragCoeff | multiplicado por 0.0001 ao carregar | 8.0 | Arrasto do ar. Valores mais altos seguram mais o veículo em velocidade. |
fPercentSubmerged | % | 85 | Quanto do veículo fica debaixo da água ao flutuar. O jogo calcula a constante de flutuação como 100 dividido por esse valor. |
vecCentreOfMassOffset | metros | 0, 0, 0 | Desloca o centro de massa. y é de frente para trás, z é para cima e para baixo. Um centro mais alto faz o veículo capotar com mais facilidade. |
vecInertiaMultiplier | multiplicador por eixo | 1.0, 1.4, 1.6 | Inércia de rotação. Um valor menor em um eixo faz o veículo girar com mais facilidade em torno dele. |
Quais campos definem aceleração e velocidade máxima?
A velocidade máxima vem de fInitialDriveMaxFlatVel e a aceleração de fInitialDriveForce. O jogo converte a velocidade de km/h para m/s ao carregar e depois soma 20% para chegar à velocidade usada no câmbio, e é por isso que os veículos andam um pouco mais rápido que o número do arquivo.
| Campo | Unidade | Sultan | O que faz |
|---|---|---|---|
fInitialDriveMaxFlatVel | km/h | 145 | Referência de velocidade máxima em terreno plano. O câmbio usa esse valor vezes 1.2. |
fInitialDriveForce | escala | 0.26 | Força de tração do motor. Aumenta a aceleração. |
nInitialDriveGears | quantidade | 5 | Número de marchas para frente. Qualquer coisa acima de 10 é cortada para 10. |
fDriveInertia | escala | 1.0 | A rapidez com que o giro do motor sobe e cai. |
fClutchChangeRateScaleUpShift, ...DownShift | escala | 1.8 | A rapidez com que a embreagem volta a acoplar depois de uma troca. Quanto mais alto, mais rápida a troca. |
fDriveBiasFront | 0 a 1 | 0.4 | Parcela da tração nas rodas dianteiras. Abaixo de 0.1 o jogo trata como tração traseira pura, acima de 0.9 como tração dianteira pura, e qualquer coisa no meio é tração nas quatro rodas. |
Como funcionam os campos de freio e direção?
| Campo | Unidade | Sultan | O que faz |
|---|---|---|---|
fBrakeForce | escala | 0.4 | Força geral de frenagem. |
fBrakeBiasFront | 0 a 1 | 0.65 | Parcela da frenagem no eixo dianteiro. O traseiro fica com o resto. |
fHandBrakeForce | escala | 0.7 | Força do freio de mão. |
fSteeringLock | graus | 35 | Ângulo máximo de esterço das rodas. Convertido para radianos ao carregar. |
O que é a curva de tração?
A curva de tração é o modelo de aderência dos pneus. A aderência é máxima em um ângulo de deslizamento pequeno (fTractionCurveMax) e cai em direção a fTractionCurveMin conforme o pneu desliza. Max tem que ser maior que Min e estar acima de zero, senão o carregador avisa de uma curva inválida.
| Campo | Unidade | Sultan | O que faz |
|---|---|---|---|
fTractionCurveMax | coeficiente de aderência | 2.35 | Aderência de pico, antes de o pneu começar a deslizar. |
fTractionCurveMin | coeficiente de aderência | 1.95 | Aderência depois que o pneu está deslizando. |
fTractionCurveLateral | graus | 22.5 | Faixa de ângulo de deslizamento da curva. Um ângulo maior faz a aderência cair de forma mais gradual, então as derrapagens perdoam mais. |
fTractionSpringDeltaMax | limite | 0.15 | Limite usado pela mola lateral do modelo de pneu. |
fLowSpeedTractionLossMult | multiplicador | 1.4 | Perda extra de aderência ao arrancar parado. 0 desliga o efeito; valores mais altos dão mais patinação na largada. |
fCamberStiffnesss | multiplicador | 0 | Força lateral vinda da inclinação; só faz algo acima de 0 e é usada principalmente por motos. A tag tem mesmo três s. |
fTractionBiasFront | 0 a 1 | 0.485 | Parcela da aderência no eixo dianteiro. Valores menores fazem a frente deslizar primeiro (subesterço). |
fTractionLossMult | multiplicador | 1.0 | O quanto a superfície sob as rodas (grama, areia, lama) tira aderência, soma arrasto e corta a velocidade máxima. 0 ignora a superfície. |
A flag de handling HF_HAS_RALLY_TYRES (0x8) inverte a curva: a aderência sobe em direção a Max conforme o pneu desliza, em vez de cair.
O que fazem os campos de suspensão?
| Campo | Sultan | O que faz |
|---|---|---|
fSuspensionForce | 2.8 | Rigidez da mola. |
fSuspensionCompDamp, fSuspensionReboundDamp | 1.2, 2.1 | Amortecimento enquanto a mola comprime e enquanto ela estende. Os dois são multiplicados por 0.1 ao carregar. Valores baixos quicam, valores altos deixam o carro assentado. |
fSuspensionUpperLimit, fSuspensionLowerLimit | 0.15, -0.14 | O quanto a roda pode se deslocar para cima e para baixo a partir do repouso, em metros. |
fSuspensionRaise | 0 | Levanta ou abaixa a carroceria em relação às rodas, em metros. |
fSuspensionBiasFront | 0.5 | Parcela da força de mola no eixo dianteiro (0 a 1). |
fAntiRollBarForce, fAntiRollBarBiasFront | 0.3, 0.53 | Força da barra estabilizadora e sua parcela dianteira. Mais força dá menos rolagem da carroceria nas curvas. |
fRollCentreHeightFront, fRollCentreHeightRear | 0.24, 0.25 | Alturas do centro de rolagem em metros, usadas na transferência de peso nas curvas. |
Em carro rebaixado com as rodas atravessando os para-lamas, o curso para cima normalmente é grande demais para o espaço da caixa de roda: reduza o fSuspensionUpperLimit e aumente o amortecimento antes de mexer na força da mola.
Quais são os campos de dano e os diversos?
fCollisionDamageMult,fWeaponDamageMult,fEngineDamageMult: multiplicadores do dano de batidas, de armas e ao motor.fDeformationDamageMult: o quanto a carroceria deforma visivelmente.fPetrolTankVolume,fOilVolume: volume do tanque e do óleo.fSeatOffsetDistX/Y/Z: deslocamentos da posição do assento.nMonetaryValue: valor base do veículo, até 1000000.AIHandling: nome do perfil de direção da IA, por exemploAVERAGE. Só afeta motoristas controlados pelo computador.fDownforceModifier(0 a 100),fRocketBoostCapacityefBoostMaxSpeed: campos opcionais mais novos para downforce e rocket boost.
Como funcionam strModelFlags e strHandlingFlags?
Os três campos de flags são bitmasks hexadecimais escritas sem o prefixo 0x. Para montar uma, some os valores hex das flags que você quer. O 440010 do Sultan são três flags:
MF_ABS_STD 0x00000010
MF_AXLE_F_MCPHERSON 0x00040000
MF_AXLE_R_MCPHERSON 0x00400000
----------
strModelFlags 0x00440010 -> <strModelFlags>440010</strModelFlags>
| Campo | Flag | Hex | Efeito |
|---|---|---|---|
strModelFlags | MF_IS_VAN | 0x1 | Van. |
MF_ABS_STD | 0x10 | ABS de série. | |
MF_NO_DOORS | 0x100 | O veículo não tem portas. | |
MF_NO_WHEEL_BURST | 0x2000000 | Os pneus não estouram. | |
MF_IS_RC | 0x10000000 | Carro de controle remoto. | |
strHandlingFlags | HF_HAS_RALLY_TYRES | 0x8 | Inverte a curva de tração. |
HF_NO_HANDBRAKE | 0x10 | Sem freio de mão. | |
HF_STEER_REARWHEELS | 0x20 | Esterça com as rodas traseiras. | |
HF_NO_REVERSE | 0x200 | Não dá ré. | |
HF_CVT | 0x1000 | Câmbio continuamente variável. | |
HF_OFFROAD_ABILITIES | 0x100000 | Gravidade extra para aderência off-road. | |
HF_ARMOURED | 0x8000000 | À prova de balas. | |
strDamageFlags | DF_DRIVER_SIDE_FRONT_DOOR | 0x1 | Flag de dano de porta para a porta do motorista. |
DF_BONNET, DF_BOOT | 0x10, 0x20 | Flags de dano de porta para capô e porta-malas. |
O que são os blocos SubHandlingData?
SubHandlingData guarda até quatro blocos extras, cada um para um tipo de veículo. Adicione o bloco que corresponde ao veículo e deixe os outros slots como <Item type="NULL" />. O jogo ignora um bloco do tipo errado.
| Tipo do bloco | Para | Exemplos de campos |
|---|---|---|
CCarHandlingData | Carros | fToeFront, fCamberFront, fCastor, fEngineResistance, strAdvancedFlags |
CBikeHandlingData | Motos e bicicletas | fMaxBankAngle, fWheelieBalancePoint, fInAirSteerMult, fJumpForce |
CFlyingHandlingData | Aviões e helicópteros | fThrust, fYawMult, fRollMult, fPitchMult, fFormLiftMult |
CBoatHandlingData | Barcos | fBoxFrontMult, fAquaplaneForce, fRudderForce |
CSpecialFlightHandlingData | Modos de flutuação e voo em veículos terrestres | mode, fMaxThrust, vecAngularDamping, strFlags |
CSubmarineHandlingData, CTrailerHandlingData, CSeaPlaneHandlingData, CVehicleWeaponHandlingData | Submarinos, trailers, hidroaviões, veículos armados | Velocidade de mergulho, limites de engate, flutuadores, limites de torreta |
O handling de voo dos hoverboards da Nilo3D é feito assim, no arquivo de handling, sem script. No bloco de moto, os ângulos de inclinação e de equilíbrio são escritos em graus e convertidos para radianos ao carregar.
Os outros arquivos de que uma prancha precisa estão em como um hoverboard FiveM funciona sem script.
Como testar mudanças de handling?
Mude um valor por vez, reinicie o resource e dirija o mesmo trecho de rua antes de mudar o próximo. Guarde uma cópia da última versão que ficou boa. A entrada original de um veículo parecido é a melhor referência para saber se um valor está em uma faixa normal: o handling.meta do próprio jogo tem uma entrada para cada veículo original.
O handling só tem efeito quando a entrada está ligada do jeito certo: handlingName aqui, handlingId no vehicles.meta, e uma linha HANDLING_FILE no manifest, como mostrado em como adicionar um veículo add-on ao FiveM. Se o veículo não reage em nada às suas edições, veja a seção de handling do guia de solução de problemas.
Perguntas frequentes
- Como aumentar a velocidade máxima no handling.meta?
- Aumente o fInitialDriveMaxFlatVel, que está em km/h. O jogo usa esse valor vezes 1.2 no câmbio. Se o veículo para de acelerar antes de chegar lá, aumente o fInitialDriveForce ou diminua o fInitialDragCoeff.
- Em que unidade está o fInitialDriveMaxFlatVel?
- Quilômetros por hora. Ao carregar, o jogo multiplica o valor por 1000/3600 para chegar a metros por segundo.
- Como deixar um carro com tração nas quatro rodas?
- Coloque o fDriveBiasFront entre 0.1 e 0.9. 0.5 divide a tração por igual. Abaixo de 0.1 o jogo trata o carro como tração traseira e acima de 0.9 como tração dianteira.
- Por que meu handling.meta não muda nada?
- Ou o handlingName não bate com o handlingId do vehicles.meta, ou o arquivo não é carregado com uma linha data_file HANDLING_FILE, ou outro resource define o mesmo handlingName. Dê a cada veículo add-on um nome de handling único.
- Como escrever as flags de handling?
- Some os valores hexadecimais das flags que você quer e escreva a soma sem o 0x. Por exemplo, 0x10 + 0x40000 + 0x400000 se escreve 440010.
Fontes
Produtos deste guia
Todos os guias
- Como instalar um resource FiveM do Cfx.re Escrow (Granted Assets)
- Como adicionar um veículo custom num servidor ESX, QBCore ou QBox
- O que são LODs em veículos FiveM?
- Como adicionar um veículo add-on a um servidor FiveM
- vehicles.meta explicado, campo por campo
- carvariations.meta e carcols.meta explicados
- vehiclelayouts.meta explicado: assentos, pontos de entrada e animações
- Referência de data_file do fxmanifest para veículos
- Arquivos de modelo do veículo (yft, _hi.yft, ytd) e o aviso de asset grande demais
- Solução de problemas de veículo add-on no FiveM: causas e correções
- Como resolver "You lack the required entitlement" em um servidor FiveM
- Como converter um mod de carro single-player do GTA 5 em add-on de FiveM
- Como um hoverboard de FiveM funciona sem script
- Como fazer um veículo de FiveM no Blender com o Sollumz 2.9
- Como otimizar um veículo de FiveM: polígonos, LODs e orçamento de texturas
- Como configurar a colisão de veículo no Sollumz
- Comprar veículos FiveM: o que conferir antes de pagar
- Pack de carros FiveM vs veículos avulsos
- Carro de marca real no FiveM: pode ou não?
- CodeWalker vs Sollumz: qual ferramenta usar em veículos de FiveM?
