Paliwo pojazdu w FiveM: ustaw paliwo przy spawnie i napraw samochody utknięte na 0
Jak paliwo działa w FiveM: GetVehicleFuelLevel i SetVehicleFuelLevel, paliwo w torebkach stanu, ustawianie paliwa przy spawnieniu samochodu i dlaczego pojazdy zaczynają się z pustym bakiem.
Typowe objawy:
A freshly spawned car has the fuel gauge at 0 and the engine cuts out after a few metres.Paliwo w FiveM to nie jeden system. Gra ma na niego native, ale prawie każdy serwer uruchamia zasób paliwa, który przechowuje własną wartość. Ten artykuł wyjaśnia natives, gdzie zasoby paliwa przechowują poziom i jak prawidłowo ustawiać paliwo przy spawnieniu samochodu.
Dwa natives
Gra przechowuje poziom paliwa na każdym pojeździe. Czytasz i piszesz to na kliencie:
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
local fuel = GetVehicleFuelLevel(vehicle)
print('fuel', fuel)
SetVehicleFuelLevel(vehicle, 100.0)GetVehicleFuelLevel zwraca float i SetVehicleFuelLevel przyjmuje float. Wartość podąża za objętością zbiornika paliwa z handlingu pojazdu, więc skrypty normalnie traktują to jako procent i trzymają między 0 a 100.
Sam native nie konsumuje paliwa. Gra drenaży go tylko w określonych sytuacjach, więc zasób paliwa to to, co sprawia, że samochody zużywają paliwo na podstawie prędkości i RPM.
Gdzie zasoby paliwa przechowują poziom
To jest część, która powoduje większość problemów. Zasób paliwa musi pamiętać poziom każdego samochodu i wybiera jedno z tych miejsc:
- Torebka stanu na encji. Niektóre zasoby przechowują poziom w stanie pojazdu, na przykład
Entity(vehicle).state.fuel. To jest jak ox_fuel pracuje i kilka innych nowoczesnych zasobów robi to samo. Przeczytaj torebki stanu, aby dowiedzieć się, jak wartości synchronizują się między serwerem i klientami. - Dekorator. Starsze zasoby przechowują poziom za pomocą
DecorSetFloatna pojeździe. - Tylko native. Najprostsze skrypty czytają
GetVehicleFuelLeveli pisząSetVehicleFuelLeveli nic więcej. - Baza danych. Wiele zasobów również zapisuje poziom posiadanych samochodów, aby trwał między sesjami, w kolumnie
fueltabeli pojazdów.
Natywne wezwanie, które nie jest wspierane przez miejsce, które czyta twój zasób, nie ma widocznego efektu. Jeśli wołasz SetVehicleFuelLevel(vehicle, 100.0) a wskaźnik zostaje na 0, twój zasób czyta inne źródło.
Porada: otwórz pliki zasobu paliwa i wyszukaj
state.fuel,DecoriGetVehicleFuelLevel. Którekolwiek czyta, to to, które musiałbyś napisać.
Ustaw paliwo przy spawnieniu samochodu
Niezależnie od tego, co używa twój zasób paliwa, kolejność jest taka sama. Utwórz pojazd, czekaj aż będzie istnieć, następnie ustaw paliwo:
local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
SetVehicleNumberPlateText(vehicle, plate)
-- 1. the native, for the game's own value
SetVehicleFuelLevel(vehicle, 100.0)
-- 2. the state bag, if your fuel resource reads one
Entity(vehicle).state:set('fuel', 100.0, true)Użyj tylko linii, którą czyta twój zasób. Pisanie klucza torebki stanu, który nic nie czyta, jest nieszkodliwe, ale bezużyteczne.
Niektóre zasoby również dają eksport do ustawienia poziomu, więc nie musisz wiedzieć, gdzie jest przechowywany. Jeśli masz, preferuj to i weź dokładną nazwę z jego dokumentacji:
-- placeholder: the export name depends on your fuel resource
exports['your_fuel_resource']:SetFuel(vehicle, 100.0)Dla samochodu zbudowanego na serwerze za pomocą CreateVehicleServerSetter, ustaw wartość po stronie serwera za pośrednictwem torebki stanu. Native SetVehicleFuelLevel uruchamia się na kliencie, więc dla samochodów stworzonych na serwerze dajesz net id właścicielowi i ustawiasz tam, jak opisano w spawnianiu pojazdów.
Posiadane samochody wychodzą puste
Jeśli samochody z twojego garażu zaczynają się z tą samą niską wartością za każdym razem, garaż przywraca zapisaną wartość, która jest pusta. Sprawdź tabelę pojazdów, która zwykle przechowuje ostatnią znaną poziomów w kolumnie:
SELECT plate, fuel FROM player_vehicles WHERE plate = 'MIC 001';Częste przyczyny:
- Kolumna
fuelto0lubNULL, ponieważ samochód został przechowywany, gdy wartość nie była zapisana. - Skrypt garażu nigdy nie czyta kolumny przy spawnieniu.
- Zasób paliwa zapisuje własną wartość gdzieś indziej niż czyta garaż.
Aby naprawić pojazdy, które są już utknięte, ustaw kolumnę na pełny zbiornik:
UPDATE player_vehicles SET fuel = 100 WHERE fuel IS NULL OR fuel <= 0;Serwery ESX często nie mają kolumny fuel w owned_vehicles, ponieważ paliwo jest zapisywane wewnątrz kolumny vehicle JSON wraz z innymi właściwościami. Przeczytaj właściwości pojazdu, aby dowiedzieć się, jak ten JSON jest zbudowany.
Samochody utknięte na 0 paliwa
Przejdź przez zwykłe przyczyny:
Zasób paliwa nie działa lub uruchomił się zbyt późno. Jeśli uruchomi się po garażu, pierwsze spawniętne samochody nie mają wartości. Uruchom go przed skryptami, które spawniają pojazdy.
Dwa zasoby walczą. Zasób paliwa i skrypt, który wołają SetVehicleFuelLevel każdą ramkę, nadpisują się nawzajem i wskaźnik skacze. Utrzymuj jedno źródło.
Poziom jest ustawiony przed istnieniem encji. Na sieciowym spawnie wezwanie musi nastąpić po tym, jak DoesEntityExist to true, inaczej stosuje się do nic.
Model ma minimalny zbiornik. Objętość zbiornika paliwa pochodzi z handlingu. Niestandardowy pojazd z fPetrolTankVolume na bardzo niskiej wartości opróżnia się szybko. Sprawdź plik handlingu pojazdu, zobacz edycja handlingu pojazdu.
Pojazdy elektryczne. Zasób paliwa, który ich nie wyklucza, drenaży zbiornik, który nie istnieje. Większość zasobów ma listę modeli elektrycznych do pominięcia.
Zatankuj bez stacji
Dla pojazdu testowego lub pracę, mała pętla trzyma zbiornik pełny, gdy gracz go jeździ:
CreateThread(function()
while true do
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if vehicle ~= 0 and GetVehicleFuelLevel(vehicle) < 20.0 then
SetVehicleFuelLevel(vehicle, 100.0)
end
Wait(2000)
end
end)Dwa sekundy Wait to celowe: paliwo nie potrzebuje sprawdzenia każdą ramkę, zobacz jak Wait działa.
Lista kontrolna
| Objaw | Naprawa |
|---|---|
| Spawniętny samochód ma 0 paliwa | Ustaw paliwo po spawnie, gdzie czyta je twój zasób paliwa |
SetVehicleFuelLevel nic nie zmienia |
Zasób czyta torebkę stanu lub dekorator: zamiast tego to napisz, lub użyj jego eksportu |
| Samochody z garażu wychodzą puste | Sprawdź kolumnę fuel lub zapisane właściwości i upewnij się, że garaż je przywraca |
| Paliwo skacze w górę i w dół | Dwa skrypty ustawiają poziom: utrzymaj jeden |
| Samochód stworzony na serwerze nie ma paliwa | Ustaw torebkę stanu na serwerze, lub wyślij net id do właściciela |
| Pusty zbiornik na niestandardowym samochodzie | Sprawdź fPetrolTankVolume w jego handlingu |
| Samochód elektryczny traci paliwo | Dodaj model do listy elektrycznej zasobu paliwa |
Szybkie odpowiedzi
Dlaczego samochód, który spawniłem, nie ma paliwa?
Zasób paliwa zwykle przechowuje poziom w swoim własnym miejscu, takim jak torebka stanu, a nowy pojazd jeszcze tam nie ma wartości. Ustaw paliwo za pośrednictwem zasobu paliwa zaraz po spawnie.
Czy SetVehicleFuelLevel wystarczy, aby napełnić zbiornik?
Tylko dla własnej wartości gry. Jeśli twój zasób paliwa czyta paliwo z torebki stanu lub własnej tabeli, ignoruje native, więc ustaw wartość, gdzie zasób ją czyta.
Czy mogę sprawić, aby konsumpcja paliwa była nieograniczona?
Tak. Trzymaj poziom na maksimum na timerze, lub wyłącz konsumpcję w konfiguracji zasobu paliwa, jeśli ma taką opcję.
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 →