FiveM Sunucularında Görünmez Varlık Yönetimi: Scope ve Culling
FiveM sunucunuz büyüdükçe, oyuncuların etrafındaki varlıkların (entity) yönetimi bir kabusa dönüşebilir. 2026 standartlarında, sadece oyuncunun gördüğü veya etkileşime girdiği objeleri işlemek, sunucu performansını %30'a varan oranda artırabilir. Bu rehberde, SetEntityDistanceCullingRadius ve NetworkSetEntityInvisibleToNetwork gibi teknikleri inceleyeceğiz.
1. Scope Nedir ve Neden Önemlidir?
Scope, bir istemcinin (client) sunucudan aldığı veri miktarını belirleyen bir sınırdır. Eğer sunucunuzdaki tüm oyunculara haritanın diğer ucundaki bir aracın verisini gönderirseniz, gereksiz 'network traffic' oluşturursunuz.
2. Culling (Ayıklama) Mekanizması Uygulaması
Belirli bir mesafedeki entity'leri oyuncunun dünyasından kaldırmak için aşağıdaki Lua mantığını kullanabilirsiniz:
-- Client-side bir script içerisinde
Citizen.CreateThread(function()
while true do
local playerPed = PlayerPedId()
local pos = GetEntityCoords(playerPed)
-- 50 metre yarıçap dışındaki varlıkları ağ trafiğinden gizle
for entity in EnumerateEntities() do
if #(pos - GetEntityCoords(entity)) > 50.0 then
SetEntityDistanceCullingRadius(entity, 50.0)
end
end
Citizen.Wait(1000) -- Performans için 1 saniyelik döngü
end
end)3. Sunucu Tarafında Varlık Filtreleme
Sunucu tarafında SetEntityRoutingBucket ile oyuncuları bölümlere ayırmak yerine, sadece ihtiyaç duyulan event'leri tetiklemek önemlidir.
ox_lib üzerindeki 'points' sistemiyle yönetmek, manuel bir 'culling' sistemi yazmaktan çok daha stabildir.Hazır Çözümlerle Zaman Kazanın
Bu tür teknik detaylarla saatlerce uğraşmak yerine, tüm varlık yönetimi ve optimizasyonları yapılmış, profesyonelce kurgulanmış altyapımızla tanışın. Eğer bu optimizasyonlarla sıfırdan uğraşmak istemiyorsanız, önceden optimize edilmiş DxAV1 - Roleplay Paketi ürünümüzü inceleyerek sunucunuzu hemen modern standartlara taşıyabilirsiniz.
Sıkça Sorulan Sorular (SSS)
S: Culling mesafesini artırırsam ne olur?
C: Mesafe artarsa oyuncular daha uzaktaki objeleri görür ancak bu durum hem istemci tarafında FPS düşüşüne hem de sunucu tarafında ağ trafiğinin artmasına neden olur.
S: Bu yöntem sunucu 'resmon' değerini etkiler mi?
C: Evet, gereksiz entity güncellemelerini durdurduğunuz için resmon üzerinde hissedilir bir düşüş gözlemleyebilirsiniz.
S: Sadece araçlar için mi geçerli?
C: Hayır, SetEntityDistanceCullingRadius fonksiyonu tüm entity türleri (ped, obje, araç) için optimize edilebilir.
