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:
<!-- vehicles.meta -->
<Item>
<modelName>mycar</modelName>
<handlingId>MYCAR</handlingId>
...
</Item><!-- 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:
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:
<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:
- Riavvia la risorsa (
restart mycar), o l'intero server se un riavvio della risorsa non sembra applicarsi. - Elimina l'auto e spawna una nuova. Un'auto già spawnata mantiene i suoi valori vecchi.
- 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.
- 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:
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 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, ilhandlingNamee 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.
fInitialDriveForceofTractionCurveMaxè troppo alto per la massa. Torna indietro un passo. - Un'auto diversa è cambiata. Due file usano lo stesso
handlingName. Rinomina il tuo e l'handlingIdcorrispondente.
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 →