FiveM vehicle fuel: spawn'da yakıtı ayarla ve 0'da takılı arabalar düzelt

FiveM'de yakıt nasıl çalışır: GetVehicleFuelLevel ve SetVehicleFuelLevel, state bags'deki yakıt, araba spawn'larken yakıtı ayarlama ve neden araçlar boş bir tankla başlıyor.

Tipik belirtiler:

text
A freshly spawned car has the fuel gauge at 0 and the engine cuts out after a few metres.

FiveM'de yakıt bir sistem değildir. Oyunun bir native'i var, ancak neredeyse her sunucu kendi değerini tutan bir yakıt resource'u çalıştırır. Bu makale native'leri, yakıt resource'larının seviyeyi nerede depoladığını ve araç spawn'larken yakıtı doğru şekilde ayarlamayı açıklar.

İki native

Oyun her araçta bir yakıt seviyesi depolar. Client'ta oku ve yaz:

lua
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)

local fuel = GetVehicleFuelLevel(vehicle)
print('fuel', fuel)

SetVehicleFuelLevel(vehicle, 100.0)

GetVehicleFuelLevel bir float döndürür ve SetVehicleFuelLevel bir float alır. Değer, araçların handling'deki benzin tank hacmini takip eder, bu nedenle script'ler normalde onu yüzde olarak ele alır ve 0 ile 100 arasında tutarlar.

Kendi başına, native yakıt tüketmez. Oyun bunu yalnızca belirli durumlarda drains'tir, bu nedenle yakıt resource'u araçların hız ve RPM'ye göre yakıt kullanmasını sağlayan şeydir.

Yakıt resource'ları seviyeyi nerede tutarlar

Bu çoğu problemi neden olan kısmıdır. Yakıt resource'u her araçın seviyesini hatırlamalıdır ve bu yerlerin birini seçer:

  • Entite üzerinde bir state bag. Bazı resource'lar seviyeyi araç durumunda tutarlar, örneğin Entity(vehicle).state.fuel. Bu nasıl ox_fuel çalışır ve birkaç diğer modern resource aynı şeyi yapar. State bags değerlerin server ve client'lar arasında nasıl senkronize olduğunu görmek için state bags bkz.
  • Bir decorator. Eski resource'lar seviyeyi araçta DecorSetFloat ile depolarlar.
  • Yalnızca native. En basit script'ler GetVehicleFuelLevel okurlar ve SetVehicleFuelLevel yazarlar ve başka hiçbir şey değil.
  • Veritabanı. Birçok resource'lar da oturum'lar arasında kalıcı olması için sahip olunan araçların seviyesini kaydederler, araç tablosunun fuel sütununda.

Resource'unuzun okuduğu yer tarafından desteklenmeyen bir native çağrı görünür bir etkisi yoktur. SetVehicleFuelLevel(vehicle, 100.0) çağırırsanız ve ölçer 0'da kalırsa, resource'unuz başka bir kaynağı okur.

İpucu: yakıt resource'unuzun dosyalarını açın ve state.fuel, Decor ve GetVehicleFuelLevel arayın. Hangisini okuyor ise yazmak zorunda olduğunuz budur.

Araç spawn'larken yakıtı ayarla

Yakıt resource'unuz ne kullansa, sıra aynıdır. Aracı oluşturun, var olmasını bekleyin, sonra yakıtı ayarlayın:

lua
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)

Resource'unuzun okuduğu satırı kullanın. Hiçbir şey okumayan bir state bag anahtarını yazma zararsızdır ama boştur.

Bazı resource'lar ayrıca, nerede depolandığını bilmeniz gerekmeyecek şekilde seviyeyi ayarlamak için bir export sağlarlar. Sizinkiyse, bunu tercih edin ve tam adı belgelerinden alın:

lua
-- placeholder: the export name depends on your fuel resource
exports['your_fuel_resource']:SetFuel(vehicle, 100.0)

CreateVehicleServerSetter ile server'da inşa edilmiş bir araç için, değeri server tarafını state bag'i aracılığıyla ayarlayın. Native SetVehicleFuelLevel client'ta çalışır, bu nedenle server tarafından oluşturulan araçlar için net id'yi sahibine verip orada ayarlarsınız, araçları spawn'lama'da açıklandığı gibi.

Sahip olunan araçlar boş çıkıyor

Garajınızdaki araçlar her zaman aynı düşük değerle başlarsa, garaj boş olan kaydedilen bir değeri geri yükler. Genellikle son bilinen seviyeyi bir sütun içinde tutan araç tablosunu kontrol edin:

