Edytuj handling.meta w FiveM: prędkość, przyczepność, hamulce i HANDLING_FILE

Edytuj handling.meta samochodu na FiveM: pola kluczowe (fInitialDriveForce, fBrakeForce, fTractionCurveMax, fMass), HANDLING_FILE, dopasowanie handlingName, testowanie i runtime.

Chcesz, aby samochód przyspieszał szybciej, miał lepszą przyczepność lub hamował mocniej, a wartości są w handling.meta. Ten poradnik pokazuje, co robią pola kluczowe, jak plik jest ładowany, jak jest powiązany z pojazdem i jak testować zmiany bez zgadywania.

Jak handling jest powiązany z samochodem

Samochód ma wpis handling, a samochód wskazuje na niego po nazwie:

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

handlingName w handling.meta musi być taki sam jak handlingId w vehicles.meta. Jeśli się różnią, gra nie znajduje wpisu i samochód używa domyślnego. Jeśli dwie paczki używają tego samego handlingName, jedna z nich wygrywa i inny samochód ma źle handling, więc trzymaj nazwy unikalne.

Załaduj plik

Zasób musi zadeklarować plik w 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'

Bez linii HANDLING_FILE, plik nie jest używany i twoje edycje nic nie robią. Pełny zestaw plików dla samochodu addon jest w how to add addon cars.

Pola kluczowe

Plik handling ma wiele wartości. Oto te, które będziesz zmieniać najczęściej:

xml
<fMass value="1500.000000" />
<fInitialDriveForce value="0.320000" />
<fInitialDriveMaxFlatVel value="160.000000" />
<fBrakeForce value="0.800000" />
<fTractionCurveMax value="2.400000" />
  • fMass: waga samochodu w kilogramach. Ciężki samochód jest trudniejszy do przesunięcia i zatrzymania, i wygrywa kolizje z lżejszymi samochodami.
  • fInitialDriveForce: przyspieszenie. Wyższa wartość daje mocniejszy push z linii. Samochody w grze podstawowej zwykle siedzą dobrze poniżej 1.0, więc zmiana kilku setnych jest już widoczna.
  • fInitialDriveMaxFlatVel: maksymalna prędkość, którą silnik może osiągnąć na płaskim terenie, w jednostce bliskiej km/h. Prędkość pokazana w grze nie pasuje dokładnie, ponieważ opór i przełożenie też grają rolę.
  • fBrakeForce: siła hamowania. Podnieś to dla krótszych odległości hamowania; zbyt wysoko sprawia, że samochód się blokuje lub odwraca nos w dół.
  • fTractionCurveMax: przyczepność opon w zakręcie. Wyższa oznacza większą przyczepność, aż samochód czuje się przyklejony do drogi.

Inne, które możesz spotkać, to fInitialDragCoeff (opór powietrza), fTractionCurveMin (przyczepność, gdy samochód się ślizga), fSteeringLock i fSuspensionForce. Zmieniaj jedną rzecz na raz, aby wiedzieć co spowodowało wynik.

Wskazówka: skopiuj oryginalny plik, zanim zaczniesz, i zmieniaj wartości małymi kroczkami, około 10 do 20 procent. Kilka dużych zmian naraz powoduje, że samochód jest trudny do zrozumienia i trudny do cofnięcia.

Testuj zmiany

Handling jest czytany, gdy pojazd jest tworzony, więc:

  1. Zrestartuj zasób (restart mycar), lub cały serwer, jeśli restart zasobu nie wydaje się zastosować.
  2. Usuń samochód i spawniaj nowego. Już spawniany samochód zachowuje stare wartości.
  3. Jeżdź tą samą trasą testową każdy raz: prosta droga dla maksymalnej prędkości i przyspieszenia, długi zakręt dla przyczepności, nagłe zatrzymanie dla hamulców.
  4. Zmień jedną wartość, testuj, napisz co się zmieniło.

