FiveM'de araç özelliklerini al ve ayarla: lib, ESX ve QBCore
FiveM'de araç modlarını, renkleri ve ekstraları kaydedin ve geri yükleyin: lib.getVehicleProperties, ESX.Game.GetVehicleProperties, QBCore.Functions.GetVehicleProperties, SetVehicleModKit ve veritabanı.
Tipik semptomlar:
A car comes out of the garage as a stock car: no colour, no turbo, no wheels, plain plate.Araçların görünüşü ve ayarı özellikleri denir. Bunları tutmak için, ortaya çıkarılan araçtan okuduğunuz, JSON olarak saklarsınız ve ortaya çıkardığınız sonrakine uyguladığınız. Bu makale her çerçevenin sağladığı işlevi, mod kiti hakkındaki kuralı ve sonucu veritabanında nasıl kaydedeceğini gösterir.
Özellikler neleri içerir
Özellikler tablosu garajın geri yüklemesi gereken her şeyi tutar: model, plaka, renkler, livery, moda göre modlar, tekerlek türü, lastik dumanı, neon, pencere tonu, ekstralar ve sağlık değerleri. Düz bir Lua tablosudur, bu nedenle saklama için json.encode ile metne çevirirsiniz.
ox_lib
ox_lib sunucunuzda ise, bu en kısa yoldur ve QBox'ta ihtiyacınız olan tek yoldur:
-- client
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
local props = lib.getVehicleProperties(vehicle)
-- later, on a spawned vehicle
lib.setVehicleProperties(vehicle, props)Her ikisi de istemci işlevleridir. Oyunu doğrudan okudukları için herhangi bir çerçeve ile çalışırlar.
ESX
ESX istemcide kendi çiftine sahiptir:
local props = ESX.Game.GetVehicleProperties(vehicle)
ESX.Game.SetVehicleProperties(vehicle, props)Önce nesneyi ESX = exports['es_extended']:getSharedObject() ile alın. ESX nil ise, esx:getSharedObject düzeltme bölümüne bakın.
QBCore
QBCore istemcide aynı iki işleve sahiptir:
local QBCore = exports['qb-core']:GetCoreObject()
local props = QBCore.Functions.GetVehicleProperties(vehicle)
QBCore.Functions.SetVehicleProperties(vehicle, props)QBox'ta, yukarıdaki ox_lib çiftini kullanın.
İpucu: üç çerçevenin tümünde çalışması gereken bir betik yazarsanız, hangisinin çalıştığını kontrol edin ve eşleştirilen çifti çağırın veya sadece ox_lib'ı her yerde kullanın çünkü zaten çoğu modern sunucunun bağımlılığıdır.
SetVehicleModKit ilk gelir
Oyun SetVehicleModKit ayarlanana kadar SetVehicleMod göz ardı eder. Yukarıdaki işlevler bunu işler, ancak kendi uygulama kodunu yazarsanız, bu sırada yapın:
SetVehicleModKit(vehicle, 0)
SetVehicleMod(vehicle, 11, 3, false) -- engine, level 3
SetVehicleMod(vehicle, 12, 2, false) -- brakes
ToggleVehicleMod(vehicle, 18, true) -- turboSetVehicleModKit'in ilk argümanı kittir ve 0 herkesin kullandığı kutudur. Mod türleri sayılardır: 11 motor, 12 fren, 13 iletim, 15 süspansiyon, 16 zırh ve 18 serbest bırakma yerine geçişli turbo. Renkler, tekerlek, neon ve tont SetVehicleColours, SetVehicleWheelType ve SetVehicleNeonLightEnabled gibi kendi yerel öğelere sahiptir.
Bunu elle yazmak nadiren buna değer. Uzun ve kütüphane zaten her durumu kapsar. Bunu tek seferlik bir ince ayar için kullanın, bir garaj için değil.
Veritabanına kaydedin
Özellikler uzun metin sütununda JSON metni olarak saklanır. Olağan akış şudur:
- İstemci araçtan özellikleri okur.
- Tabakla birlikte sunucuya gönderir.
- Sunucu kodlar ve kaydeder.
-- client
local props = lib.getVehicleProperties(vehicle)
TriggerServerEvent('my_garage:saveProps', props.plate, props)-- server
RegisterNetEvent('my_garage:saveProps', function(plate, props)
local src = source
-- check here that this player owns that plate before saving
MySQL.update('UPDATE owned_vehicles SET vehicle = ? WHERE plate = ?', {
json.encode(props), plate
})
end)QBCore ve QBox'ta aynı çağrı player_vehicles tablosunun mods sütununu yazar. Sütun adları garaj tabloları makalesinde vardır.
Dikkat: sunucuda sahipliği kontrol etmeden istemciden plaka ve özellikleri asla güvenmeyin. Aksi takdirde bir oyuncu başka birinin aracını üzerine yazabilir. Güvenli sunucu olayları bölümüne bakın.
Araç ortaya çıktığında geri yükleyin
JSON'u okuyun, kodunu çözün, sonra araç bu istemcide var olduktan sonra uygulayın:
local row = MySQL.single.await('SELECT vehicle FROM owned_vehicles WHERE plate = ?', { plate })
local props = json.decode(row.vehicle)
-- send props to the client that owns the car, which applies:
lib.setVehicleProperties(vehicle, props)Uygulama kuralları:
- Araç var olmalı ve yüklenmeli.
CreateVehicle'den hemen sonra ağa bağlı olanlar içinDoesEntityExistüzerinde beklemeyle uygulayın. Araçları ortaya çıkarma bölümüne bakın. - Model aynı olmalıdır. Farklı bir modelin özellikleri yanlış mod dizinleri uygulanır.
- Araçları kontrol eden istemcide çalıştırın. Onu sahip olmayan bir istemciden uygulamak başarısız olabilir.
Yaygın sorunlar
Saklama sonrasında modlar kayıp. Araba silinirken kaydet çalıştı, bu nedenle boş bir tablo kaydettiniz. Özellikleri önce okuyun, sonra silin.
Geri yüklemeden sonra plaka değiştirir. Kaydedilen plaka özelliklerin bir parçasıdır. Bir tabakla ortaya çıkarırsanız ve başka bir özellik tabakasını uygulamak için, özellikleri kazanır. Her ikisinin de eşleştiğinden emin olun veya anahtarlar ve veritabanı uyuşmazlıkları durur.
Renkler yanlış. Özel bir renk kendi RGB değerleriyle saklanır, bazı eski betikler bunu geri yüklemez. Çerçevenizin geçerli işlevini kullanın.
JSON çok büyük veya geçersiz. vehicle sütunu uzun metin türü olmalıdır ve veriler json.encode'den gelmelidir. Karma sayı ve dize biçiminde anahtarlara sahip bir tablo bir nesne yerine bir liste olarak kodlayabilir, bu nedenle hata ayıklamada kaydedilen bir satırı her zaman yükleyin ve karşılaştırın.
Özel veya eklenti arabaları. Özel mod parçaları modelin meta ve akışına bağlıdır. Bir parça modelden eksikse, dizin hiçbir şey yapmaz. Eklenti arabaları ekleme bölümüne bakın.
Kontrol listesi
| Belirti | Çözüm |
|---|---|
| Araba stok ortaya çıkar | Aracı var olduktan sonra, lib.setVehicleProperties veya çerçeve işleviyle özellikleri uygulayın |
SetVehicleMod hiçbir şey yapmaz |
Önce SetVehicleModKit(vehicle, 0) çağırın |
| Özellikler yalnızca istemcide çalışır | Al ve ayarla istemcide çalış, sunucuda kaydedin |
| Geri yüklemeden sonra plaka değiştirir | Plakaları özelliklerde ve ortaya çıkışta aynı tutun |
| Herkes araba üzerine yazabilir | Kaydetmeden önce sunucuda plaka sahipliğini kontrol edin |
| Modlar mağazada kayboluyor | Aracı silmeden önce özellikleri okuyun |
| QBox sunucu | ox_lib çiftini kullanın |
Kısa yanıtlar
Neden araç modlarım ortaya çıktıktan sonra uygulanmıyor?
Modlar yalnızca mod kiti SetVehicleModKit(vehicle, 0) ile ayarlandıktan sonra uygulanır. Özellik işlevleri bunu sizin için yapar, ancak elle yazılmış SetVehicleMod çağrılarının bir döngüsü önce ihtiyaç duyar. Araç da var olmalı ve yüklenmeli.
Bu işlevler sunucuda çalışır mı?
Hayır. Özellikleri almak ve ayarlamak istemci yerel öğeleri kullanır, bu nedenle bunları istemcide çalıştırın ve sunucuda kaydetmek için sonucu gönderin.
QBox'ta hangisini kullanmalıyım?
lib.getVehicleProperties ve lib.setVehicleProperties ox_lib sürümleri. QBox ox_lib etrafında oluşturulmuştur ve aynı işlevler ox_lib çalıştıran ESX ve QBCore sunucularda da çalışır.
Bu sorunu yaşatmayan scriptler
Chameleon PaintsTek tıkla uygulanan bir menüde 82 renk değiştiren bukalemun boya.Scripti gör →
Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →
Car BombAraç bombası yerleştirin, tespit edin ve etkisiz hale getirin — detonatör telefon ve C4 mini oyunuyla.Scripti gör →