
VDM (FiveM) Nedir? Tanım ve Önleme
VDM Nedir?
Araç Ölüm Maçı (VDM), uygun rol yapma gerekçesi olmadan diğer oyunculara kasıtlı olarak çarpmak, öldürmek veya yaralamak için bir aracı silah olarak kullanma eylemini ifade eder. FiveM rol yapma sunucularında, VDM ihlal eder temel sunucu kuralları ve oyuncuların aradığı sürükleyici deneyimi bozuyor.
VDM Neden Önemlidir?
Rol yapma sunucuları gerçekçi etkileşim ilkesine göre çalışır. Bir oyuncu rol yapma bağlamı olmadan aracını kasıtlı olarak başkalarına çarptığında, bu:
- Tüm katılımcılar için daldırma molaları
- Anlamlı hikaye gelişimini engeller
- Haksız oyun avantajları yaratır
- Oyuncuların hayal kırıklığına uğramasına ve sunucu nüfusunun azalmasına yol açar
Yaygın VDM Senaryoları
VDM İhlallerini Temizle:
- Yayalara çarpmak için kaldırımlara çıkmak
- Trafik ışıklarında duran araçlara çarpma
- Hastane girişlerini araç kullanarak kapatmak
- Kasıtlı olarak önden çarpışmalara neden olmak
Bağlam Gerektiren Gri Alanlar:
- Polis kovalamaca sırasında çukur manevraları yapıyor
- Önceki rol yapma oyunuyla çeteyle ilgili araç saldırıları
- Yarışlar sırasında meydana gelen kazalar
- Acil araç müdahaleleri
Teknik Uygulama: Anti-VDM Sistemleri
Sunucu Tarafı Algılama Komut Dosyası
-- kaynaklar/anti-vdm/server.lua yerel vdmWarnings = {} yerel VDM_THRESHOLD = 3 yerel DAMAGE_THRESHOLD = 50 RegisterServerEvent('vdm:checkCollision') AddEventHandler('vdm:checkCollision', function(targetId, damage, speed) yerel kaynak = kaynak -- Girişi doğrula, targetId veya damage veya speed değilse döndür son -- Hasar ve hızın eşikleri aşıp aşmadığını kontrol et hasar > DAMAGE_THRESHOLD ve hız > 30 ise yerel tanımlayıcı = GetPlayerIdentifier(source, 0) -- Uyarı sayısını başlat vdmWarnings[identifier] değilse vdmWarnings[identifier] = 0 son vdmWarnings[identifier] = vdmWarnings[identifier] + 1 -- Olayı günlüğe kaydet yerel logData = { saldırgan = GetPlayerName(source), victim = GetPlayerName(targetId), damage = damage, speed = speed, timestamp = os.time() } TriggerEvent('vdm:logIncident', logData) -- Uyarılara göre işlem yap if vdmWarnings[identifier] >= VDM_THRESHOLD then DropPlayer(source, 'VDM ihlalleri nedeniyle atıldı') vdmWarnings[identifier] = 0 else TriggerClientEvent('chat:addMessage', source, { args = {'^1[WARNING]', 'VDM algılandı. Uyarı ' .. vdmWarnings[identifier] .. '/' .. VDM_THRESHOLD} }) end end end)
İstemci Tarafı İzleme
-- resources/anti-vdm/client.lua yerel lastCollision = 0 yerel COLLISION_COOLDOWN = 5000 -- 5 saniye Citizen.CreateThread(function() while true do Citizen.Wait(0) yerel playerPed = PlayerPedId() eğer IsPedInAnyVehicle(playerPed, false) ise yerel vehicle = GetVehiclePedIsIn(playerPed, false) eğer GetPedInVehicleSeat(vehicle, -1) == playerPed ise eğer HasEntityCollidedWithAnything(vehicle) ise yerel currentTime = GetGameTimer() eğer currentTime - lastCollision > COLLISION_COOLDOWN ise yerel speed = GetEntitySpeed(vehicle) * 3.6 -- km/saate dönüştür -- Yaya çarpışmasını kontrol et yerel coords = GetEntityCoords(vehicle) yerel closestPed = GetClosestPed(coords.x, coords.y, coords.z, 5.0, 1, 0, 0, 0, -1) Eğer DoesEntityExist(closestPed) ve IsEntityAPed(closestPed) ise yerel hedefOyuncu = NetworkGetPlayerIndexFromPed(closestPed) Eğer hedefOyuncu ~= -1 ise yerel hasar = GetEntityHealth(closestPed) TriggerServerEvent('vdm:checkCollision', GetPlayerServerId(targetPlayer), hasar, hız) son son sonÇarpışma = geçerliZaman son son son son son)
Sunucu Yapılandırması
FiveM server.cfg eklemeleri:
# Anti-VDM Yapılandırması vdm_enabled'ı doğru olarak ayarlayın vdm_max_warnings'i 3 olarak ayarlayın vdm_damage_threshold'u 50 olarak ayarlayın vdm_speed_threshold'u 30 olarak ayarlayın vdm_log_incidents'ı doğru olarak ayarlayın vdm_webhook "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE" # Anti-vdm kaynağının başladığından emin olun anti-vdm'yi sağlayın
Sunucu Yöneticileri için En İyi Uygulamalar
1. Kural Tanımını Netleştirin
Sunucu belgelerinizde belirli VDM kuralları oluşturun:
Kural 2.1 - Araç Ölüm Maçı (VDM) - Herhangi bir aracı silah olarak kullanmak yasaktır - İstisnalar: Yetkili polis taktikleri, yaptırımlı etkinlikler - Ceza: 1. ihlal - Uyarı, 2. ihlal - 24 saat yasaklama, 3. ihlal - Kalıcı yasaklama
2. Personel Eğitim Protokolü
Moderatörleri VDM'yi tespit edecek şekilde eğitin:
- Hasar kayıtlarını inceleyin
- Oyuncunun çarpma anındaki hızını kontrol edin
- Rol yapma bağlamının var olduğunu doğrulayın
- Belge kanıtı (klipler, ekran görüntüleri)
3. Oyuncu Raporlama Sistemi
-- Basit raporlama komutu RegisterCommand('reportvdm', function(source, args, rawCommand) yerel targetId = tonumber(args[1]) yerel reason = table.concat(args, ' ', 2) hedefId veya reason değilse TriggerClientEvent('chat:addMessage', source, { args = {'^1[ERROR]', 'Kullanım: /reportvdm [player_id] [reason]'} }) return end -- Rapor bileti oluştur yerel report = { reporter = GetPlayerName(source), reports = GetPlayerName(targetId), reason = reason, timestamp = os.date('%Y-%m-%d %H:%M:%S'), status = 'pending' } -- Veritabanında sakla veya Discord'a gönder TriggerEvent('vdm:createReport', rapor) son, false)
Yaygın Uygulama Zorlukları
Yanlış Pozitifler
- Gecikme kaynaklı çarpışma tespiti
- Oyuncular arasında senkronizasyon kaybı
- Meşru kazalar
Çözüm: Lütuf sürelerini ve bağlam denetimini uygulayın:
-- Oyuncuların aktif senaryoda olup olmadığını kontrol et yerel fonksiyon isInActiveRP(playerId) -- Aktif senaryolar için veritabanını kontrol et -- Oyuncunun polis kovalamacasında, yarışta vb. olup olmadığını doğru olarak döndür son
Performans Etkisi
Komut dosyası kaynak kullanımını izle:
-- fxmanifest.lua resource_monitor_mode'a 'yes' ekleyin
Popüler Çerçevelerle Entegrasyon
ESX Framework
ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) -- VDM ihlallerini oynatıcı kaydına ekle RegisterServerEvent('vdm:recordViolation') AddEventHandler('vdm:recordViolation', function(targetId) local xPlayer = ESX.GetPlayerFromId(source) MySQL.Async.execute('INSERT INTO vdm_violations SET identifier = @identifier, timestamp = @timestamp', { ['@identifier'] = xPlayer.identifier, ['@timestamp'] = os.time() }) end)
QBCore Framework
yerel QBCore = exports['qb-core']:GetCoreObject() -- Yönetici menüsüyle entegrasyon QBCore.Commands.Add('checkvdm', 'Oyuncu VDM geçmişini kontrol et', {{name = 'id', help = 'Oyuncu Kimliği'}}, true, function(kaynak, args) yerel Player = QBCore.Functions.GetPlayer(tonumber(args[1])) eğer Player then -- VDM geçmişini getir MySQL.Async.fetchAll('SELECT * FROM vdm_logs WHERE citizenid = @citizenid', { ['@citizenid'] = Player.PlayerData.citizenid }, function(sonuç) TriggerClientEvent('qb-admin:client:showVDMHistory', kaynak, sonuç) end) end end, 'yönetici')
Anti-VDM Sisteminizi Test Etme
Otomatik Test Paketi
-- tests/vdm_test.lua yerel fonksiyon testVDMDetection() -- Çarpışma olayını simüle et yerel mockData = { saldırgan = 1, kurban = 2, hasar = 75, hız = 45 } TriggerEvent('vdm:checkCollision', mockData.victim, mockData.damage, mockData.speed) -- Uyarının verildiğini doğrula -- Günlüğün oluşturulup oluşturulmadığını kontrol et -- Webhook'un tetiklendiğini doğrula son
Performans Ölçümleri
Sistem etkinliğini takip edin:
-- Veritabanı şeması CREATE TABLE vdm_metrics ( id INT OTOMATİK_ARTTIRMA BİRİNCİL ANAHTAR, tarih TARİH, toplam_olay_sayısı INT, verilen_uyarılar_INT, atılan_oyuncular_INT, yanlış_pozitifler INT );
Çözüm
VDM önleme, FiveM sunucularında kaliteli rol yapma ortamlarının sürdürülmesi için teknik uygulama, net kurallar ve tutarlı yaptırım gerektirir.