sql
SELECT plate, fuel FROM player_vehicles WHERE plate = 'MIC 001';

Yaygın nedenler:

  • fuel sütunu 0 veya NULL çünkü araç değer kaydedilmediği sırada depolanmış.
  • Garaj script'i spawn'larken asla sütunu okumaz.
  • Yakıt resource'u kendi değerini garajın okuduğu başka yerde kaydeder.

Zaten takılı araçları onarmak için sütunu tam bir tankla ayarlayın:

sql
UPDATE player_vehicles SET fuel = 100 WHERE fuel IS NULL OR fuel <= 0;

ESX sunucuları genellikle owned_vehicles içinde fuel sütununa sahip değildir, çünkü yakıt diğer özelliklerle birlikte vehicle JSON sütununun içinde kaydedilir. Araç özellikleri bu JSON'in nasıl inşa edildiğini görün.

0 yakıtında takılı araçlar

Olağan nedenleri işleyin:

Yakıt resource'u çalışmıyor veya geç başladı. Garajdan sonra başlarsa, ilk spawn'lanan araçların değeri yok. Araçları spawn'layan script'lerden önce başlatın.

İki resource dövüş. Bir yakıt resource'u ve SetVehicleFuelLevel çağıran bir script her frame'de birbirlerini üzerine yazarlar ve ölçer atlar. Bir kaynak tutun.

Seviye entite var olmadan önce ayarlandı. Ağlı bir spawn'da çağrı DoesEntityExist true olduktan sonra olması gerekir, veya hiçbir şeye uygulanır.

Model çok küçük bir tanka sahip. Benzin tank hacmi handling'den gelir. Çok düşük fPetrolTankVolume olan özel araç hızlı boşalır. Araç handling dosyasını kontrol edin, araç handling'i düzenleme bakın.

Elektrikli araçlar. Onları hariç tutmayan bir yakıt resource'u var olmayan bir tankı boşaltır. Çoğu resource'un atlayacak elektrikli modellerin bir listesi vardır.

İstasyon olmadan refuel

Test veya iş aracı için, küçük bir döngü oyuncu onu sürüyorken tankı dolu tutarlar:

lua
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)

İki saniyelik Wait kasıtlıdır: yakıt her frame'de kontrol edilmesine gerek yoktur, Wait nasıl çalışır bakın.

Kontrol listesi

Belirti Fix
Spawn'lanan araç 0 yakıta sahip Spawn sonra yakıtı ayarlayın, yakıt resource'unuz okuduğu yerde
SetVehicleFuelLevel hiçbir şey değiştirmiyor Resource state bag'i veya decorator'ı okur: bunun yerine yaz veya export'u kullan
Garaj araçları boş çıkıyor fuel sütununu veya kaydedilen özellikleri kontrol edin ve garajın onları geri yüklemesi gerektiğini kontrol edin
Yakıt yukarı ve aşağı atlar İki script seviyeyi ayarlar: birini tutun
Server'dan oluşturulan araç yakıt yok State bag'i server'da ayarlayın veya net id'yi sahibine gönderin
Özel araçta boş tank Handling'deki fPetrolTankVolume kontrol edin
Elektrikli araç yakıt kaybediyor Modeli yakıt resource'unuzun elektrik listesine ekleyin

Kısa yanıtlar

Neden spawn'ladığım araç yakıt yok?

Yakıt resource'u genellikle seviyeyi kendi yerinde tutar, örneğin bir state bag'de ve yeni araçta henüz orada hiçbir değer yoktur. Spawn sonra yakıtı yakıt resource'u aracılığıyla ayarlayın.

SetVehicleFuelLevel bir tankı doldurmak için yeterli mi?

Yalnızca oyunun kendi değeri için. Yakıt resource'u yakıtı bir state bag'den veya kendi tablosundan okursa, native'i yoksayar, bu nedenle resource'un okuduğu yere değeri ayarlayın.

Yakıt tüketimini sınırsız yapabilir miyim?

Evet. Seviyeyi bir zamanlayıcıda maksimumda tutun veya varsa yakıt resource'unuzun config'inde tüketimi kapatın.

Bu sorunu yaşatmayan scriptler

Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →Chameleon PaintsTek tıkla uygulanan bir menüde 82 renk değiştiren bukalemun boya.Scripti gör →Car BombAraç bombası yerleştirin, tespit edin ve etkisiz hale getirin — detonatör telefon ve C4 mini oyunuyla.Scripti gör →

Okumaya devam edin