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:
-- 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)
endSetVehicleFixedaracı genel olarak onarır; lastikleri de dahil olmak üzere.SetVehicleDeformationFixedilk yerlileştirmenin arkasında bırakabileceği çöplükleri kaldırır.SetVehicleEngineHealthveSetVehicleBodyHealth1000.0kadar 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:
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
Wait(10)
timeout += 1
endKı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:
- Herhangi bir mod değişiminden önce
SetVehicleModKit(vehicle, 0)çağırın. - Oyundan
GetNumVehicleModsile bir yuvanın kaç seçeneği olduğunu isteyin.-1indeksi hisse senedidir.
-- 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;
GetNumVehicleModsile 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:
-- 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)-- 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.

