FiveM yönlendirme kovaları: SetPlayerRoutingBucket, örnekler ve ses

FiveM yönlendirme kovaları nasıl çalışır: SetPlayerRoutingBucket, SetEntityRoutingBucket, nüfus ve kilitlenme ayarları, kova 0, kullanım örnekleri ve ses ne olur.

Belirti: iki oyuncu grubu aynı yeri paylaşıyor ve onları ayırmak istiyor veya minigame'deki oyuncular başka insanların arabalarıyla ve yayalar dolu bir dünyayı görüyor.

Yönlendirme kovaları FiveM'in boyut veya örnek sürümüdür. Farklı kovaları içindeki varlıklar ve oyuncular birbirlerini görmez. Daireler, minigame ve karakter seçim ekranlarının arkasındaki araç ve sunucu tarafından yönetilirler. Bu makale her yerlileştirmeyi ve kaçınılması gereken hataları kapsar.

Yönlendirme kovası nedir

Kova bir sayıdır. Her oyuncu ve her varlık tam olarak bir kovaya aittir ve varsayılan 0. Farklı kovaları içindeki iki şey birbirlerine görünmez: oyuncular diğer kovanın oyuncularını, araçlarını veya sahnelerini görmez ve etkileşime girmez. Yine de aynı haritayı paylaşırlar; bu nedenle koordinatlar aynı kalır.

Bu yalnızca OneSync ile sunucuda çalışır; mevcut sunucular bunu kullanır. Emin değilseniz OneSync etkinleştirmesi bölümüne bakın.

Temel yerlileştirilmeler

Bunların tümü sunucuda çalışır:

lua
-- put a player in a bucket, and read it back
SetPlayerRoutingBucket(source, 50)
local bucket = GetPlayerRoutingBucket(source)

-- put an entity (vehicle, ped, object) in a bucket
SetEntityRoutingBucket(vehicle, 50)
local entityBucket = GetEntityRoutingBucket(vehicle)

-- back to the default world
SetPlayerRoutingBucket(source, 0)

SetPlayerRoutingBucket oyuncunun sunucu kimliğini ve kova numarasını alır. SetEntityRoutingBucket varlık tutamacını alır. Oyuncu taşındıktan sonra sunucuda oluşturduğunuz varlıklar 0 kovasında başlar; taşımazsanız, oluşturduktan hemen sonra kovayı ayarlayın:

lua
local veh = CreateVehicle(`sultan`, 0.0, 0.0, 70.0, 0.0, true, true)
SetEntityRoutingBucket(veh, 50)

Amaca dayanarak kova numaraları seçin. Yaygın bir alışkanlık aralıkları ayırmaktır; örneğin evler için bir aralık, minigame'ler için bir aralık, böylece iki özellik asla kazara bir numarayı yeniden kullanmaz.

Dikkat: bu yerlileştirilmeler yalnızca sunucu. İstemci komut dosyasından çağırmak yararlı bir şey yapmaz. Sunucuya bir olay gönderin ve sunucu istekleri kontrol ettikten sonra oyuncuyu taşıdığını sağlayın.

Nüfus ve kilitlenme

Her kovanın kendi kuralları olabilir:

lua
-- no ambient pedestrians or traffic in bucket 50
SetRoutingBucketPopulationEnabled(50, false)

-- who may create entities in bucket 50
SetRoutingBucketEntityLockdownMode(50, 'strict')
  • SetRoutingBucketPopulationEnabled(bucket, false) o kovada ortam NPC'lerini ve trafiği kapatır. Örnekler için faydalıdır; çünkü boş bir iç mekan veya minigame'de arabalar sürüp gitmesi gerekmez. Kova 0 normal nüfusunu tutar.
  • SetRoutingBucketEntityLockdownMode(bucket, mode) varlık oluşturmayı kontrol eder. Modlar 'strict', 'relaxed' ve 'inactive' ve 'inactive' normal davranışıdır; 'strict' en sıkı. Birine güvenmeden önce yerlileştirmenin tam farkını kontrol edin.

Yeni kovanın kurallarını ayarlamak; ilk kez kullanıldığında yeterlidir. Sunucunun ömrü boyunca kalırlar.

