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:

text
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 0 e sotto, il motore è morto e l'auto può prendere fuoco. L'intervallo scende fino a -4000.
lua
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:

lua
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:

lua
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.0 lo 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ì:

xml
<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:

lua
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:

  1. Un ciclo legge la salute del motore e della carrozzeria del veicolo che il giocatore guida.
  2. 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.
  3. Mantiene il motore dal morire completamente, ad esempio tenendolo a un piccolo valore positivo, in modo che l'auto zoppica invece di bruciare.
  4. 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:

lua
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 SetVehicleFixed ad 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 →

Continua a leggere