Danno dei veicoli FiveM: salute del motore, salute della carrozzeria e regolazioni della gestione
Come funziona il danno dei veicoli in FiveM: i range di salute del motore, carrozzeria e serbatoio di benzina, GetVehicleEngineHealth, moltiplicatori di danno della gestione e come funzionano gli script di danno realistico.
Sintomi tipici:
Cars lose their engine after a small bump, explode when someone lightly hits a wall, or never take damage at all.Il danno in GTA è una manciata di valori di salute per veicolo, e alcuni numeri di gestione che ridimensionano la velocità con cui cadono. Questo articolo fornisce i range, i nativi, i valori di gestione e l'idea dietro gli script di danno realistico.
I valori di salute
Un veicolo ha diversi valori di salute che puoi leggere e scrivere sul client:
| Valore | Intervallo | Leggi con |
|---|---|---|
| Salute del motore | -4000 a 1000 | GetVehicleEngineHealth |
| Salute della carrozzeria | 0 a 1000 | GetVehicleBodyHealth |
| Salute del serbatoio di benzina | 0 a 1000 | GetVehiclePetrolTankHealth |
Una nuova auto è a 1000.0 su tutti e tre. Il motore è quello insolito perché va sotto zero:
- A
1000, il motore è sano. - Man mano che il valore cala, l'auto fuma e perde potenza.
- A
0e sotto, il motore è morto e l'auto può prendere fuoco. L'intervallo scende fino a-4000.
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
print('engine', GetVehicleEngineHealth(vehicle))
print('body', GetVehicleBodyHealth(vehicle))
print('tank', GetVehiclePetrolTankHealth(vehicle))Il serbatoio di benzina conta per gli incendi. Quando la salute del serbatoio cala, può perdere, e un serbatoio che perde può accendersi. Il motore e il serbatoio sono separati, quindi un motore a 1000 può comunque prendere fuoco se il serbatoio viene colpito.
Impostazione dei valori
Per riparare o danneggiare un veicolo, scrivi i valori indietro:
SetVehicleEngineHealth(vehicle, 1000.0)
SetVehicleBodyHealth(vehicle, 1000.0)
SetVehiclePetrolTankHealth(vehicle, 1000.0)Per riparare completamente un veicolo, inclusa la deformazione visibile e lo sporco, ci sono nativi separati:
SetVehicleFixed(vehicle)
SetVehicleDeformationFixed(vehicle)
SetVehicleDirtLevel(vehicle, 0.0)SetVehicleFixed reimposta la salute e ripara il modello. SetVehicleDeformationFixed rimuove i danni. Usa entrambi per una riparazione completa.
Per salvare il danno di un'auto di proprietà, archivia i valori con le altre proprietà, vedi proprietà del veicolo. Se non lo fai, ogni auto esce dal garage completamente riparata.
Suggerimento: un veicolo che si ferma subito e non si riavvia è spesso una salute del motore sotto 0. Impostandolo di nuovo a un valore come
400.0lo riporta in vita senza una riparazione completa, che è quello che molti script di meccanico fanno. Vedi anche il lavoro di meccanico.
Moltiplicatori di gestione
La velocità con cui i valori calano è decisa dalla gestione del veicolo. Tre di loro sono le solite manopole:
| Valore di gestione | Effetto |
|---|---|
fCollisionDamageMult |
Quanto una collisione danneggia la carrozzeria e il motore |
fDeformationDamageMult |
Quanto una collisione deforma il modello, i danni visibili |
fEngineDamageMult |
Quanto danno subisce il motore |
Un valore di 1.0 è neutrale, più basso significa meno danno e più alto significa più danno. In un handling.meta sono così:
<fCollisionDamageMult value="0.700000" />
<fDeformationDamageMult value="0.700000" />
<fEngineDamageMult value="1.500000" />Piccoli cambiamenti vanno molto lontano, quindi spostati per decimi. Per dove vive il file e come applicare il cambiamento, vedi modifica della gestione del veicolo. Gli stessi valori possono essere modificati al runtime con SetVehicleHandlingFloat, che influisce su un veicolo:
SetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fCollisionDamageMult', 0.7)I cambiamenti al runtime si applicano a quel veicolo mentre esiste. Riapplicali ogni volta che viene generato.
Script di danno realistico
Gli script di danno non cambiano il motore del gioco, usano i valori sopra. Il concetto è semplice:
- Un ciclo legge la salute del motore e della carrozzeria del veicolo che il giocatore guida.
- Quando i valori cadono al di sotto di soglie impostate, lo script applica effetti: meno potenza con
SetVehicleEnginePowerMultiplier, un motore che si ferma, uno sterzo che tira, un avviso sullo schermo. - Mantiene il motore dal morire completamente, ad esempio tenendolo a un piccolo valore positivo, in modo che l'auto zoppica invece di bruciare.
- Un meccanico o un kit di riparazione imposta i valori di nuovo su.
Il ciclo non deve essere eseguito ogni frame. Un controllo ogni pochi centesimi di secondo è sufficiente e più economico, vedi come funziona Wait:
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)Questo mantiene il motore dal bruciare e lo spegne invece. Trattalo come un punto di partenza: uno script reale aggiunge un modo per riavviarlo, in modo che il giocatore non rimanga bloccato.
Prevenire le esplosioni
Se vuoi solo meno morti per fuoco, le opzioni sicure più semplici sono quelle sopra: un moltiplicatore di danno più basso, e mantenere il motore e la salute del serbatoio dal cadere a zero.
Ci sono anche nativi che disabilitano parti del sistema di fuoco e esplosione per un veicolo, come quelli che fermano il motore dal degradarsi. Usali su un veicolo specifico, come un veicolo di lavoro, e leggi la documentazione del nativo prima di fare affidamento su di essi. Non applicarli a tutti i veicoli sul server:
- Script come una bomba auto o un colpo dipendono da veicoli che possono esplodere.
- I giocatori usano il danno nel roleplay: un inseguimento, una scena di incidente, una fermata della polizia.
- Un veicolo che non può essere distrutto è uno strumento di griefing e un modo per evitare le conseguenze.
Decidi per caso di uso, e preferisci i moltiplicatori.
Danno dopo un riavvio o una rigenrazione
Se un'auto viene riparata ogni volta che viene generata, la causa è una di queste:
- Il garage non salva la salute del motore e della carrozzeria, quindi ogni spawn inizia a 1000. Salva i valori al negozio e applicali allo spawn.
- Uno script chiama
SetVehicleFixedad ogni spawn. - L'auto è un'entità nuova, e la sua salute inizia sempre al massimo. Solo i tuoi dati salvati portano il danno oltre.
Checklist
| Sintomo | Soluzione |
|---|---|
| Ho bisogno della salute del motore | GetVehicleEngineHealth, intervallo -4000 a 1000 |
| L'auto muore al più leggero urto | Abbassa fCollisionDamageMult e fEngineDamageMult nella gestione |
| I danni troppo visibili | Abbassa fDeformationDamageMult |
| L'auto prende fuoco dopo un piccolo colpo | Mantieni la salute del serbatoio di benzina, o limita la caduta del motore |
| L'auto ferma non si riavvia | Imposta la salute del motore sopra 0 |
| La riparazione lascia danni | Aggiungi SetVehicleDeformationFixed dopo SetVehicleFixed |
| Il danno andato dopo l'archiviazione | Salva la salute del motore e della carrozzeria con le altre proprietà |
Risposte rapide
Qual è l'intervallo di salute del motore del veicolo?
Da -4000 a 1000. Un motore sano è a 1000. Sotto 0 il motore è morto, e l'auto può prendere fuoco.
Come faccio a far subire meno danni alle auto?
Abbassa i moltiplicatori di danno nella gestione del veicolo, come fCollisionDamageMult e fDeformationDamageMult, o mantieni i valori di salute al massimo da uno script.
Posso impedire ai veicoli di esplodere?
Puoi ridurlo mantenendo i valori di salute su o cambiando la gestione, ma stai attento: un'impostazione generale rimuove una parte del gioco di cui altri script, come un colpo o una bomba auto, potrebbero aver bisogno.
Script senza questo problema
Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →
Car BombPiazza, individua e disinnesca bombe sui veicoli — con telefono detonatore e minigioco del C4.Vedi script →
Chameleon Paints82 vernici camaleonte che cambiano colore, in un menu da applicare con un clic.Vedi script →