FiveM garajı: owned_vehicles ve player_vehicles, eksik arabalar düzeltildi

Araçlar garajda kayıp mı? ESX owned_vehicles ve QBCore player_vehicles tabloları nasıl çalışır, depolanan ve durum sütunları ve arabalar söylediği SQL'i düzeltmek için.

Tipik belirtiler:

text
You bought a car, and the garage says "No vehicles". Or the car was parked at the street, the server restarted, and it is gone.

Neredeyse her garaj betiği aynı şeyi okur: sahip olunan araç başına bir satırı içeren tablo. Araba kayıp olduğunda, satır yanlış, betik değil. Bu makale iki standart tabloyu, depolanan ve durum sütunlarının ne anlama geldiğini ve olağan durumları düzeltme SQL'i açıklar.

İki tablo

ESX owned_vehicles kullanır. QBCore ve QBox player_vehicles kullanır. Adlar sunucular arasında aynıdır, tam sütunlar sürümünüze ve garaj betiğinize bağlıdır, bu nedenle önce sizin bakın:

sql
DESCRIBE owned_vehicles;
DESCRIBE player_vehicles;

ESX: owned_vehicles

ESX Legacy'deki ana sütunlar:

Sütun İçerik
owner Oyuncunun ESX tanımlayıcısı
plate Plaka, araba başına benzersiz
vehicle Araç özellikleri ile JSON metni
type car, boat, aircraft...
stored Garajda 1, dünyada dışarıda 0
job İş araçları için ayarlanmıştır, aksi takdirde boş

Garaj betikleri kendi sütunlarını ekler, örneğin garaj adı veya bir pound durumu için.

QBCore ve QBox: player_vehicles

Sütun İçerik
citizenid Arabayı sahip eden karakter
license Oyuncunun lisans tanımlayıcısı
vehicle Model adı
hash Model hash'i
mods Araç özellikleri ile JSON metni
plate Plaka
garage Arabanın ait olduğu garaj kimliği
state 0 dışarıda, 1 garajlı, 2 gözaltına alındı
fuel, engine, body Son kaydedilen değerler

QBox aynı tabloya aynı fikirlerle sahiptir. Finans verileri gibi diğer sütunlar farklılık gösterir.

JSON olarak özellikler

ESX üzerindeki vehicle sütunu ve QBCore üzerindeki mods sütunu arabanın görünüş ve ayarını JSON olarak tutar: renkler, modlar, tekerlek, plaka, ekstralar, neon vb. Garaj bunu arabayı çıkardığınızda okur ve tekrar depoladığınızda yazar.

lua
-- when storing, on the client
local props = lib.getVehicleProperties(vehicle)
TriggerServerEvent('my_garage:store', plate, json.encode(props))

JSON geçerli olmalı. Betik bozuk dize yazarsa, araba geri yüklenemez ve hisse senedi veya hiç spawn olmaz. Araç özellikleri makalesinde bunları nasıl oluşturduğunuzu ve uyguladığınızı gösterir.

Garajda eksik araçlar

Bunları sırada çalıştırın.

1. Satır var ama başka birine ait

Garaj listesi sahibine göre filtreler. Sahip değeri sunucunun karakteriniz için kullandığı değerse, satır görünmez:

sql
SELECT owner, plate, stored FROM owned_vehicles WHERE plate = 'MIC 001';
sql
SELECT citizenid, license, plate, state FROM player_vehicles WHERE plate = 'MIC 001';

Sahibi gerçek karakteriniz ile karşılaştırın:

  • ESX: bu karakter için users.identifier kimliği. Çok karakterli betik ile bir önek taşıyabilir char1: gibi ve çok karakterli kurmadan önce satın alınan araç eski değeri olmadan eski değeri var.
  • QBCore ve QBox: players tablosundaki citizenid.

Framework değişikliğinden sonra, başka bir sunucudan alma veya manuel ekle, bu en yaygın nedeni. Satırı doğru değere işaret ederek düzeltin:

sql
UPDATE owned_vehicles SET owner = 'char1:abcdef...' WHERE plate = 'MIC 001';
UPDATE player_vehicles SET citizenid = 'ABC12345' WHERE plate = 'MIC 001';

Tablolarınızdaki gerçek değerlerle değiştirin.

2. Durum dışarıda sıkışmış

Çıkardığınız ve hiç geri gelmemiş araba, örneğin çökmesinden veya yeniden başlamadan sonra dışarıda işaretlenir. Garaj sadece depolanmış araçları listeler.

ESX, depolanan bayrağı geri ayarlayın:

sql
UPDATE owned_vehicles SET `stored` = 1 WHERE `stored` = 0;

QBCore ve QBox, durumu garajlı olarak ayarlayın:

