FiveM araçları kayboluyor veya ortaya çıkması: neden olur ve düzeltme

Ortaya çıkarılan arabalar birkaç saniye sonra veya uzaklaştığında kayboluyor mu? OneSync varlık budaması, yetim modu, sahipleri ayrılıyor, temizlik betikleri ve araç nasıl kalıcı olur.

Tipik semptomlar:

text
You spawn a car, walk a few hundred metres, and it is gone. Or a car you left on the street is missing after you log out.

Araçları silebilen birkaç farklı sistem vardır ve her birinin farklı bir düzeltmesi vardır. Bu makale her birini ve aracı kalıcı yapmanın yollarını açıklar.

Bir aracı kim siler

Ağa bağlı bir araç şu kişiler tarafından kaldırılabilir:

  1. Varlık budaması. OneSync'te, sunucu yalnızca en az bir oyuncuya uygun olan varlıkları tutar. Herkesin dışında bir varlık kaldırılabilir.
  2. Sahibi gidiyor. Bir varlığın sahibi istemcisi vardır. Sahip bağlantı keserse, varlık sunucu oyuna tutmasını söylemezse kaldırılabilir.
  3. Oyunun nüfus temizliği. Oyun ambient araçları ihtiyaç duymadığını düşündüğü şekilde siler. Belirli bir şekilde oluşturulan araba bunlardan biri olarak muamele görebilir.
  4. Betik. Birçok sunucu, boş arabaları bir zamanlayıcıda silen temizlik betiği çalıştırır.
  5. Kendi kodunuz. Döngüde bir DeleteEntity veya oyuncunun yakınında herhangi bir şeyi silen betik.

Kodu değiştirmeden önce hangisi olduğunu bulun.

Arabalar sabit bir zamanda kayboluyor

Araç tam olarak aynı gecikme sonra kaybederse, bir temizlik betikidir. Kaynakları DeleteEntity, DeleteVehicle ve GetAllVehicles için arayın:

bash
grep -ri "GetAllVehicles" resources/ --include=*.lua

Şoförü olmayan herhangi bir aracı silen döngüyü arayın. Çoğunun bir beyaz liste veya gecikme yapılandırması vardır. Bunu araç kodunda değil, orada düzeltin.

Arabalar uzaklaştığında kayboluyor

Bu budama ve sahip kuralıdır. OneSync kimsenin yakınında olmayan varlıkları tutmaz. Oyuncuya araba ortaya çıkarırsanız ve oyuncu alanından ayrılırsa, araba kaldırılmaya adaydır.

Sunucu yetim modunu kullanarak varlıkla ne olacağını karar verebilir:

lua
-- server
SetEntityOrphanMode(vehicle, 2)

SetEntityOrphanMode varlığını ve modu alır. Modlar şu şekildedir: 0, varlığı artık uygun olmadığında silin (varsayılan); 1, sahibi bağlantı keserse silin; 2, tutun. Sayılara güvenmeden önce sunucu derlemesi için geçerli yerel referansı kontrol edin.

Araç bunu güvenilir bir şekilde yapmak için sunucuda oluşturulmalıdır. CreateVehicle ile istemci tarafından oluşturulan araba önce o istemciye aittir. Sunucuda araç ortaya çıkarma bölümüne bakın tam akış için:

lua
local vehicle = CreateVehicleServerSetter(joaat('sultan'), 'automobile', x, y, z, heading)

while not DoesEntityExist(vehicle) do
    Wait(0)
end

SetEntityOrphanMode(vehicle, 2)

Dikkat: tutunmuş bir varlık onu silene kadar kalır. Her arabada yetim modunu tutmaya ayarlarsanız, terk edilmiş araçlar birikir ve varlık sayınız artar. Oyuncu aracı depoladığında veya ayrıldığında bunları kendiniz silin.

OneSync gerekir

Çoğu bu yalnızca OneSync'te geçerlidir. server.cfg dosyasında etkin olup olmadığını kontrol edin ve OneSync'i nasıl etkinleştireceğinize bakın. Olmadan, araçlar istemci tabanlı ve sahibi ile kaybolur.

İstemcide oyunun temizliği

İstemcide araba ortaya çıkardığınızda, oyun bunu nüfus ortamının bir parçası olarak tutabilir ve kaldırabilir. Sizin gibi muamele görmesi için onu bir görev varlığı olarak işaretleyin:

lua
local vehicle = CreateVehicle(model, x, y, z, heading, true, false)
SetEntityAsMissionEntity(vehicle, true, true)

SetEntityAsMissionEntity ayrıca daha sonra bir aracı silmeniz gerektiğinde önemlidir. İstemcinin görev varlığı olarak sahip olmadığı bir araçta DeleteEntity sessizce başarısız olabilir.

