Uszkodzenie pojazdu FiveM: engine health, body health i tweaki handlingu

Jak działa uszkodzenie pojazdu w FiveM: zakresy health silnika, nadwozia i zbiornika paliwa, GetVehicleEngineHealth, mnożniki odszkodowania handlingu i jak działają realistyczne skrypty uszkodzeń.

Typowe objawy:

text
Cars lose their engine after a small bump, explode when someone lightly hits a wall, or never take damage at all.

Uszkodzenie w GTA to garstka wartości health na pojazd i kilka liczb handlingu, które skalują, jak szybko spadają. Ten artykuł daje zakresy, native'i, wartości handlingu i ideę stojącą za realistycznymi skryptami uszkodzeń.

Wartości zdrowotne

Pojazd ma kilka wartości zdrowotnych, które można czytać i pisać na kliencie:

Wartość Zakres Czytaj z
Engine health -4000 do 1000 GetVehicleEngineHealth
Body health 0 do 1000 GetVehicleBodyHealth
Petrol tank health 0 do 1000 GetVehiclePetrolTankHealth

Nowy samochód jest w 1000.0 na wszystkich trzech. Silnik jest niezwykły, ponieważ spada poniżej zera:

  • Na 1000, silnik jest zdrowy.
  • Gdy wartość spada, samochód dyszy i traci moc.
  • Na 0 i poniżej silnik jest martwy i samochód może się zapalić. Zakres spada do -4000.
lua
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)

print('engine', GetVehicleEngineHealth(vehicle))
print('body', GetVehicleBodyHealth(vehicle))
print('tank', GetVehiclePetrolTankHealth(vehicle))

Zbiornik paliwa ma znaczenie dla pożarów. Gdy health zbiornika spada, może wyciekać i wyciekający zbiornik może się zapalić. Silnik i zbiornik są odrębne, więc silnik w 1000 może się zapalić, jeśli zbiornik zostanie trafiony.

Ustawianie wartości

Aby naprawić lub uszkodzić pojazd, napisz wartości z powrotem:

lua
SetVehicleEngineHealth(vehicle, 1000.0)
SetVehicleBodyHealth(vehicle, 1000.0)
SetVehiclePetrolTankHealth(vehicle, 1000.0)

Aby w pełni naprawić pojazd, w tym widoczne odkształcenie i brud, istnieją oddzielne native'i:

lua
SetVehicleFixed(vehicle)
SetVehicleDeformationFixed(vehicle)
SetVehicleDirtLevel(vehicle, 0.0)

SetVehicleFixed resetuje health i naprawia model. SetVehicleDeformationFixed usuwa wgniecenia. Używaj obu do pełnej naprawy.

Aby zapisać uszkodzenie posiadanego samochodu, przechowuj wartości z innymi właściwościami, zobacz właściwości pojazdu. Jeśli tego nie zrobisz, każdy samochód wychodzi z garażu w pełni naprawiony.

Wskazówka: pojazd, który się zatrzymuje od razu i nie uruchomi się ponownie, to często engine health poniżej 0. Ustawienie go z powrotem na wartość, taką jak 400.0, przywraca go bez pełnej naprawy, co robią wiele skryptów mechanika. Zobacz również mechanik praca.

Mnożniki handlingu

Jak szybko wartości spadają, jest decydowane przez handling pojazdu. Trzy z nich to zwykłe pokrętła:

Wartość handlingu Efekt
fCollisionDamageMult Ile uszkodzenia powoduje zderzenie zarówno nadwozia jak i silnika
fDeformationDamageMult Ile uszkodzenia powoduje odkształcenie modelu, widoczne wgniecenia
fEngineDamageMult Ile uszkodzenia przyjmuje silnik

Wartość 1.0 jest neutralna, niższa oznacza mniej uszkodzeń i wyższa oznacza więcej. W handling.meta wyglądają tak:

xml
<fCollisionDamageMult value="0.700000" />
<fDeformationDamageMult value="0.700000" />
<fEngineDamageMult value="1.500000" />

Małe zmiany idą daleko, więc poruszaj się o dziesiątki. Aby dowiedzieć się, gdzie plik mieszka i jak zastosować zmianę, zobacz edycja handlingu pojazdu. Te same wartości można zmienić w runtime za pomocą SetVehicleHandlingFloat, co wpływa na jeden pojazd:

lua
SetVehicleHandlingFloat(vehicle, 'CHandlingData', 'fCollisionDamageMult', 0.7)

