FiveM mekanik işi: onarım yerlileştirilmeleri, ayar modları ve işi kontrolleri

FiveM mekanik işi oluşturun: SetVehicleFixed ve sağlık yerlileştirilmeleri ile araç onarın, SetVehicleModKit ve SetVehicleMod ile ayarlayın, modları kaydedin ve işe göre eylemleri kapıyı açın.

Belirti: mekanik bir arabayi onarıyor ve motor hala duman çıkıyor, çöplükler kalıyor, ayarlı bir parça yeniden başlatmadan sonra kayboluyor veya herhangi bir oyuncu arabaları ücretsiz onarabilir.

Mekanik işi, biri içinde iki iş: onarım (sağlık değerleri ve yerlileştirilmeler) ve ayar (araç modları). Her ikisi de istemci üzerinde çalışır, bu nedenle korumanız gereken bölüm, tetiklenmelerine kim izin verilir.

Araç onarımı

Bir yerlileştirme temiz bir onarım için yeterli değil. Bu kombinasyon işi yapar:

lua
-- client
local function repairVehicle(vehicle)
    SetVehicleFixed(vehicle)
    SetVehicleDeformationFixed(vehicle)
    SetVehicleEngineHealth(vehicle, 1000.0)
    SetVehicleBodyHealth(vehicle, 1000.0)
    SetVehicleUndriveable(vehicle, false)
    SetVehicleEngineOn(vehicle, true, true, false)
end
  • SetVehicleFixed aracı genel olarak onarır; lastikleri de dahil olmak üzere.
  • SetVehicleDeformationFixed ilk yerlileştirmenin arkasında bırakabileceği çöplükleri kaldırır.
  • SetVehicleEngineHealth ve SetVehicleBodyHealth 1000.0 kadar bir değer alır. Sıfırın altında motor öldü, bu nedenle onları geri ayarlamak onu yeniden başlatır.

Araç ağ kurulan bir varlık olduğundan, onarımı yapan istemci buna sahip olmalıdır. Onarım kendi arabanızda çalışıyorsa ve müşterininizde değilse, önce kontrol isteyin:

lua
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
    Wait(10)
    timeout += 1
end

Kısmi onarımlar için (yalnızca motor, yalnızca gövde), eşleşen sağlık yerlileştirmesini çağırın. Sağlık değerleri diğer komut dosyaları için de önemlidir; örneğin araç hasarı ve motor sağlığı her sayının ne yaptığını açıklar.

SetVehicleMod ile ayarlama

Modlar numaralandırılmış yuvalar. Hepsi için iki kural geçerli:

  1. Herhangi bir mod değişiminden önce SetVehicleModKit(vehicle, 0) çağırın.
  2. Oyundan GetNumVehicleMods ile bir yuvanın kaç seçeneği olduğunu isteyin. -1 indeksi hisse senedidir.
lua
-- client
local function setMod(vehicle, modType, index)
    SetVehicleModKit(vehicle, 0)
    local count = GetNumVehicleMods(vehicle, modType)
    if index >= -1 and index < count then
        SetVehicleMod(vehicle, modType, index, false)
    end
end

-- engine is mod type 11, brakes 12, transmission 13, suspension 15
setMod(vehicle, 11, 2)

-- turbo is a toggle, not a numbered mod
ToggleVehicleMod(vehicle, 18, true)

Endeksi GetNumVehicleMods karşı kontrol etmek, bir araçta beklediğinizden daha az seçeneğe sahip olduğunda sessiz başarısızlıktan kaçınır. Boya ve renk, kendi yerlileştirilmelerini kullanır (SetVehicleColours ve diğerleri), bu nedenle onları ayrı bir menü olarak değerlendirin.

İpucu: sayıları kodlamak yerine aracın kendisinden ayar menüsünü oluşturun; GetNumVehicleMods ile yuvaları döngüye alarak. Eklenti arabaları genellikle farklı sayıda seçeneğe sahiptir.

Modları kaydetme

