FiveM topluluğunda en sık karşılaşılan krizlerden biri, sunucuya 30-40 oyuncu girdiğinde başlayan ani FPS dropları ve gecikmelerdir (desync). Birçok sunucu sahibi sorunu hemen makine yetersizliğine bağlasa da, asıl suçlu genellikle optimize edilmemiş client-side döngüleridir.
Bu rehberde, FiveM sunucunuzdaki scriptlerin kaynak tüketimini (ms değerlerini) nasıl anlık olarak inceleyeceğinizi ve 0.15ms tüketen bir scripti nasıl 0.01ms seviyesine çekeceğinizi adım adım inceleyeceğiz.
1. Resmon Nedir ve Nasıl Okunur?
Resmon (Resource Monitor), FiveM istemcisinin (oyuncunun bilgisayarı) çalıştırdığı scriptlerin işlemci üzerinde harcadığı süreyi milisaniye (ms) cinsinden gösteren yerleşik bir paneldir.
Paneli açmak çok basittir:
- 1Oyun içinde
F8tuşuna basarak konsolu açın. - 2
resmon 1yazıp Enter'a basın. - 3Ekranın sağ üstünde tüm aktif scriptler ve karşısında anlık ms değerleri listelenir.
2. En Yaygın Hata: Citizen.Wait(0) Tuzağı
Acemi geliştiricilerin yaptığı en büyük hata, oyuncunun bir noktaya yakın olup olmadığını kontrol ederken sonsuz döngü içinde Wait(0) bırakmaktır. Bu durum, bilgisayarın işlemcisini saniyede yüzlerce kez gereksiz yere meşgul eder.
❌ Hatalı ve Ağır Kod Örneği (0.12ms - 0.25ms Tüketir)
-- resources/[scripts]/ornek_script/client.lua
Citizen.CreateThread(function()
local marketNoktasi = vector3(25.0, -1345.0, 29.5)
while true do
Citizen.Wait(0) -- İşlemciyi her karede (frame) zorlar!
local ped = PlayerPedId()
local pCoords = GetEntityCoords(ped)
local mesafe = #(pCoords - marketNoktasi)
if mesafe < 2.0 then
-- E tuşuna basma kontrolü
if IsControlJustReleased(0, 38) then
print("Markete girdiniz!")
end
end
end
end)Oyuncu haritanın diğer ucunda (Paleto Bay) olsa bile bu döngü her milisaniyede mesafe hesaplamaya devam eder. Bu da gereksiz ms artışına neden olur.
3. Profesyonel Çözüm: Dinamik Wait Mantığı
Modern FiveM geliştirme standartlarında değişken uyku süresi (sleep timer) kullanılır. Oyuncu hedefe uzaksa döngü 1.5 - 2 saniye uyur; sadece yaklaştığında 0 ms moduna geçer.
✅ Optimize Edilmiş Kod (0.00ms - 0.01ms Tüketir)
-- resources/[scripts]/ornek_script/client.lua
Citizen.CreateThread(function()
local marketNoktasi = vector3(25.0, -1345.0, 29.5)
while true do
local sleep = 1500 -- Varsayılan olarak 1.5 saniye bekle
local ped = PlayerPedId()
local pCoords = GetEntityCoords(ped)
local mesafe = #(pCoords - marketNoktasi)
if mesafe < 10.0 then
sleep = 0 -- Oyuncu yaklaştığında kare bazlı kontrol açılır
if mesafe < 2.0 then
-- E tuşuna basma kontrolü (38: INPUT_CONTEXT)
if IsControlJustReleased(0, 38) then
print("Markete girdiniz!")
end
end
end
Citizen.Wait(sleep)
end
end)Bu basit değişiklik sayesinde scriptiniz arka planda neredeyse sıfır kaynak tüketir. Haritada 50 farklı dükkan veya etkileşim noktası olsa bile sunucunuz tereyağı gibi akar.
GetDistanceBetweenCoords native fonksiyonu yerine Lua 5.4 ile gelen vektör çıkarma operatörünü (#(coordsA - coordsB)) kullanın. Bu yöntem native fonksiyon çağırma masrafını ortadan kaldırır ve performansı %40'a kadar artırır.4. server.cfg Üzerinde Yapılması Gereken Temel Ayarlar
Sunucu tarafında (server-side) gereksiz yükleri engellemek için server.cfg dosyanıza şu parametreleri eklediğinizden emin olun:
# Sunucu bant genişliğini ve paket gecikmesini optimize eder
set sv_networkBacklog 128
set sv_netFilter true
# OneSync Infinity 2026 standartlarında zorunludur
set onesync onSıfırdan Uğraşmak İstemeyenler İçin Kestirme Yol
Sunucunuzdaki onlarca hatta yüzlerce eklentiyi tek tek açıp döngüleri optimize etmek haftalar sürebilir. Eğer bu teknik optimizasyonlarla, bug temizliğiyle ve ms düşürme işlemleriyle vakit kaybetmek istemiyorsanız; fabrikadan tamamen optimize çıkmış, 0.40ms total client tüketimine sahip DxAV1 - Roleplay Paketi çözümümüzü tercih edebilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. Sunucum için ideal toplam Resmon değeri kaç olmalıdır?
İdeal bir FiveM sunucusunda, oyuncu hiçbir şey yapmazken toplam ms değeri 0.80ms - 1.20ms arasında olmalıdır. Ateş etme, araç sürme gibi yoğun anlarda bile 2.0ms aşılmamalıdır.
2. MLO ve Mapping paketleri Resmon'da ms artırır mı?
Ymap ve MLO dosyaları doğrudan Resmon listesinde milisaniye olarak görünmez; ancak aşırı poligon içeren veya dokuları (texture) 16MB sınırını aşan haritalar doğrudan VRAM şişmesine ve FPS düşüşlerine neden olur.
3. Tek bir script 0.50ms tüketiyorsa ne yapmalıyım?
O scriptin client.lua dosyalarını açıp içinde while true do veya Citizen.Wait(0) geçen döngüleri tespit edin. Yukarıdaki "Dinamik Wait" mantığını uygulayarak bu değeri saniyeler içinde 0.01ms'ye düşürebilirsiniz.