Zmiany w runtime dotyczą tego pojazdu, podczas gdy istnieje. Ponownie zastosuj je za każdym razem, gdy się pojawia.

Realistyczne skrypty uszkodzeń

Skrypty uszkodzeń nie zmieniają silnika gry, używają wartości powyżej. Koncepcja jest prosta:

  1. Pętla czyta engine i body health pojazdu, którym podróżuje gracz.
  2. Gdy wartości spadają poniżej ustalonych progów, skrypt stosuje efekty: mniej mocy z SetVehicleEnginePowerMultiplier, zatrzymujący się silnik, ciągnące się kierownictwo, ostrzeżenie na ekranie.
  3. Uniemożliwia całkowite zgaśnięcie silnika, na przykład utrzymując go na małej wartości dodatniej, więc samochód kuli się zamiast się palić.
  4. Mechanik lub zestaw napraw ustawia wartości z powrotem w górę.

Pętla nie musi działać każdą ramkę. Sprawdzenie co kilkaset milisekund wystarczy i jest tańsze, zobacz jak działa 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)

To uniemożliwia spaleniu się silnika i wyłącza go zamiast. Traktuj to jako punkt wyjścia: prawdziwy skrypt dodaje sposób, aby go zrestartować, więc gracz nie jest zablokowany.

Zapobieganie eksplozjom

Jeśli chcesz mniej śmierci przez ogień, najprostsze bezpieczne opcje to wymienione powyżej: niższy mnożnik odszkodowania i utrzymywanie engine i petrol tank health od spadania do zera.

Istnieją również native'i, które wyłączają części systemu ognia i eksplozji dla jednego pojazdu, takie jak te, które zatrzymują degradację silnika. Używaj ich na konkretnym pojazdu, takim jak pojazd pracy, i przeczytaj dokumentację native'a, zanim się na nich polegasz. Nie stosuj ich do każdego pojazdu na serwerze:

  • Skrypty, takie jak bomba samochodowa lub heist, zależą od pojazdów, które mogą eksplodować.
  • Gracze używają uszkodzeń w roleplay: pościg, miejsce wypadku, zatrzymanie policji.
  • Pojazd, który nie może być zniszczony, to narzędzie griefingu i sposób na unikanie konsekwencji.

Decyduj na danym przypadku i preferuj mnożniki.

Uszkodzenie po restarcie lub respawnie

Jeśli samochód jest naprawiany za każdym razem, gdy pojawia się, przyczynę jest jedno z:

  • Garaż nie zapisuje engine i body health, więc każdy spawn zaczyna się na 1000. Zapisz wartości na sklepie i zastosuj je na spawn.
  • Skrypt wywołuje SetVehicleFixed na każdym spawn.
  • Samochód to świeża jednostka i jej health zawsze zaczyna się w pełni. Tylko Twoje zapisane dane przenoszą uszkodzenia.

Lista kontrolna

Objaw Rozwiązanie
Potrzebuję engine health GetVehicleEngineHealth, zakres -4000 do 1000
Samochód umiera przy najlitościwszym uderzeniu Obniż fCollisionDamageMult i fEngineDamageMult w handlingu
Wgniecenia zbyt widoczne Obniż fDeformationDamageMult
Samochód się pali po małym uderzeniu Trzymaj petrol tank health w górze lub limituj engine drop
Zatrzymany samochód nie uruchomi się Ustaw engine health powyżej 0
Naprawa pozostawia wgniecenia Dodaj SetVehicleDeformationFixed po SetVehicleFixed
Uszkodzenie zgubione po przechowywaniu Zapisz engine i body health z innymi właściwościami

Szybkie odpowiedzi

Jaki jest zakres engine health pojazdu?

Od -4000 do 1000. Zdrowy silnik jest na 1000. Poniżej 0 silnik jest martwy i samochód może się zapalić.

Jak sprać, aby samochody nie brały mniej uszkodzeń?

Obniż mnożniki odszkodowań w handlingu pojazdu, takie jak fCollisionDamageMult i fDeformationDamageMult, lub trzymaj wartości health w pełni z skryptu.

Czy mogę powstrzymać pojazdy przed eksplozją?

Możesz to zmniejszyć, utrzymując wartości health w górze lub zmieniając handling, ale bądź ostrożny: ustawienie całościowe usuwa część gry, którą inne skrypty, takie jak heist lub bomba samochodowa, mogą potrzebować.

Skrypty bez tego problemu

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

Czytaj dalej