FiveM'de harita aracılığıyla düşmek: çarpışmalar yüklenmez, nasıl düzeltilir

Oyuncular spawn veya teleport üzerine harita aracılığıyla düşüyor? Geç çarpışmaları düzeltin: eksik .ybn dosyaları, çok fazla akış, RequestCollisionAtCoord ve HasCollisionLoadedAroundEntity.

Belirti: spawn, teleport veya özel bir iç mekâna yürürsünüz ve zeminden düşersiniz, bazen denize veya harita altındaki boşluğa, veya connect'te birkaç saniye düşersiniz sonra inersiniz. Nedeni bir şeydir: oyun çarpışma yüklemeden önce dünyayı çizer ve bunu katı yapar. Bunu dosyalar ve betiklerde nasıl düzeltileceği aşağıdadır.

Neden olur

Çarpışma verileri (.ybn dosyaları) modeller gibi aktarılır. Oyun bunu oyuncu çevresine yükler ve zaman alır. Bir betik oyuncuyu bir kerede çok uzağa taşıdığında veya oyuncu meşgul bir sunucuda spawn olduğunda, oyuncu zeminin var olmasından önce yerleştirilebilir. Yerçekimi kazanır ve oyuncu düşer.

Dört olağan sebep vardır:

  • Özel bir harita çarpışması olmadan, veya yayınlanmaz.
  • Sunucu çok fazla yayınlar, bu nedenle her yük yavaş olur.
  • Bir betik çarpışmayı beklemeden teleport eder.
  • Bağlantı yavaş, bu nedenle kaynak dosyaları katılan bir oyuncu için geç gelir.

Neden 1: özel harita eksik .ybn

Sadece bir MLO veya bir harita içinde düşerseniz, ilk olarak kaynağına bakın:

text
my_mlo/
  fxmanifest.lua
  stream/
    my_mlo.ymap
    my_mlo.ytyp
    my_mlo.ybn      <- the collisions
  • .ybn dosyaları stream içinde olmalıdır. Bunun dışında .ybn oyunculara hiçbir zaman gönderilmez.
  • Bir binanın birkaç parçası için bir paket birkaç .ybn dosyasına sahip olabilir. Klasörü kopyaladığınızda bunların tümünün geldiğinden emin olun.
  • Paketin hiç .ybn yoksa, yazar çarpışmaları yapmadı ve bir harita düzenleme aracı bunları oluşturmak için gereklidir. Yazara başvurun veya başka bir harita seçin.
  • Kaynak başlatıldığını ve manifest this_is_a_map 'yes' içerdiğini kontrol edin. Tam düzen için MLO nasıl yüklenir bölümüne bakın.

Neden 2: çok fazla aktarım

Her oyuncu kaynaklarınızın aktarılan dosyalarını indirir ve yükler. Çok büyük dokular, çok fazla eklenti araba, kıyafetler, pedlar ve haritalar aktarım bütçesini kullanır ve çarpışmalar ağır dosyaların arkasında sırada kaldığında geç yüklenir.

İşaretler yavaş bir katılıştır, dokular geç görünür ve konsolda uyarılar verilir. İhtiyacınız olmayan şeyi küçültün ve kaldırın: büyük varlıklar ve doku kaybı nasıl yapılacağını gösterir. Daha hafif sunucu herkes için çarpışmaları daha hızlı yükler.

İpucu: varlıkları kaldırdıktan sonra kendi istemci önbelleğinizi temizleyin ve tekrar test edin, eski bir önbellek kazancı gizleyebileceği için. Bkz. FiveM önbelleğini temizle.

Neden 3: beklemeyecek bir betik

Bu teleportlar, respawnlar ve spawn seçicilerinde en yaygın nedendir. Düzeltme oyuncuyu dondur, çarpışmayı iste, yüklenene kadar bekle ve ancak o zaman oyuncuya izin ver.

lua
local function teleportSafe(coords)
    local ped = PlayerPedId()

    FreezeEntityPosition(ped, true)
    SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z, false, false, false)

    RequestCollisionAtCoord(coords.x, coords.y, coords.z)

    local timeout = GetGameTimer() + 5000
    while not HasCollisionLoadedAroundEntity(ped) and GetGameTimer() < timeout do
        RequestCollisionAtCoord(coords.x, coords.y, coords.z)
        Wait(0)
    end

    FreezeEntityPosition(ped, false)
end

