Bloga Geri Dön
Tutorial2 dk. okuma

FiveM State Bags Rehberi: Event Kullanmadan Veri Senkronize Edin

Zahmetsiz client-server senkronizasyonu için FiveM state bag'lerinde uzmanlaşın: Replicated değerler, change handler'lar, filtreler ve state bag'lerin klasik event'lerden daha üstün olduğu durumlar.

Agency Scripts

Agency Scripts Kurucusu ve Baş Geliştiricisi

State Bags Nedir?

State bag'ler, özel event handler'ları yazmadan sunucu ve client'lar arasında veri senkronizasyonu yapmak için yerleşik bir FiveM özelliğidir. Entity'lere, oyunculara veya global duruma eklenen ve değişiklikleri ağ üzerinden otomatik olarak çoğaltan bir anahtar-değer deposu sağlarlar. Sunucu bir oyuncu state bag'i üzerinde bir değer ayarladığında, bu bilgiye ihtiyaç duyan tüm client'lar bunu otomatik olarak alır. Bu, verileri senkronize etmek için manuel olarak event tetikleme şeklindeki yaygın kalıbın yerini alır ve standart kod kalabalığını önemli ölçüde azaltır.

Oyuncu State Bag'leri

Bağlı her oyuncunun şu yolla erişilebilen bir state bag'i bulunur: Player(source).state server tarafında ve LocalPlayer.state client tarafında. Player state üzerinde herhangi bir anahtar değer çifti belirleyebilirsiniz ve bu ilgili client'lara otomatik olarak senkronize edilir. Bu: görev durumu, meslek unvanı, çete üyeliği veya diğer oyuncuların ya da resource'ların okuması gereken özel durum göstergeleri gibi veriler için idealdir. Güvenlik için değerleri server tarafında belirleyin, UI öğelerini render etmek veya oyuncu durumuna göre davranışı ayarlamak için ise client tarafında okuyun.

Entity State Bags

Oyuncuların ötesinde, FiveM'deki ağa bağlı her entity kendisine bağlı state bag verilerine sahip olabilir. Entity state'ine şununla erişin: Entity(entityHandle).state hem client hem de server tarafında. Bu, ayrı takip tabloları tutmaya gerek kalmadan araçlarda yakıt seviyesi, kilit durumu veya sahiplik gibi meta verileri depolamak için kullanışlıdır. Bir oyuncu bir araca yaklaştığında client, server'dan veri talep etmeden HUD üzerinde yakıt seviyesini görüntülemek için state bag verisini okuyabilir. Entity state bag'leri, entity var olduğu sürece kalıcıdır ve entity silindiğinde otomatik olarak temizlenir.

Global State

GlobalState tüm sunucu ve tüm istemciler arasında paylaşılan bir state bag'dir. Hava durumu, günün saati, etkinlik bayrakları veya ekonomi düzenleyicileri gibi sunucu genelindeki ayarlar için kullanın. Sunucu şunu ayarladığında: GlobalState.weather = 'rain', bağlı her client bu güncellemeyi alır ve buna göre tepki verebilir. Bu, event'leri tüm oyunculara yayınlamaktan daha verimlidir çünkü state bag'ler yeni oyuncu bağlantılarını otomatik olarak yönetir. Oturuma sonradan katılan bir oyuncu, ayrı bir sync event'ine gerek kalmadan mevcut genel durumu anında alır.

State Bag Handler'ları

Şununla işleyiciler kaydederek state bag değişikliklerine yanıt verebilirsiniz: AddStateBagChangeHandler. Bu fonksiyon bir key filtresi, bir bag filtresi ve belirtilen durum her değiştiğinde tetiklenen bir callback alır. Handler; bag adını, key'i, değeri ve diğer meta verileri alır. Bir oyuncu göreve başladığında görsel efektleri tetiklemek, envanter verileri değiştiğinde arayüzü güncellemek veya hata ayıklama için durum değişikliklerini günlüğe kaydetmek amacıyla handler'ları kullanın. Handler'lar hem istemcide hem de sunucuda çalışarak durum güncellemelerini nerede işleyeceğiniz konusunda size esneklik sağlar.

En İyi Uygulamalar ve Sınırlar

State bag'ler yüksek frekanslı güncellemeler için tasarlanmamıştır. State bag değerlerini ayarlamak ağ senkronizasyonunu tetikler, bu nedenle bunları her karede güncellemekten kaçının. Bunları konum veya hız gibi sürekli değişen değerler yerine durum bayrakları, yapılandırma değerleri ve meta veriler gibi ara sıra değişen veriler için kullanın. Ağ üzerinden iletildikleri için saklanan değerleri küçük ve serileştirilebilir tutun. Karmaşık nesnelere ihtiyaç duyduğunuzda, bunları basit anahtar-değer çiftlerine dönüştürün veya JSON dizeleri kullanın. Client tarafında manipülasyonu önlemek için verilerin yetkili olması gerektiğinde durumu her zaman sunucudan ayarlayın.

Başlamaya Hazır mısınız?

Scriptleri mağazamızdan edinin veya destek, güncellemeler ve gelecek yeniliklere göz atmak için Discord'a katılın.