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:
<!-- vehicles.meta -->
<Item>
<modelName>mycar</modelName>
<handlingId>MYCAR</handlingId>
...
</Item><!-- 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:
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:
<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:
- Reinicie o recurso (
restart mycar), ou o servidor inteiro se um restart do recurso não parece se aplicar. - Delete o carro e spawnei um novo. Um carro já spawned mantém seus valores antigos.
- 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.
- 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:
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 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, ohandlingNamee ohandlingId, e spawnei um novo carro. - O recurso não inicia. O caminho em
filesestá errado, ou o XML tem um erro como uma tag de fechamento faltando. Veja couldn't start resource. - O carro vira ou gira.
fInitialDriveForceoufTractionCurveMaxé muito alto para a massa. Volte um passo. - Um carro diferente mudou. Dois arquivos usam o mesmo
handlingName. Renomeie o seu e ohandlingIdcorrespondente.
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 →