Modifica handling.meta in FiveM: velocità, grip, freni e HANDLING_FILE

Modifica un handling.meta dell'auto su FiveM: campi chiave (fInitialDriveForce, fBrakeForce, fTractionCurveMax, fMass), HANDLING_FILE, corrispondenza di handlingName, test e runtime.

Vuoi che un'auto acceleri più velocemente, afferri meglio o freni più forte, e i valori sono in handling.meta. Questa guida mostra cosa fanno i campi chiave, come viene caricato il file, come è legato al veicolo e come testare i tuoi cambiamenti senza indovinare.

Come la gestione è legata a un'auto

Un'auto ha una voce di gestione, e l'auto vi fa riferimento per nome:

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

Il handlingName in handling.meta deve essere lo stesso dell'handlingId in vehicles.meta. Se differiscono, il gioco non trova la voce e l'auto usa un valore predefinito. Se due pacchetti usano lo stesso handlingName, uno di loro vince e l'altra auto gestisce male, quindi mantieni i nomi unici.

Carica il file

La risorsa deve dichiarare il file in 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'

Senza la riga HANDLING_FILE, il file non viene usato e i tuoi edit non fanno nulla. L'insieme completo di file per un'auto addon è in come aggiungere auto addon.

I campi chiave

Il file di gestione ha molti valori. Questi sono quelli che cambierai più spesso:

xml
<fMass value="1500.000000" />
<fInitialDriveForce value="0.320000" />
<fInitialDriveMaxFlatVel value="160.000000" />
<fBrakeForce value="0.800000" />
<fTractionCurveMax value="2.400000" />
  • fMass: il peso dell'auto in chilogrammi. Un'auto pesante è più difficile da spingere in giro e da fermare, e vince gli urti con auto più leggere.
  • fInitialDriveForce: accelerazione. Un valore più alto dà una spinta più forte dalla linea. Le auto nel gioco base di solito si siedono ben al di sotto di 1.0, quindi un cambio di pochi centesimi è già visibile.
  • fInitialDriveMaxFlatVel: la velocità massima che il motore può raggiungere su terreno piatto, in un'unità vicina a km/h. La velocità mostrata nel gioco non corrisponde esattamente, poiché la resistenza e il cambio giocano un ruolo.
  • fBrakeForce: potenza di frenata. Aumentalo per distanze di frenata più brevi; troppo alto fa bloccare l'auto o abbassare la prua.
  • fTractionCurveMax: l'aderenza dei pneumatici in una curva. Più alto significa più grip, fino a quando l'auto non sembra incollata alla strada.

Altri che puoi incontrare sono fInitialDragCoeff (trascinamento dell'aria), fTractionCurveMin (grip quando l'auto scivola), fSteeringLock e fSuspensionForce. Cambia una cosa alla volta così sai cosa ha causato il risultato.

Consiglio: copia il file originale prima di iniziare, e cambia i valori per piccoli passi, circa dal 10 al 20 percento. Pochi cambiamenti grandi contemporaneamente rendono l'auto difficile da capire e difficile da annullare.

Testa i tuoi cambiamenti

La gestione viene letta quando viene creato un veicolo, quindi:

  1. Riavvia la risorsa (restart mycar), o l'intero server se un riavvio della risorsa non sembra applicarsi.
  2. Elimina l'auto e spawna una nuova. Un'auto già spawnata mantiene i suoi valori vecchi.
  3. Guida lo stesso percorso di test ogni volta: una strada dritta per la velocità massima e l'accelerazione, una lunga curva per il grip, una fermata improvvisa per i freni.
  4. Cambia un valore, testa, scrivi cosa è cambiato.

Se l'auto si comporta comunque come prima, passa attraverso le cause: la riga data_file, la corrispondenza di handlingName, e se un'altra risorsa definisce anche lo stesso nome di gestione.

Cambia la gestione a runtime

Per un valore che dipende da una situazione, come un impulso nitro, un'auto di lavoro o un motore danneggiato, puoi cambiare la gestione di un veicolo da uno script client:

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 cambia il valore per quel singolo veicolo, finché esiste. Non tocca il file, altre auto dello stesso modello, o la prossima auto che spegni. È lo strumento giusto per effetti temporanei, e quello sbagliato per l'ottimizzazione permanente: mettili in handling.meta così ogni auto del modello li ha.

Attenzione: non eseguire il cambio in un loop ogni frame. Impostalo una volta quando inizia la situazione, e imposta il valore originale di nuovo quando finisce.

Sostituzione di un'auto del gioco base

Una voce di gestione con il nome di un'auto del gioco base, in una risorsa, cambia quell'auto per ogni giocatore e ogni spawn, incluso il traffico. Questo può essere ciò che vuoi per un pacchetto di "gestione realistica", ma testalo, poiché tutte le auto di quel modello cambiano contemporaneamente.

Problemi comuni

  • Nessun cambiamento affatto. Controlla la riga HANDLING_FILE, il handlingName e l'handlingId, e spawna una nuova auto.
  • La risorsa non si avvia. Il percorso in files è sbagliato, o l'XML ha un errore come un tag di chiusura mancante. Vedi couldn't start resource.
  • L'auto si ribalta o gira. fInitialDriveForce o fTractionCurveMax è troppo alto per la massa. Torna indietro un passo.
  • Un'auto diversa è cambiata. Due file usano lo stesso handlingName. Rinomina il tuo e l'handlingId corrispondente.

Checklist

Sintomo Soluzione
Gli edit non hanno effetto Aggiungi data_file 'HANDLING_FILE' e respawn l'auto
L'auto usa la gestione predefinita Rendi handlingName uguale a handlingId in vehicles.meta
Hai bisogno di più accelerazione Aumenta fInitialDriveForce in piccoli passi
Hai bisogno di una velocità massima più alta Aumenta fInitialDriveMaxFlatVel
Troppo poco grip Aumenta fTractionCurveMax; troppo sembra innaturale
Effetto temporaneo SetVehicleHandlingFloat nel client, una volta, e ripristinalo dopo

Risposte rapide

Perché il mio cambiamento handling.meta non fa nulla?

Di solito il file non viene caricato con data_file 'HANDLING_FILE', o il handlingName non corrisponde all'handlingId in vehicles.meta. Anche respawn l'auto: un veicolo che esiste già mantiene i suoi valori vecchi.

Come faccio a rendere un'auto più veloce?

Aumenta fInitialDriveMaxFlatVel per la velocità massima e fInitialDriveForce per l'accelerazione, in piccoli passi. I grandi salti rendono l'auto inguadabile o irrealistica.

Posso cambiare la gestione in uno script mentre il server viene eseguito?

Sì, con SetVehicleHandlingFloat nel client. Cambia un solo veicolo ed è perso quando il veicolo viene eliminato, quindi non sostituisce il file.

Script senza questo problema

Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →Chameleon Paints82 vernici camaleonte che cambiano colore, in un menu da applicare con un clic.Vedi script →Car BombPiazza, individua e disinnesca bombe sui veicoli — con telefono detonatore e minigioco del C4.Vedi script →

Continua a leggere