$ ABD Doları
  • $ ABD Doları
  • € AVRO
  • £ GBP
  • $ Avustralya Doları
  • R$ BRL
  • İsviçre Frangı İsviçre Frangı
  • ¥ Japon Yeni
fivem vdm

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ığı rol yapma deneyimini bozar.

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ı

-- resources/anti-vdm/server.lua
local vdmWarnings = {}
local VDM_THRESHOLD = 3
local DAMAGE_THRESHOLD = 50

RegisterServerEvent('vdm:checkCollision')
AddEventHandler('vdm:checkCollision', function(targetId, damage, speed)
 local source = source
 
 -- Validate input
 if not targetId or not damage or not speed then return end
 
 -- Check if damage and speed exceed thresholds
 if damage > DAMAGE_THRESHOLD and speed > 30 then
 local identifier = GetPlayerIdentifier(source, 0)
 
 -- Initialize warning count
 if not vdmWarnings[identifier] then
 vdmWarnings[identifier] = 0
 end
 
 vdmWarnings[identifier] = vdmWarnings[identifier] + 1
 
 -- Log incident
 local logData = {
 attacker = GetPlayerName(source),
 victim = GetPlayerName(targetId),
 damage = damage,
 speed = speed,
 timestamp = os.time()
 }
 
 TriggerEvent('vdm:logIncident', logData)
 
 -- Take action based on warnings
 if vdmWarnings[identifier] >= VDM_THRESHOLD then
 DropPlayer(source, 'Kicked for VDM violations')
 vdmWarnings[identifier] = 0
 else
 TriggerClientEvent('chat:addMessage', source, {
 args = {'^1[WARNING]', 'VDM detected. Warning ' .. 
 vdmWarnings[identifier] .. '/' .. VDM_THRESHOLD}
 })
 end
 end
end)

İstemci Tarafı İzleme

-- resources/anti-vdm/client.lua
local lastCollision = 0
local COLLISION_COOLDOWN = 5000 -- 5 seconds

Citizen.CreateThread(function()
 while true do
 Citizen.Wait(0)
 local playerPed = PlayerPedId()
 
 if IsPedInAnyVehicle(playerPed, false) then
 local vehicle = GetVehiclePedIsIn(playerPed, false)
 
 if GetPedInVehicleSeat(vehicle, -1) == playerPed then
 if HasEntityCollidedWithAnything(vehicle) then
 local currentTime = GetGameTimer()
 
 if currentTime - lastCollision > COLLISION_COOLDOWN then
 local speed = GetEntitySpeed(vehicle) * 3.6 -- Convert to km/h
 
 -- Check for pedestrian collision
 local coords = GetEntityCoords(vehicle)
 local closestPed = GetClosestPed(coords.x, coords.y, coords.z, 
 5.0, 1, 0, 0, 0, -1)
 
 if DoesEntityExist(closestPed) and IsEntityAPed(closestPed) then
 local targetPlayer = NetworkGetPlayerIndexFromPed(closestPed)
 
 if targetPlayer ~= -1 then
 local damage = GetEntityHealth(closestPed)
 TriggerServerEvent('vdm:checkCollision', 
 GetPlayerServerId(targetPlayer), 
 damage, speed)
 end
 end
 
 lastCollision = currentTime
 end
 end
 end
 end
 end
end)

Sunucu Yapılandırması

FiveM server.cfg eklemeleri:

# Anti-VDM Configuration
set vdm_enabled true
set vdm_max_warnings 3
set vdm_damage_threshold 50
set vdm_speed_threshold 30
set vdm_log_incidents true
set vdm_webhook "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE"

# Ensure anti-vdm resource starts
ensure anti-vdm

Sunucu Yöneticileri için En İyi Uygulamalar

1. Kural Tanımını Netleştirin

Sunucu belgelerinizde belirli VDM kuralları oluşturun:

Rule 2.1 - Vehicle Deathmatch (VDM)
- Using any vehicle as a weapon is prohibited
- Exceptions: Authorized police tactics, sanctioned events
- Punishment: 1st offense - Warning, 2nd - 24h ban, 3rd - Permanent ban

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

-- Simple reporting command
RegisterCommand('reportvdm', function(source, args, rawCommand)
 local targetId = tonumber(args[1])
 local reason = table.concat(args, ' ', 2)
 
 if not targetId or not reason then
 TriggerClientEvent('chat:addMessage', source, {
 args = {'^1[ERROR]', 'Usage: /reportvdm [player_id] [reason]'}
 })
 return
 end
 
 -- Create report ticket
 local report = {
 reporter = GetPlayerName(source),
 reported = GetPlayerName(targetId),
 reason = reason,
 timestamp = os.date('%Y-%m-%d %H:%M:%S'),
 status = 'pending'
 }
 
 -- Store in database or send to Discord
 TriggerEvent('vdm:createReport', report)
end, 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:

-- Check if players are in active scenario
local function isInActiveRP(playerId)
 -- Check database for active scenarios
 -- Return true if player is in police chase, race, etc.
end

Performans Etkisi

Komut dosyası kaynak kullanımını izle:

-- Add to fxmanifest.lua
resource_monitor_mode 'yes'

Popüler Çerçevelerle Entegrasyon

ESX Framework

ESX = nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

-- Add VDM violations to player record
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

local QBCore = exports['qb-core']:GetCoreObject()

-- Integration with admin menu
QBCore.Commands.Add('checkvdm', 'Check player VDM history', {{name = 'id', help = 'Player ID'}}, true, function(source, args)
 local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
 if Player then
 -- Fetch VDM history
 MySQL.Async.fetchAll('SELECT * FROM vdm_logs WHERE citizenid = @citizenid', {
 ['@citizenid'] = Player.PlayerData.citizenid
 }, function(result)
 TriggerClientEvent('qb-admin:client:showVDMHistory', source, result)
 end)
 end
end, 'admin')

Anti-VDM Sisteminizi Test Etme

Otomatik Test Paketi

-- tests/vdm_test.lua
local function testVDMDetection()
 -- Simulate collision event
 local mockData = {
 attacker = 1,
 victim = 2,
 damage = 75,
 speed = 45
 }
 
 TriggerEvent('vdm:checkCollision', mockData.victim, mockData.damage, mockData.speed)
 
 -- Verify warning was issued
 -- Check if log was created
 -- Confirm webhook was triggered
end

Performans Ölçümleri

Sistem etkinliğini takip edin:

-- Database schema
CREATE TABLE vdm_metrics (
 id INT AUTO_INCREMENT PRIMARY KEY,
 date DATE,
 total_incidents INT,
 warnings_issued INT,
 players_kicked INT,
 false_positives 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.

Bir yanıt yazın