Kullanım örnekleri

  • Daireler ve evler: her mülk için bir kova, böylece özdeş iç mekanlar çakışmaz. Tam model konut ve örnekler içindedir.
  • Minigame ve olaylar: katılımcıları özel bir kovaya koyun; nüfus kapalı, dışarıdaki hiçbir şey müdahale etmez.
  • Karakter seçimi ve oluşturması: oyuncu bir karakter seçerken özel bir kovaya koyun; bu nedenle dünyada duran görülmez ve spawn olduğunda 0 hareket ettirin.
  • Öğreticiler ve yönetici alanları: kalanın sunucusunu açıklamadan şeyleri açıklamak için sessiz kova.
  • Test: oyunculardan uzakta komut dosyası deneyin.

Kovaları içinde ses

Farklı kovaları içindeki oyuncular oyunun bakış açısından birbirlerine yakın olmadığından, yakınlık sesi genellikle aynı ayrımı izler. pma-voice gibi ses kaynakları OneSync etrafında oluşturulur ve kova başına çalışır; bu nedenle bir evdeki oyuncular sokağı duymaz. Farklı kovaları içindeki insanların konuşmasını istiyorsanız, kovaları savaşmak yerine ses kaynağının kendi kanal veya çağrı özelliklerini kullanın. Oyuncuları taşıdıktan sonra ses sessizse, pma-voice çalışmıyor bölümüne bakın. Sadece birini değil, iki gerçek oyuncuyla test edin.

Yeniden kullanılabilir örnek yardımcısı

Kova mantığını bir yerde tutun; bu nedenle her çıkış yolu sıfırlanır:

lua
local instances = {}   -- [source] = bucket

function EnterInstance(src, bucket)
    instances[src] = bucket
    SetPlayerRoutingBucket(src, bucket)
end

function LeaveInstance(src)
    instances[src] = nil
    SetPlayerRoutingBucket(src, 0)
end

AddEventHandler('playerDropped', function()
    instances[source] = nil
end)

Çıkış üzerinde LeaveInstance çağırın, ölüm ve kaynağınız durduğunda:

lua
AddEventHandler('onResourceStop', function(resource)
    if resource ~= GetCurrentResourceName() then return end
    for src in pairs(instances) do
        SetPlayerRoutingBucket(src, 0)
    end
end)

O son yardımcı olmadan, komut dosyası yeniden başlatması oyuncuları boş bir kovada yalnız bırakır.

Yaygın sorunlar

  • Oyuncu tek başına takılı: 0 hiç taşınmadı. Her çıkış yolunda sıfırlayın ve kaynak durdurmasında.
  • Araç yolcu için kayboluyor: oyuncu ve araç farklı kovaları içinde sona erdi. Her ikisini de taşıyın.
  • Oluşturulan varlıklar yanlış dünyada görünür: yeni sunucu tarafı varlıkları kova 0 öğesinde başlar.
  • Farklı özellikler aynı numarayı yeniden kullanır ve oyuncular birbirlerinin örneğine iner: aralıkları ayırın.
  • İstemci tarafından yerlileştirilmeleri çağırmak: sunucuya aitler.

Kontrol listesi

Belirti Çözüm
Oyuncular yanlış dünyayı görür Her iki oyuncu için GetPlayerRoutingBucket kontrol edin
Yeniden başlatmadan sonra oyuncu yalnız onResourceStop öğesinde kovaları sıfırlayın
Araç sürücünün arkadaşlarına görünmüyor Aracın kovasını da ayarlayın
Örnek içinde trafik SetRoutingBucketPopulationEnabled(bucket, false)
Kimseyi duyamıyorum Aynı kova, ardından ses kaynağını kontrol edin
İstemci tarafında hiçbir şey olmaz Yerlileştirilmeler sunucu tarafı

Kısa yanıtlar

Varsayılan yönlendirme kovası nedir?

Kova 0. Her oyuncu ve varlık orada başlar; bir komut dosyası onu taşımaması sürece.

İstemci kendi yönlendirme kovasını değiştirebilir mi?

Hayır. Yerlileştirilmeler sunucu tarafı. İstemci sorar ve sunucu karar alıp oyuncuyu taşır.

Kovayı değiştirdiğimde araçlar oyuncuyla birlikte hareket eder mi?

Buna güvenmeyin. Aracı SetEntityRoutingBucket ile açıkça taşıyın ve kendi testlerinizde sonucu kontrol edin.

Bu sorunu yaşatmayan scriptler

Arcade MachinesGerçek kabinlerde oynanabilir yedi arcade oyunu; skor tabloları ve bahislerle.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