Dano de veículo FiveM: saúde do motor, saúde da carroceria e ajustes de handling
Como o dano de veículo funciona no FiveM: os intervalos de saúde do motor, carroceria e tanque de gasolina, GetVehicleEngineHealth, multiplicadores de dano de handling e como funcionam scripts de dano realista.
Sintomas típicos:
Cars lose their engine after a small bump, explode when someone lightly hits a wall, or never take damage at all.Dano no GTA é um punhado de valores de saúde por veículo, e alguns números de handling que escalam a rapidez com que caem. Este artigo dá os intervalos, os natives, os valores de handling e a ideia por trás de scripts de dano realista.
Os valores de saúde
Um veículo tem vários valores de saúde que você pode ler e escrever no cliente:
| Valor | Intervalo | Ler com |
|---|---|---|
| Saúde do motor | -4000 a 1000 | GetVehicleEngineHealth |
| Saúde da carroceria | 0 a 1000 | GetVehicleBodyHealth |
| Saúde do tanque de gasolina | 0 a 1000 | GetVehiclePetrolTankHealth |
Um carro novo está em 1000.0 em todos os três. O motor é o incomum porque vai abaixo de zero:
- Em
1000, o motor está saudável. - Conforme o valor cai, o carro fuma e perde potência.
- Em
0e abaixo, o motor está morto e o carro pode pegar fogo. O intervalo desce até-4000.
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
print('engine', GetVehicleEngineHealth(vehicle))
print('body', GetVehicleBodyHealth(vehicle))
print('tank', GetVehiclePetrolTankHealth(vehicle))O tanque de gasolina importa para incêndios. Quando a saúde do tanque cai, pode vazar, e um tanque que vaza pode pegar fogo. O motor e o tanque são separados, então um motor em 1000 ainda pode queimar se o tanque for atingido.
Definindo os valores
Para reparar ou danificar um veículo, escreva os valores de volta:
SetVehicleEngineHealth(vehicle, 1000.0)
SetVehicleBodyHealth(vehicle, 1000.0)
SetVehiclePetrolTankHealth(vehicle, 1000.0)Para corrigir um veículo completamente, incluindo a deformação visível e a sujeira, há natives separados:
SetVehicleFixed(vehicle)
SetVehicleDeformationFixed(vehicle)
SetVehicleDirtLevel(vehicle, 0.0)SetVehicleFixed redefine a saúde e repara o modelo. SetVehicleDeformationFixed remove amassados. Use ambos para uma reparação completa.
Para salvar o dano de um carro possuído, armazene os valores com as outras propriedades, veja propriedades do veículo. Se não fizer, cada carro sai da garagem totalmente reparado.
Dica: um veículo que para de uma vez e não inicia novamente geralmente tem uma saúde do motor abaixo de 0. Definir de volta a um valor como
400.0o traz de volta sem uma reparação completa, que é o que muitos scripts de mecânico fazem. Veja também o trabalho de mecânico.
Multiplicadores de handling
A rapidez com que os valores caem é decidida pelo handling do veículo. Três deles são os nós usuais:
| Valor de handling | Efeito |
|---|---|
fCollisionDamageMult |
O quanto uma colisão danifica a carroceria e o motor |
fDeformationDamageMult |
O quanto uma colisão deforma o modelo, os amassados visíveis |
fEngineDamageMult |
O quanto de dano o motor sofre |
Um valor de 1.0 é neutro, menor significa menos dano e maior significa mais. Em um handling.meta ficam assim:
<fCollisionDamageMult value="0.700000" />
<fDeformationDamageMult value="0.700000" />
<fEngineDamageMult value="1.500000" />Pequenas mudanças fazem um longo caminho, então mude por décimos. Para onde o arquivo vive e como aplicar a mudança, veja editando handling do veículo. Os mesmos valores podem ser alterados em tempo de execução com SetVehicleHandlingFloat, que afeta um veículo:
SetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fCollisionDamageMult', 0.7)Mudanças em tempo de execução se aplicam a aquele veículo enquanto existe. Reaplicar cada vez que spawna.
Scripts de dano realista
Scripts de dano não mudam o motor do jogo, usam os valores acima. O conceito é simples:
- Um loop lê a saúde do motor e carroceria do veículo que o jogador dirige.
- Quando os valores caem abaixo de limites definidos, o script aplica efeitos: menos potência com
SetVehicleEnginePowerMultiplier, um motor que para, um steering que puxa, um aviso na tela. - Ele mantém o motor de morrer completamente, por exemplo mantendo-o em um pequeno valor positivo, para que o carro manche em vez de queimar.
- Um mecânico ou um kit de reparo define os valores novamente.
O loop não precisa executar a cada frame. Uma verificação a cada alguns centena de milissegundos é suficiente e mais barata, veja como Wait funciona:
CreateThread(function()
while true do
local ped = PlayerPedId()
local vehicle = GetVehiclePedIsIn(ped, false)
if vehicle ~= 0 and GetPedInVehicleSeat(vehicle, -1) == ped then
if GetVehicleEngineHealth(vehicle) < 200.0 then
SetVehicleEngineHealth(vehicle, 200.0)
SetVehicleEngineOn(vehicle, false, true, true)
end
Wait(500)
else
Wait(1500)
end
end
end)Isso mantém o motor de queimar, e o desliga em vez disso. Trate como um ponto de partida: um script real adiciona uma forma de reiniciar, para que o jogador não fique preso.
Prevenindo explosões
Se você apenas quer menos mortes por fogo, as opções seguras mais simples são as acima: um multiplicador de dano mais baixo, e manter a saúde do motor e do tanque de cair a zero.
Há também natives que desabilitam partes do sistema de fogo e explosão para um veículo, como aqueles que impedem o motor de degradar. Use-os em um veículo específico, como um veículo de job, e leia a documentação nativa antes de depender deles. Não os aplique a cada veículo no servidor:
- Scripts como uma bomba de carro ou um heist dependem de veículos que podem explodir.
- Jogadores usam dano em roleplay: uma perseguição, uma cena de crash, uma parada policial.
- Um veículo que não pode ser destruído é uma ferramenta de griefing, e uma forma de evitar consequências.
Decida por caso de uso, e prefira os multiplicadores.
Dano após um restart ou um respawn
Se um carro é reparado toda vez que spawna, a causa é uma dessas:
- A garagem não salva saúde do motor e carroceria, então cada spawn começa em 1000. Salve os valores ao armazenar e aplique no spawn.
- Um script chama
SetVehicleFixedem cada spawn. - O carro é uma entidade fresca, e sua saúde sempre começa cheia. Apenas seus dados salvos carregam dano.
Lista de verificação
| Sintoma | Solução |
|---|---|
| Preciso da saúde do motor | GetVehicleEngineHealth, intervalo -4000 a 1000 |
| Carro morre com a menor batida | Abaixe fCollisionDamageMult e fEngineDamageMult no handling |
| Amassados muito visíveis | Abaixe fDeformationDamageMult |
| Carro queima após um pequeno impacto | Mantenha a saúde do tanque de gasolina, ou limite a queda do motor |
| Carro travado não inicia | Defina a saúde do motor acima de 0 |
| Reparo deixa amassados | Adicione SetVehicleDeformationFixed após SetVehicleFixed |
| Dano perdido após armazenar | Salve saúde do motor e carroceria com as outras propriedades |
Respostas rápidas
Qual é o intervalo de saúde do motor do veículo?
De -4000 a 1000. Um motor saudável está em 1000. Abaixo de 0 o motor está morto, e o carro pode queimar.
Como fazer carros sofrerem menos dano?
Abaixe os multiplicadores de dano no handling do veículo, como fCollisionDamageMult e fDeformationDamageMult, ou mantenha os valores de saúde completos de um script.
Posso impedir que veículos explodam?
Você pode reduzir mantendo os valores de saúde ou mudando o handling, mas tenha cuidado: uma configuração geral remove uma parte do jogo que outros scripts, como um heist ou uma bomba de carro, podem precisar.
Scripts sem esse problema
Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →
Car BombPlante, detecte e desarme bombas em veículos — com celular detonador e minigame de C4.Ver script →
Chameleon Paints82 pinturas camaleão que mudam de cor, num menu de um clique.Ver script →