Her kısmın yaptığı şey:

  • FreezeEntityPosition oyuncuyu hareketsiz tutar, böylece beklementarındayken yerçekimi etki etmez.
  • RequestCollisionAtCoord oyuna o koordinatlarda çarpışmayı yüklemeye başlamasını söyler. Beklementarındayken her karede çağırın.
  • HasCollisionLoadedAroundEntity ped çevresindeki çarpışma olduğunda true döndürür.
  • Zaman aşımı, alan hiçbir zaman yüklenmezse, örneğin haritanın hiç çarpışması yoksa, sonsuz bir döngüyü durduruyor.

Bir oyuncu karakter seçiminden sonra spawn olduğunda ve araçlar için aynı deseni kullanın: FreezeEntityPosition(vehicle, true) ile aracı dondurun ve HasCollisionLoadedAroundEntity(vehicle) üzerinde bekleyin.

Neden 4: connect'te çok erken spawn olmak

Connect'te, ilk spawn alan hazırlanmadan önce olabilir. Spawn ve çok karakterli betikler beklemeyenler genellikle sebeptir. Oyuncu ilk saniyeler boyunca görünmez ve donmuş ise ve sonra düşerse, spawn betiğinizi yukarıdaki desen için kontrol edin. Yükleme ekranında asılan bir katılım için bkz. oyuncular yükleme ekranında takılı.

Sorun yalnızca yavaş bağlantılar olan oyuncular için gerçekleşirse, oyuncu yerleştirilirken dosyalar hala indirilir. Aktarılan dosyaları küçük tutmak en iyi yardım olur ve oyuncuyu yukarıdaki kontrol doğru olana kadar tutacak bir yükleme veya solma ekranı çoğu görünen düşmeleri engeller.

Bir yer için hata ayıklama kontrol listesi

  1. Bu herkese mi olur, yoksa sadece bazı oyunculara mı? Herkes harita dosyalarını, bazı oyuncuları önbelleğe veya hıza işaret eder.
  2. Sadece bir yerde olur? Sonra çarpışmaya sahip olmayan bir harita kaynağıdır.
  3. O harita kaynağını durdurun ve tekrar deneyin. Artık düşmüyorsanız, harita çarpışması eksiktir. Bir temel oyun yeri de sizi düşürürse, sorun harita değil, yüktür.
  4. Sadece teleportdan sonra mı olur? Betik yukarıdaki bekleme döngüsüne ihtiyaç duyar.

İki harita çakıştığında

Bir harita temel oyun nesnelerini kaldırdığında ve diğer harita yerlerine kendi çarpışmasını koymadığında bir çarpışma da eksik olabilir. Bkz. harita çatışmaları.

Kontrol Listesi

Belirtisi Düzeltme
Bir özel harita içinde düşmek .ybn dosyalarını stream klasörüne ekleyin
Teleportdan sonra düşmek Dondurun, RequestCollisionAtCoord, HasCollisionLoadedAroundEntity için bekleyin
Connect'te düşmek Spawn betiğini dondurmayı kaldırmadan önce çarpışma için beklemesini sağlayın
Her şey yavaş yüklenir Aktarılan varlık boyutunu ve sayını azaltın
Sadece bazı oyuncular düşüyor Önbelleklerini temizleyin ve bağlantılarını kontrol edin
Sonsuz bekleme döngüsü Alan hiçbir zaman yüklenmese bile döngü sona erecek şekilde zaman aşımı ekleyin

Kısa yanıtlar

Teleport ettiğimde harita aracılığıyla neden düşüyorum?

Oyun henüz yeni konum çevresinde çarpışmayı yüklemedi, bu nedenle duracak bir zemin yok. Hedefte çarpışmayı isteyin ve oyuncuyu dondurmayı kaldırmadan önce yüklenene kadar bekleyin.

Çarpışmaları yüklemek için hangi native bekler?

HasCollisionLoadedAroundEntity(entity) bu varlık çevresindeki çarpışma yüklü olduğunda true döndürür. Oyunun yüklemeye başlaması için önce RequestCollisionAtCoord(x, y, z) çağırın.

Neden yalnızca özel bir harita üzerinde olur?

Harita .ybn çarpışma dosyaları olmadan, veya bunlar yanlış klasörde, veya akıştan eksiktir. Görünür model var ama hiçbir şey katı değil.

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 →Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →CCTV Security CamerasYerleştirilebilir kameralar, canlı çoklu görüntü tableti ve basılı delil fotoğrafları.Scripti gör →

Okumaya devam edin