Économisez 20 % avec WELCOMEVoir les promotions
fivem vdm

Qu'est-ce que le VDM (FiveM) ? Définition et prévention

Qu'est-ce que VDM ?

Le « Match à Mort en Véhicule » (MVD) désigne l'utilisation d'un véhicule comme arme pour percuter, tuer ou blesser intentionnellement d'autres joueurs sans justification de jeu de rôle appropriée. Sur les serveurs de jeu de rôle FiveM, le MVD enfreint la loi. règles fondamentales du serveur et perturbe l'expérience de jeu de rôle que recherchent les joueurs.

Pourquoi VDM est important

Les serveurs de jeu de rôle fonctionnent selon le principe d'interaction réaliste. Lorsqu'un joueur percute délibérément d'autres joueurs avec son véhicule sans contexte de jeu de rôle, il :

  • Pauses immersion pour tous les participants
  • Empêche le développement significatif de l'histoire
  • Crée des avantages de jeu injustes
  • Cela conduit à la frustration des joueurs et au déclin de la population du serveur

Scénarios VDM courants

Effacer les violations VDM :

  • Conduire sur les trottoirs pour heurter les piétons
  • Percuter des véhicules à l'arrêt aux feux de circulation
  • Utiliser des véhicules pour bloquer les entrées des hôpitaux
  • Provoquer intentionnellement des collisions frontales

Zones grises nécessitant un contexte :

  • Manœuvres policières lors des poursuites
  • Attaques de véhicules liées à des gangs avec jeu de rôle antérieur
  • Collisions accidentelles pendant les courses
  • Interventions des véhicules d'urgence

Mise en œuvre technique : systèmes anti-VDM

Script de détection côté serveur

-- 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
 
 -- Valider l'entrée
 if not targetId or not damage or not speed then return end
 
 -- Vérifier si les dégâts et la vitesse dépassent les seuils
 if damage > DAMAGE_THRESHOLD and speed > 30 then
 local identifier = GetPlayerIdentifier(source, 0)
 
 -- Initialiser le compteur d'avertissements
 if not vdmWarnings[identifier] then
 vdmWarnings[identifier] = 0
 end
 
 vdmWarnings[identifier] = vdmWarnings[identifier] + 1
 
 -- Enregistrer l'incident
 local logData = {
 attacker = GetPlayerName(source),
 victim = GetPlayerName(targetId),
 damage = damage,
 speed = speed,
 timestamp = os.time()
 }
 
 TriggerEvent('vdm:logIncident', logData)
 
 -- Agir en fonction des avertissements
 if vdmWarnings[identifier] >= VDM_THRESHOLD then
 DropPlayer(source, 'Expulsé pour violations VDM')
 vdmWarnings[identifier] = 0
 else
 TriggerClientEvent('chat:addMessage', source, {
 args = {'^1[WARNING]', 'VDM détecté. Avertissement ' .. 
 vdmWarnings[identifier] .. '/' .. VDM_THRESHOLD}
 })
 end
 end
end)

Surveillance côté client

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

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 -- Convertir en km/h
 
 -- Vérifier la collision avec un piéton
 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)

Configuration du serveur

Ajouts au fichier server.cfg FiveM :

# Configuration anti-VDM définir vdm_enabled true définir vdm_max_warnings 3 définir vdm_damage_threshold 50 définir vdm_speed_threshold 30 définir vdm_log_incidents true définir vdm_webhook "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE" # S'assurer que la ressource anti-vdm démarre garantir anti-vdm

Bonnes pratiques pour les administrateurs de serveur

1. Définition claire des règles

Créez des règles VDM spécifiques dans la documentation de votre serveur :

Règle 2.1 - Match à mort au véhicule (VDM) - L'utilisation de tout véhicule comme arme est interdite - Exceptions : Tactiques policières autorisées, événements sanctionnés - Sanction : 1ère infraction - Avertissement, 2ème - Bannissement de 24 heures, 3ème - Bannissement permanent

2. Protocole de formation du personnel

Former les modérateurs à identifier les VDM :

  • Examiner les journaux de dommages
  • Vérifiez la vitesse du joueur à l'impact
  • Vérifier que le contexte du jeu de rôle existe
  • Preuves documentaires (clips, captures d'écran)

3. Système de signalement des joueurs

-- 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)

Défis courants de mise en œuvre

Faux positifs

  • Détection de collision induite par le décalage
  • Désynchronisation entre les joueurs
  • Accidents légitimes

Solution:Implémenter les périodes de grâce et la vérification du contexte :

-- Vérifier si les joueurs sont dans un scénario actif
local function isInActiveRP(playerId)
 -- Vérifier la base de données pour les scénarios actifs
 -- Retourner vrai si le joueur est dans une poursuite policière, une course, etc.
end

Impact sur les performances

Surveiller l'utilisation des ressources du script :

-- Ajouter à fxmanifest.lua resource_monitor_mode 'yes'

Intégration avec les frameworks populaires

Cadre ESX

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

-- Ajouter les violations VDM au dossier du joueur
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)

Cadre QBCore

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

-- Intégration avec le menu admin
QBCore.Commands.Add('checkvdm', 'Vérifier l\'historique VDM du joueur', {{name = 'id', help = 'ID du joueur'}}, true, function(source, args)
 local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
 if Player then
 -- Récupérer l'historique VDM
 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')

Tester votre système anti-VDM

Suite de tests automatisés

-- tests/vdm_test.lua
local function testVDMDetection()
 -- Simuler un événement de collision
 local mockData = {
 attacker = 1,
 victim = 2,
 damage = 75,
 speed = 45
 }
 
 TriggerEvent('vdm:checkCollision', mockData.victim, mockData.damage, mockData.speed)
 
 -- Vérifier que l'avertissement a été émis
 -- Vérifier si le journal a été créé
 -- Confirmer que le webhook a été déclenché
end

Indicateurs de performance

Efficacité du système de suivi :

-- Schéma de base de données
CREATE TABLE vdm_metrics (
 id INT AUTO_INCREMENT PRIMARY KEY,
 date DATE,
 total_incidents INT,
 warnings_issued INT,
 players_kicked INT,
 false_positives INT
);

Conclusion

La prévention VDM nécessite une mise en œuvre technique, des règles claires et une application cohérente pour maintenir des environnements de jeu de rôle de qualité sur les serveurs FiveM.

Laisser un commentaire