Editar handling.meta em FiveM: velocidade, grip, freios e HANDLING_FILE

Edite um handling.meta de carro em FiveM: campos chave (fInitialDriveForce, fBrakeForce, fTractionCurveMax, fMass), HANDLING_FILE, correspondência de handlingName, testando e runtime.

Você quer um carro acelerar mais rápido, agarrar melhor ou frear mais duro, e os valores estão em handling.meta. Este guia mostra o que os campos chave fazem, como o arquivo é carregado, como é vinculado ao veículo e como testar suas mudanças sem adivinhar.

Como o handling é vinculado a um carro

Um carro tem uma entrada de handling, e o carro aponta para ele pelo nome:

xml
<!-- vehicles.meta -->
<Item>
  <modelName>mycar</modelName>
  <handlingId>MYCAR</handlingId>
  ...
</Item>
xml
<!-- handling.meta -->
<Item type="CHandlingData">
  <handlingName>MYCAR</handlingName>
  ...
</Item>

O handlingName em handling.meta deve ser o mesmo que o handlingId em vehicles.meta. Se diferem, o jogo não encontra a entrada e o carro usa um padrão. Se dois pacotes usam o mesmo handlingName, um deles ganha e o outro carro maneja errado, então mantenha nomes únicos.

Carregue o arquivo

O recurso deve declarar o arquivo em fxmanifest.lua:

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'

Sem a linha HANDLING_FILE, o arquivo não é usado e suas edições não fazem nada. O conjunto completo de arquivos para um carro addon está em how to add addon cars.

Os campos chave

O arquivo de handling tem muitos valores. Estes são os que você mudará mais:

xml
<fMass value="1500.000000" />
<fInitialDriveForce value="0.320000" />
<fInitialDriveMaxFlatVel value="160.000000" />
<fBrakeForce value="0.800000" />
<fTractionCurveMax value="2.400000" />
  • fMass: o peso do carro em quilogramas. Um carro pesado é mais difícil de empurrar e parar, e ganha colisões com carros mais leves.
  • fInitialDriveForce: aceleração. Um valor maior dá um empurrão mais duro da linha. Carros no jogo base geralmente ficam bem abaixo de 1.0, então uma mudança de alguns centésimos já é visível.
  • fInitialDriveMaxFlatVel: a velocidade máxima que o motor pode alcançar em terreno plano, em uma unidade próxima a km/h. A velocidade mostrada no jogo não corresponde exatamente, já que arrasto e câmbio também desempenham um papel.
  • fBrakeForce: força de frenagem. Aumente para distâncias de frenagem mais curtas; muito alto faz o carro travar ou virar o nariz para baixo.
  • fTractionCurveMax: o grip dos pneus em uma curva. Mais alto significa mais grip, até que o carro pareça colado à estrada.

Outros que você pode encontrar são fInitialDragCoeff (arrasto de ar), fTractionCurveMin (grip quando o carro desliza), fSteeringLock e fSuspensionForce. Mude uma coisa por vez para saber o que causou o resultado.

Dica: copie o arquivo original antes de começar, e mude valores em pequenos passos, cerca de 10 a 20 por cento. Algumas mudanças grandes de uma vez tornam o carro difícil de entender e difícil de desfazer.

Teste suas mudanças

Handling é lido quando um veículo é criado, então:

  1. Reinicie o recurso (restart mycar), ou o servidor inteiro se um restart do recurso não parece se aplicar.
  2. Delete o carro e spawnei um novo. Um carro já spawned mantém seus valores antigos.
  3. Dirija a mesma rota de teste cada vez: uma estrada reta para velocidade máxima e aceleração, uma longa curva para grip, uma parada súbita para freios.
  4. Mude um valor, teste, escreva o que mudou.

Se o carro ainda se comporta como antes, trabalhe através das causas: a linha data_file, a correspondência de handlingName, e se outro recurso também define o mesmo nome de handling.

Mude o handling em runtime

Para um valor que depende de uma situação, como um nitro boost, um carro de job ou um motor danificado, você pode mudar o handling de um veículo de um script cliente:

lua
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)
end

SetVehicleHandlingFloat muda o valor para aquele veículo, por quanto tempo existir. Não toca no arquivo, outros carros do mesmo modelo, ou o próximo carro que você spawnei. É a ferramenta certa para efeitos temporários, e a errada para afinação permanente: coloque-os em handling.meta para que cada carro do modelo os tenha.

Atenção: não execute a mudança em um loop cada frame. Defina uma vez quando a situação inicia, e defina o valor original de volta quando termina.

Substituir um carro do jogo base

Uma entrada de handling com o nome de um carro do jogo base, em um recurso, muda aquele carro para cada jogador e cada spawn, incluindo tráfego. Isto pode ser o que você quer para um pacote "realistic handling", mas teste-o, já que todos os carros daquele modelo mudam de uma vez.

Problemas comuns

  • Sem mudança em tudo. Verifique a linha HANDLING_FILE, o handlingName e o handlingId, e spawnei um novo carro.
  • O recurso não inicia. O caminho em files está errado, ou o XML tem um erro como uma tag de fechamento faltando. Veja couldn't start resource.
  • O carro vira ou gira. fInitialDriveForce ou fTractionCurveMax é muito alto para a massa. Volte um passo.
  • Um carro diferente mudou. Dois arquivos usam o mesmo handlingName. Renomeie o seu e o handlingId correspondente.

Checklist

Sintoma Solução
Edições não têm efeito Adicione data_file 'HANDLING_FILE' e respawne o carro
Carro usa handling padrão Faça handlingName igual a handlingId em vehicles.meta
Precisa de mais aceleração Aumente fInitialDriveForce em pequenos passos
Precisa de velocidade máxima mais alta Aumente fInitialDriveMaxFlatVel
Muito pouco grip Aumente fTractionCurveMax; muito parece não natural
Efeito temporário SetVehicleHandlingFloat no cliente, uma vez, e restaure depois

Respostas rápidas

Por que minhas mudanças de handling.meta não fazem nada?

Geralmente o arquivo não é carregado com data_file 'HANDLING_FILE', ou o handlingName não corresponde ao handlingId em vehicles.meta. Também respawne o carro: um veículo que já existe mantém seus valores antigos.

Como faço um carro mais rápido?

Aumente fInitialDriveMaxFlatVel para velocidade máxima e fInitialDriveForce para aceleração, em pequenos passos. Grandes saltos tornam o carro indrivável ou irrealista.

Posso mudar o handling em um script enquanto o servidor roda?

Sim, com SetVehicleHandlingFloat no cliente. Muda apenas um veículo e é perdido quando o veículo é deletado, então não substitui o arquivo.

Scripts sem esse problema

Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →Chameleon Paints82 pinturas camaleão que mudam de cor, num menu de um clique.Ver script →Car BombPlante, detecte e desarme bombas em veículos — com celular detonador e minigame de C4.Ver script →

Continue lendo