sql
UPDATE player_vehicles SET state = 1 WHERE state = 0;

Dikkat: canlı sunucuda bu ayrıca şu anda sürükleri oyuncuların arabalarını depolar. Başlangıçta çalıştırın veya bir plakada veya sahibinde WHERE ile sınırlayın.

Birçok sunucu kaynak başladığında otomatik olarak bu gibi temizlik çalıştırır, yeniden başlatmadan sonra hiçbir araç hala dışarıda olmadığından. Sizinkisi yapmazsa, kendiniz yapabilirsiniz:

lua
-- server side, runs when the garage resource starts
AddEventHandler('onResourceStart', function(resource)
    if resource ~= GetCurrentResourceName() then return end
    MySQL.update('UPDATE player_vehicles SET state = 1 WHERE state = 0')
end)

ESX sorgusunda stored çevresindeki arka tıkları not edin: stored MySQL'de ayrılmış bir sözcük ve olmadan başarısız olur. Bazı betikler bu araçları garaj yerine bir impound durumuna gönderer, bu nedenle garajınızın beklediğini kontrol edin.

3. Garaj kimliği eşleşmiyor

QBCore üzerinde garage sütunu arabanın hangi garajda yaşadığını söyler. Yapılandırmanızda adlandırılan bir garaj satırda değilse veya yeniden adlandırılmış garaj hiçbir şey göstermez. Kullanımdaki değerleri listeleyin:

sql
SELECT garage, COUNT(*) FROM player_vehicles GROUP BY garage;

Araçları yapılandırmanızda var olan bir garajda ayarlayın.

4. Araba türü eşleşmiyor

Garaj betikleri araçları, tekneleri ve uçakları type sütununa veya araç sınıfına göre ayırır. car olarak kaydedilen tekne hiçbir zaman tekne garajında gösterilmez.

Plakalar

Plaka dünyayı, veritabanını ve anahtarları bağlantı kurar. Bu kuralları tutun:

  • Plaka satır başına benzersiz. Kopya yanlış arabayı yükler.
  • Plaka oyunda en fazla 8 karakterdir, sütun ESX'de daha uzun olabilir.
  • Alanlar sayılır. MIC 001 ve MIC001 iki plakadır, bu nedenle bir format kullanın.

Anahtarlar için araç anahtarlarına bakın.

SQL tarafından oyuncuya araba ekleyin

Satır ekleyerek araç verebilirsiniz. Sütun listesini kendi DESCRIBE öğesinden alın, eksik gerekli sütun eklemeyi başarısız kılar:

sql
INSERT INTO owned_vehicles (owner, plate, vehicle, type, `stored`)
VALUES ('identifier-here', 'MIC 001', '{"model":-1130810103,"plate":"MIC 001"}', 'car', 1);

JSON içindeki model ad değil model hash'i. Framework'ünüz veya garajınız genellikle bunu düzgün yapan bir komut veya işleve sahip, mevcut olduğunda daha güvenli yoldur.

Kontrol Listesi

Belirtisi Düzeltme
Garaj araç yok diyor owner veya citizenid karakterinize eşleştiğini kontrol edin
Araba çökmeden veya yeniden başlamadan sonra sıkışmış UPDATE depolanan bayrağı veya durumu garajlı, idealde başlangıçta geri ayarlayın
Satın alınan araba gösterilmez Satırın var olduğunu, sahibini ve garajı veya türü kontrol edin
stored sorgusu sözdizimi hatası verir stored çevresine backtick koyun
Araba modlar olmadan yüklenir vehicle veya mods JSON'ı geçerli ve boş olmadığını kontrol edin
Yanlış araba yüklenir Çoğaltılmış plakalar arayın
Tekne veya uçak kayıp type sütunu garajla eşleştiğini kontrol edin

Kısa yanıtlar

Arabam garajda neden değil?

Ya satır karakterinize bağlı değildir (yanlış sahip veya citizenid) ya da araba dışarıda işaretlenir. Sahip sütununu ve veritabanındaki depolanmış veya durum sütununu kontrol edin.

player_vehicles'deki durum ne anlama geliyor?

QBCore ve QBox üzerinde, state bir sayıdır: 0 arabayı dünyada dışarıda, 1 garajda saklandığı ve 2 gözaltına alındığı anlamına gelir. 0'da sıkışmış bir araba garaj listesinde gösterilmez.

Her arabayı garajın geri nasıl koyarım?

Dışarıda olan satırlar için depolanan bayrağı veya durumu garajlı değere ayarlayan bir UPDATE çalıştırın. Sunucu başlangıcında çalıştırmak en iyisidir, yeniden başlatmadan sonra gerçekten dışarıda hiçbir araba olmadığından.

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