Jeśli samochód wciąż zachowuje się jak przedtem, pracuj przez przyczyny: linia data_file, dopasowanie handlingName i czy inny zasób też definiuje tę samą nazwę handling.

Zmień handling w runtime

Dla wartości, która zależy od sytuacji, takie jak nitro boost, samochód pracy lub uszkodzony silnik, możesz zmienić handling pojazdu ze skryptu klienta:

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 zmienia wartość dla tego jednego pojazdu, dopóki istnieje. Nie dotyka pliku, innych samochodów tego samego modelu, lub następnego samochodu, który spawniasz. To prawidłowe narzędzie dla efektów tymczasowych, i złe dla tuningu trwałego: włóż te do handling.meta, aby każdy samochód modelu je miał.

Ostrzeżenie: nie uruchamiaj zmiany w pętli każdą klatkę. Ustaw ją raz, gdy sytuacja się rozpoczyna, i ustaw oryginalną wartość z powrotem, gdy się kończy.

Zastępowanie samochodu gry podstawowej

Wpis handling z nazwą samochodu gry podstawowej, w zasobie, zmienia ten samochód dla każdego gracza i każdego spawnu, włącznie z ruchem. To może być to, czego chcesz dla paczki 'realistic handling', ale testuj, ponieważ wszystkie samochody tego modelu zmieniają się naraz.

Częste problemy

  • Brak zmiany w ogóle. Sprawdzić linię HANDLING_FILE, handlingName i handlingId, i spawniaj nowy samochód.
  • Zasób się nie uruchamia. Ścieżka w files jest zła, lub XML ma błąd, takie jak brakujący tag zamykający. Zobacz couldn't start resource.
  • Samochód się przewraca lub kręci. fInitialDriveForce lub fTractionCurveMax jest zbyt wysoki dla masy. Wróć o krok.
  • Inny samochód się zmienił. Dwa pliki używają tego samego handlingName. Przemianuj swoje i dopasowane handlingId.

Lista kontrolna

Symptom Naprawa
Edycje nie mają efektu Dodaj data_file 'HANDLING_FILE' i spawniaj samochód ponownie
Samochód używa domyślnego handling Uczyń handlingName równy handlingId w vehicles.meta
Potrzebne więcej przyspieszenia Podnieś fInitialDriveForce małymi kroczkami
Potrzebna wyższa maksymalna prędkość Podnieś fInitialDriveMaxFlatVel
Zbyt mała przyczepność Podnieś fTractionCurveMax; zbyt wiele wygląda na nienaturalne
Efekt tymczasowy SetVehicleHandlingFloat na kliencie, raz, i przywróć to później

Szybkie odpowiedzi

Dlaczego moja zmiana handling.meta nic nie robi?

Zwykle plik nie jest załadowany z data_file 'HANDLING_FILE', lub handlingName nie pasuje do handlingId w vehicles.meta. Też spawniaj samochód ponownie: pojazd, który już istnieje, zachowuje swoje stare wartości.

Jak sprawić, aby samochód był szybszy?

Podnieś fInitialDriveMaxFlatVel dla maksymalnej prędkości i fInitialDriveForce dla przyspieszenia, małymi kroczkami. Duże skoki powodują, że samochód jest nie do prowadzenia lub nierealistyczny.

Czy mogę zmienić handling w skrypcie, podczas gdy serwer działa?

Tak, z SetVehicleHandlingFloat na kliencie. Zmienia jeden pojazd tylko i zostaje utracony, gdy pojazd jest usunięty, więc nie zastępuje pliku.

Skrypty bez tego problemu

Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →Chameleon Paints82 lakiery kameleon zmieniające kolor, w jednym menu — klik i gotowe.Zobacz skrypt →Car BombPodkładaj, wykrywaj i rozbrajaj bomby w autach — z telefonem-detonatorem i minigrą C4.Zobacz skrypt →

Czytaj dalej