FiveM ekosisteminde 2026 yılı itibarıyla performans ve kullanıcı deneyimi standartları baştan yazıldı. Artık oyuncuların ekranında sürekli DrawText3D ile beliren yazılar ve arka planda sonsuz döngüde (while true do) çalışan mesafe kontrolleri hem yüksek MS (Resmon) değerlerine hem de ciddi FPS kayıplarına yol açmaktadır.
Bu rehberimizde, eski nesil scriptlerinizi modern ox_lib ve ox_target altyapısına nasıl dönüştüreceğinizi, adım adım kod örnekleriyle inceleyeceğiz.
1. Neden Modern Framework Kütüphanelerine Geçmeliyiz?
Klasik FiveM scriptlerinde oyuncunun bir noktaya yakın olup olmadığını anlamak için her karede (frame) koordinat hesabı yapılır. Bu işlem 0.05ms - 0.15ms arasında ekstra yük getirir. ox_target ise poligon ve zone mantığıyla çalışarak yalnızca etkileşim alanına girildiğinde tetiklenir, kullanılmadığında 0.00ms kaynak tüketir.
ox_target ve ox_lib uyumlu hale getirmek, ortalama oyuncu FPS'ini %15 ila %25 arasında artırabilir.2. Kurulum ve Dosya Dizin Yapılandırması
İlk olarak gerekli kütüphaneleri sunucunuza dahil etmelisiniz.
- 1En güncel
ox_libveox_targetsürümlerini indirin. - 2Dosyaları sunucunuzun
resources/[ox]/klasörüne yerleştirin:
resources/[ox]/ox_libresources/[ox]/ox_target
- 3
server.cfgdosyanızı açın ve bu kaynakları en üst sıralara ekleyin:
ensure ox_lib
ensure ox_targetox_lib diğer birçok script tarafından bağımlılık (dependency) olarak kullanılacağı için mutlaka paket sıralamasında scriptlerinizin üstünde yer almalıdır.3. Kod Dönüşümü: DrawText3D Sürümünden ox_target'a
Gelin eskiden yazılmış tipik bir mesai başlama / market etkileşim kodunu inceleyelim ve bunu modern standartlara dönüştürelim.
Eski ve Hatalı Yöntem (Eski Nesil Loop):
-- client/main.lua (ESKİ)
Citizen.CreateThread(function()
while true do
local sleep = 1000
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
local dist = #(coords - vector3(215.12, -810.55, 30.73))
if dist < 3.0 then
sleep = 0
DrawText3D(215.12, -810.55, 30.73, "[E] - Mesaiye Başla")
if IsControlJustReleased(0, 38) then
TriggerServerEvent('duty:toggle')
end
end
Wait(sleep)
end
end)Modern ve Optimize Yöntem (ox_target):
Yukarıdaki sonsuz döngüyü tamamen silip yerine aşağıdaki event tabanlı çözümü ekliyoruz:
-- client/main.lua (MODERN 2026)
exports.ox_target:addBoxZone({
coords = vec3(215.12, -810.55, 30.73),
size = vec3(1.5, 1.5, 2.5),
rotation = 45.0,
debug = false,
options = {
{
name = 'duty_toggle',
icon = 'fa-solid fa-user-clock',
label = 'Mesaiye Başla / Bitir',
onSelect = function()
TriggerServerEvent('duty:toggle')
end
}
}
})4. ox_lib ile Modern Menü ve Arayüz Oluşturma
Etkileşim sağlandıktan sonra oyuncunun karşısına çıkan menüleri de ox_lib context menu bileşeni ile şık ve hızlı bir şekilde sunabilirsiniz.
-- client/menu.lua
local function openDutyMenu()
lib.registerContext({
id = 'duty_menu',
title = 'Departman Yönetimi',
options = {
{
title = 'Gündüz Vardiyası',
description = 'Gündüz mesaisine giriş yapın.',
icon = 'sun',
onSelect = function()
TriggerServerEvent('duty:setShift', 'day')
end
},
{
title = 'Gece Vardiyası',
description = 'Gece mesaisine giriş yapın.',
icon = 'moon',
onSelect = function()
TriggerServerEvent('duty:setShift', 'night')
end
}
}
})
lib.showContext('duty_menu')
endEğer bu dönüşümlerle ve script uyarlamalarıyla tek tek uğraşmak istemiyorsanız, tüm altyapısı önceden modernize edilmiş ve optimize edilmiş DxAV1 - Roleplay Paketi çözümümüzü inceleyebilirsiniz.
Sıkça Sorulan Sorular (SSS)
S: ox_target kullanırken debug modunu nasıl açabilirim?
C: Parametreler arasında yer alan debug = true satırını eklediğinizde oyun içerisinde etkileşim alanının kutu (box zone) sınırlarını yeşil çizgilerle görebilirsiniz.
S: qb-target kullanan scriptlerimi ox_target ile çalıştırabilir miyim?
C: Evet, ox_target içerisinde dahili qb-target emülasyonu mevcuttur. Ancak en yüksek performans için kodları doğrudan ox_target native fonksiyonlarına çevirmeniz önerilir.
