FiveM sunucusu yönetirken her geliştiricinin ve sunucu sahibinin karşılaştığı en can sıkıcı kabuslardan biri, sunucuya sızan kötü niyetli bir kullanıcının haritaya devasa prop'lar yerleştirmesi, tüm oyuncuları patlatması ya da oyun motorunu zorlayarak sunucuyu çökertmesidir (crashletmesidir).
2026 yılı standartlarında, yalnızca istemci (client) tarafındaki doğrulamalara güvenmek sunucunuzu savunmasız bırakır. Çünkü istemci belleği hile yazılımları tarafından manipüle edilebilir; fakat sunucu tarafı (Server-Side) asla aldatılamaz. FiveM FXServer çekirdeğinde sunulan yerel entityCreating ve explosionEvent mekanizmalarını doğru kurgulayarak harici hile koruma yazılımlarına servet harcamadan sunucunuzu aşılmaz bir kaleye dönüştürebilirsiniz.
Bu rehberde sıfırdan adım adım kendi yerel güvenlik katmanınızı nasıl yazacağınızı inceliyoruz.
1. Neden İstemci Değil de Sunucu Tarafı (Server-Side)?
Hile menüleri oyuncunun bilgisayarındaki yerel GTA V belleğini manipüle eder. Oyuncu istemcisi "ben buraya bir kargo uçağı koydum" dese bile, bu bilginin diğer oyunculara dağıtılması FiveM sunucusunun (FXServer) onayından geçer.
Eğer sunucu bu varlığın (entity) oluşturulmasına izin vermezse:
- 1Obje diğer oyuncuların ekranında görünmez.
- 2Sunucu belleği şişmez.
- 3Hilecinin eylemi sunucu loglarına sessizce düşer ve otomatik yaptırım uygulanabilir.
2. entityCreating ile İstenmeyen Varlıkları Havada Yakalama
FiveM, OneSync mimarisinde haritada herhangi bir nesne (ped, araç, prop) oluşturulmadan hemen önce sunucu tarafında entityCreating eventini tetikler. Bu event iptal edilebilir (CancelEvent()) bir yapıya sahiptir.
Adım 1: Güvenlik Scripti Oluşturun
Sunucunuzun resources/[guvenlik]/dexta_security/ dizinini oluşturun ve bir fxmanifest.lua dosyası tanımlayın:
fx_version 'cerulean'
game 'gta5'
server_script 'server.lua'Adım 2: server.lua İçinde Filtreleme Mantığı Kurun
Sunucu tarafında yasaklı modelleri (örneğin devasa kargo uçakları, tanklar veya sunucuyu çökertmek için kullanılan dev objeler) kara listeye alabiliriz:
-- resources/[guvenlik]/dexta_security/server.lua
local BlacklistedModels = {
[`cargoplane`] = true,
[`rhino`] = true,
[`khanjali`] = true,
[`prop_gold_cont_01`] = true, -- Crash amaçlı kullanılan devasa konteynerler
[`p_ld_stinger_s`] = true
}
AddEventHandler('entityCreating', function(entity)
if not DoesEntityExist(entity) then return end
local model = GetEntityModel(entity)
local entityType = GetEntityType(entity) -- 1: Ped, 2: Vehicle, 3: Object
local owner = NetworkGetEntityOwner(entity)
-- Yasaklı Model Kontrolü
if BlacklistedModels[model] then
CancelEvent()
print(string.format("[GÜVENLİK İHLALİ] Oyuncu ID: %s, Yasaklı Model Spawn Girişimi: %s", tostring(owner), tostring(model)))
-- İsteğe bağlı: Oyuncuyu otomatik sunucudan uzaklaştırma
if owner and owner > 0 then
DropPlayer(owner, "Dexta Security: İzin verilmeyen varlık oluşturma teşebbüsü.")
end
return
end
end)[cargoplane] formatında backtick kullanarak) Lua'da karşılaştırma hızını mikro saniyeler seviyesine indirir ve işlemci yükü oluşturmaz.3. explosionEvent ile Patlama Saldırılarını Engelleme
Rol sunucularında hilecilerin en sık başvurduğu diğer bir yöntem toplu patlamalardır. FiveM'in explosionEvent dinleyicisi sayesinde bir patlama oyuncuların ekranına gönderilmeden önce türü, koordinatları ve hasar çarpanı denetlenebilir.
-- Patlama Türleri Tablosu (Örnek Tehlikeli Tipler)
local BlockedExplosions = {
[1] = true, -- EXP_TAG_GRENADELAUNCHER
[2] = true, -- EXP_TAG_STICKYBOMB
[9] = true, -- EXP_TAG_DIR_STEAM
[29] = true, -- EXP_TAG_BLIMP (Zeplin patlaması - genellikle haritayı temizlemek için basılır)
[32] = true -- EXP_TAG_ORBITAL_CANNON
}
AddEventHandler('explosionEvent', function(sender, ev)
-- sender: Patlamayı tetikleyen oyuncunun Server ID'si
-- ev: Patlama parametreleri tablosu
if BlockedExplosions[ev.explosionType] then
CancelEvent()
print(string.format("[PATLAMA ENGELİ] ID: %s, Tür: %s patlaması engellendi!", sender, ev.explosionType))
-- Şüpheli patlama sıklığı analizi için log tutabilirsiniz
return
end
-- Çok büyük hasar veya anlamsız yarıçap kontrolleri
if ev.damageScale > 5.0 or ev.cameraShake > 5.0 then
CancelEvent()
DropPlayer(sender, "Dexta Security: Anormal patlama verisi tespit edildi.")
end
end)4. Yetkili Muafiyeti (Bypass) Eklemek
Sunucunuzdaki yetkililerin bazen test amaçlı araç spawn etmesi veya admin menüsü kullanması gerekebilir. Bunun için FiveM ACE Perms sistemini devreye sokabilirsiniz:
AddEventHandler('entityCreating', function(entity)
local owner = NetworkGetEntityOwner(entity)
-- Eğer oyuncu admin yetkisine sahipse kontrolden muaf tut
if owner and IsPlayerAceAllowed(owner, 'command') then
return
end
-- Güvenlik doğrulamaları devam eder...
end)Karmaşık mimarilerde güvenlik kuralları yazarken oluşabilecek desenkronizasyonları önlemek, tüm paketinizin baştan sona zırhlı ve optimize olmasını sağlamak için uzman desteğine ihtiyaç duyabilirsiniz. Kendi altyapınızı sıfırdan güvenli kurmak yerine, test edilmiş ve onaylanmış çözümlerimiz için profesyonel Developerlik Hizmeti alabilir veya güvenliği önceden yapılandırılmış DxAV1 - Roleplay Paketi içeriğimizi inceleyebilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. entityCreating eventi sunucuda FPS düşüşüne (Lag) sebep olur mu?
Hayır. Bu yerel bir FXServer C++ çekirdek callback'idir. İçerisinde ağır veritabanı sorguları (MySQL.query) veya karmaşık döngüler çalıştırmadığınız sürece sunucu tick rate'i üzerinde neredeyse sıfır etkiye sahiptir.
2. İzinli polis araçlarının veya ambulansların spawn olması bu sistemden etkilenir mi?
Eğer acil servis araçlarını BlacklistedModels listesine yazmazsanız hiçbir sorun yaşanmaz. Sistem yalnızca kara listede belirttiğiniz veya koşullara uymayan spesifik modelleri engeller.
3. Hileci entityCreating eventini istemci tarafından kapatabilir mi?
Hayır. entityCreating sunucu üzerinde çalışır. İstemci tarafı kodları yalnızca kendi bilgisayarına etki eder; sunucunun C++ ağına ve Lua çalışma ortamına uzaktan müdahale edemez.