Mod ayarlama yalnızca canlı varlığı değiştirir. Oyuncu arabayı garaja depolayıp tekrar çıkardığında, araçla kaydedilmediği sürece mod kaybolur. Ayarlamadan sonra tam özellik kümesini kaydedin ve araç ortaya çıktığında uygulayın. Tüm akış araç özelliklerini kaydetme ve modları içindedir.

İşe kapılı eylemler

Onarım ve ayarlama kodu istemci üzerinde çalışır, bu nedenle değiştirilmiş bir istemci bunu herkes için çağırabilir. Kuralı sunucu üzerine koyun:

lua
-- server (ox_lib)
lib.callback.register('mechanic:canRepair', function(source)
    -- 1. job check: use your framework's player/job getter here
    -- 2. distance check: the player must be near a vehicle or workshop
    -- 3. item check and removal
    local removed = exports.ox_inventory:RemoveItem(source, 'repairkit', 1)
    return removed and true or false
end)
lua
-- client
lib.callback('mechanic:canRepair', false, function(ok)
    if ok then repairVehicle(vehicle) end
end)

İş kontrolü çerçevenize bağlıdır. ESX'te oyuncu nesnesi üzerinde işi okuyun, QBCore ve QBox'ta oyuncu verilerinden okuyun. Adım 1'de çerçevenizin alıcısını kullanın ve mekanik işi adıyla karşılaştırın; ESX'te iş ekleme ve QBCore'da iş ekleme bölümlerinde kapsanmıştır. Çerçeveler arasındaki geri çağırma deseni için sunucu geri çağırmaları bölümüne bakın.

Kapıyı açmaya değer diğer şeyler:

  • Onarım takımları öğeler olarak, böylece onarım bir şeye mal olur ve öğe sunucuda kaldırılır.
  • Atölye bölgeleri, böylece ayarlama yalnızca bir garaj veya tezgahın içinde açılır.
  • Mekanik ödeme yapın veya sunucu üzerinde toplum hesabı, istemciden değil.

İptal seçeneği içeren bir ilerleme çubuğu onarımlar doğru hissettir. ESX, QBCore ve ox_lib üzerinde ilerleme çubukları bölümüne bakın.

Kontrol listesi

Belirti Çözüm
Onarımdan sonra çöplükler kalır SetVehicleDeformationFixed ekleyin
Motor hala duman çıkıyor Motor sağlığını 1000.0 olarak geri ayarlayın
Onarım yalnızca kendi arabanızda çalışır Önce aracın ağ denetimini isteyin
SetVehicleMod hiçbir şey yapmıyor Önce SetVehicleModKit(vehicle, 0) çağırın
Mod indeksi aralığın dışında O yuva için GetNumVehicleMods kontrol edin
Yeniden başlatmadan sonra modlar kaybolur Özellikleri araçla kaydedin
Herkes onarabilir İş, mesafe ve öğeyi sunucu üzerinde kontrol edin

Kısa yanıtlar

SetVehicleFixed neden gövde hasarını onarmıyor?

Aracın çoğunu onarır ancak her zaman görülebilir deformasyonu değil. SetVehicleDeformationFixed(vehicle) da çağırın ve motor ve gövde sağlığını kendiniz ayarlayın.

SetVehicleMod neden hiçbir şey yapmıyor?

Önce SetVehicleModKit(vehicle, 0) öğesini çağırmanız gerekir. Mod kiti olmadan, oyun mod değişimini yoksayar.

Yalnızca mekanikler tarafından onarılabilmesinden nasıl emin olurum?

Onarımı kabul etmeden önce sunucu üzerindeki işi kontrol edin ve onarım öğesini sunucu üzerinde alın. İstemci tarafı işi denetlemesi değiştirilmiş bir istemci tarafından atlanabilir.

Bu sorunu yaşatmayan scriptler

Chameleon PaintsTek tıkla uygulanan bir menüde 82 renk değiştiren bukalemun boya.Scripti gör →Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →

Okumaya devam edin