Yaygın bir kalıp, bir varlığı kontrol almak ve sonra silmektir:

lua
local function removeVehicle(vehicle)
    if not DoesEntityExist(vehicle) then return end
    SetEntityAsMissionEntity(vehicle, true, true)
    DeleteEntity(vehicle)
end

Kalıcı araçlar: gerçek yaklaşımlar

Garaj aracı dünyada tutmaz. Veritabanında bir satırı tutar ve gerektiğinde aracı ortaya çıkarır. Kalıcı sokak parkı için iki yaklaşım vardır:

Varlığı tutun

Arabayı sunucuda oluşturun, yetim modunu tutun olarak ayarlayın ve bunu (net id ve plaka) bir tabloda hatırlayın. Sunucu çalışırken araba dünyada kalır. Sahibi aracı depoladığında silin.

Bu basittir ancak varlıkları maliyetlendirir ve her şey bir yeniden başlatmada kaybolur. Küçük sayıda araba için uyar.

Kaydet ve yeniden ortaya çıkar

Park yapılmış arabanın konumu ve özelliklerini veritabanına kaydedin, varlığı silin ve bir oyuncu yakınında olduğunda veya sunucu başlangıcında tekrar ortaya çıkarın. Bu, pek çok araba için ölçeklenir ve yeniden başlatmadan kurtarır:

  1. Oyuncu dışarıda park yaptığında, plaka, koordinatlar, başlık ve özellikleri kaydedin.
  2. Varlığı kaldırın.
  3. Bir oyuncu yarıçapa girdiğinde veya sunucu başlangıcında, sıradan tekrar ortaya çıkarın.

Özellikler araç özellikleri bölümünde ve tablo tarafı garaj tabloları bölümünde ele alınmıştır.

Diğer nedenler

Oyuncu çok metre uzakta ve araba herhangi bir budama yarıçapından uzak. Belirli bir mesafe ötesindeki varlıklar istemciye eşitlenmez. Araç, sunucuda hala var olsa da mesafesi uzakta olan istemcide kaybetmiş görünebilir. Silindiğini varsaymadan önce sunucuda DoesEntityExist(vehicle) ile kontrol edin.

Yönlendirme kapları. Oyuncudan başka bir yönlendirme kabında olan araç oyuncu tarafından görünmez. Yönlendirme kapları bölümüne bakın.

Varlık sınırı. Çok yüksek sayıda araç motorun sınırlarına çarpar. Her şeyi tutmak yerine kullanılmayan araçları kaldırın.

Net id eski. Silinen araba için net id tuttuğu betik artık var olmayan bir tutamaca tutar. Kullanmadan önce NetworkDoesEntityExistWithNetworkId ile kontrol edin.

Kontrol listesi

Belirti Çözüm
Araba aynı anda her zaman kayboluyor Temizlik betiğini bulun ve yapılandırın veya kaldırın
Araba uzaklaştığında kayboluyor Sunucu tarafında oluşturun ve SetEntityOrphanMode tutmaya ayarlayın
Araba sahibi oturum kapatırsa kayboluyor Yetim modu tutun veya veritabanından kaydet ve yeniden ortaya çıkar
İstemci oluşturulan araba silinir SetEntityAsMissionEntity(vehicle, true, true)
DeleteEntity silmez Önce sahip istemcide bir görev varlığı olarak ayarlayın
Arabalar birikir Depolama sırasında araçları silin, her varlığı tutmayın
Araba bir oyuncuya görünmez Yönlendirme kabını kontrol edin ve OneSync'in açık olduğunu kontrol edin

Kısa yanıtlar

Neden park yapılmış arabalar uzaklaştığında kayboluyor?

OneSync'te, artık hiçbir oyuncuya uygun olmayan bir varlık sunucu tarafından kaldırılır. Park yapılmış bir arabanın kalmasını istiyorsanız, sunucu bunu tutmalı, örneğin yetim modunu ayarlayarak veya betik, birisi geri döndüğünde bunu yeniden ortaya çıkarmalı.

SetEntityOrphanMode nedir?

Oyuna sahibi ayrıldığında bir varlıkla ne yapılacağını söyleyen bir sunucu yerel öğesi. Varlığı silebilir, artık uygun olmadığında silebilir veya tutabilir.

Hâlâ SetEntityAsMissionEntity'ye ihtiyacım var mı?

İstemcide, oyunun kendi nüfus temizliğine karşı yardımcı olmaya devam eder, ortam olarak değerlendirdiği bir aracı silebilir. Sunucu tarafı ayarlarının yerini almaz.

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