Principes de base de l'anticheat FiveM : ce qu'il faut faire et ce qu'aucun anticheat ne peut faire
Principes de base de l'anticheat FiveM : valider sur le serveur d'abord, limites d'entité OneSync, annuler les explosions, journaux de webhook Discord, interdictions txAdmin et ce qu'aucun anticheat ne peut faire.
Les cheaters font partie de l'exécution d'un serveur public. Ils spawner des véhicules, font exploser la carte, se donnent de l'argent et des armes, et éloignent vos joueurs honnêtes. Une seule ressource « anticheat » ne fixera pas cela. Ce qui fonctionne est quelques couches, en commençant par la plus importante : ne faites pas confiance au client.
Couche 1 : valider sur le serveur
La plupart des triche sur un serveur de roleplay ne sont pas des hacks du moteur. C'est quelqu'un qui déclenche vos propres événements avec des valeurs qu'il a choisies. Corrigez cela d'abord, et une grande partie du problème disparaît.
- Calculez les prix, les récompenses et les montants sur le serveur.
- Utilisez
source, jamais un id de joueur envoyé par le client. - Vérifiez l'emploi, la distance et les délais d'attente avant d'agir.
La méthode complète avec code est dans Sécuriser les événements serveur. Si vous ne faites qu'une seule chose de cet article, faites cela.
Couche 2 : contrôle des entités avec OneSync
Avec OneSync, le serveur connaît les entités (véhicules, peds, objets) et peut contrôler qui les crée. C'est ce qui vous permet d'arrêter les cheaters de spawnner des choses.
- Verrouillage des entités. OneSync a un mode de verrouillage d'entité où les entités créées par le client sont bloquées ou restreintes. C'est puissant, mais cela casse n'importe quel script qui spawnne des véhicules ou des objets du client. Lisez la documentation OneSync pour le paramètre exact dans votre construction avant de l'activer, et déplacez d'abord le spawning sur le serveur. Voir spawning de véhicules côté serveur.
- Événement
entityCreating. Le serveur peut inspecter les entités à mesure qu'elles sont créées et annuler celles que vous ne voulez pas.
AddEventHandler('entityCreating', function(entity)
local model = GetEntityModel(entity)
if model == `jet` then
CancelEvent()
end
end)Cet exemple refuse de créer un jet de n'importe où. Construisez votre propre liste de modèles que personne sur votre serveur ne devrait créer, et soyez prudent : une règle trop large annule les entités de vos propres scripts.
OneSync doit être activé pour ces fonctionnalités. Voir OneSync et limites de joueurs.
Couche 3 : gérer les événements du jeu
FiveM envoie certaines actions du jeu au serveur sous forme d'événements, et le serveur peut les annuler. Deux courants :
Explosions
AddEventHandler('explosionEvent', function(sender, ev)
-- sender is the player who caused the explosion
-- ev holds the explosion type and position
CancelEvent()
end)Annuler chaque explosion arrêterait aussi les grenades et vos propres explosions scripted. Réduisez-le avec les données dans ev. Par exemple, regardez ev.explosionType et n'annulez que les types qui ne devraient jamais se produire sur votre serveur, ou enregistrez-les d'abord pour voir ce que le gameplay normal produit.
local blocked = { [1] = true } -- example: replace with the types you decide to block
AddEventHandler('explosionEvent', function(sender, ev)
if blocked[ev.explosionType] then
CancelEvent()
print(('Blocked explosion from player %s'):format(sender))
end
end)Armes
Le serveur reçoit aussi des événements pour donner, enlever et tirer des armes, tels que giveWeaponEvent. Les cheaters qui se donnent des armes déclenchent ceux-ci. Si votre inventaire gère les armes, comparez ce que l'événement veut donner avec ce que le joueur possède, et annulez-le quand ça ne correspond pas. Enregistrez d'abord, appliquez plus tard, pour ne pas bloquer de vrais joueurs par accident.
D'autres événements du jeu existent pour le feu, les projectiles et les dégâts des armes. Cherchez-les dans la documentation Cfx avant de les utiliser, et testez sur un serveur de développement.
Attention : un gestionnaire d'événement du jeu trop strict punit les joueurs honnêtes. Commencez en mode enregistrement uniquement pendant quelques jours, lisez les journaux, puis appliquez.
Couche 4 : enregistrer le comportement suspect
Ne bannissez pas sur un seul signal. Enregistrez, lisez, puis agissez. Un webhook Discord est un endroit facile pour envoyer les journaux que le personnel peut voir.
local WEBHOOK = GetConvar('anticheat_webhook', '')
local function logToDiscord(text)
if WEBHOOK == '' then return end
PerformHttpRequest(WEBHOOK, function() end, 'POST',
json.encode({ username = 'Anticheat', content = text }),
{ ['Content-Type'] = 'application/json' })
end
AddEventHandler('explosionEvent', function(sender, ev)
logToDiscord(('Explosion from %s (%s), type %s'):format(GetPlayerName(sender), sender, ev.explosionType))
end)Définissez l'URL du webhook dans server.cfg avec set anticheat_webhook "https://...", pas dans le script, et gardez-le privé. Quiconque possède l'URL peut poster sur votre canal.
Quoi enregistrer : les contrôles côté serveur échoués (montants impossibles, mauvaise distance), les explosions bloquées, les spawns d'entité que vous avez annulés, le spam d'événement répété. Incluez le nom du joueur, l'id serveur et un identificateur tel que la licence, pour pouvoir les bannir.
Couche 5 : agir avec txAdmin
Quand les journaux montrent un cheater, supprimez-le. Utilisez txAdmin pour avertir ou bannir, pour que l'action soit enregistrée et survive aux redémarrages. Voir modérer avec txAdmin. Dans un script, DropPlayer(source, 'reason') expulse un joueur, mais un bannissement devrait passer par vos outils de modération pour que les identificateurs soient enregistrés.
Ce qu'aucun anticheat ne peut faire
Soyez honnête sur les limites.
- Le client appartient au cheater. N'importe quoi vérifier seulement sur le client peut être éteint. Seules les vérifications serveur sont fiables.
- Aucun outil n'attrape tout. De nouvelles astuces apparaissent, et la détection est toujours un pas derrière.
- L'obfuscation n'est pas la sécurité. Les noms d'événements cachés et les tokens « secrets » dans le code client peuvent être lus.
- Le code anticheat gratuit ou divulgué est un risque. Les développeurs de triche le lisent aussi, et une partie contient des portes dérobées. Soyez prudent avec les ressources de sources inconnues.
- Les gens comptent toujours. Le personnel actif, un système de rapport clair et les bannissements rapides font plus que n'importe quel script.
Combinez les couches, gardez les ressources à jour et examinez vos journaux. Cela rend votre serveur une cible difficile par rapport aux autres.
Liste de vérification
| Symptôme | Correction |
|---|---|
| Les joueurs obtiennent gratuitement de l'argent ou des articles | Validez les événements sur le serveur, voir le guide des événements |
| Les cheaters spawner des véhicules et des objets | Contrôles d'entité OneSync et entityCreating ; déplacez le spawning sur le serveur |
| Les explosions à travers la carte | Gestionnaire explosionEvent avec CancelEvent, rétrécissez par type |
| Les astuces de donation d'armes | Vérifiez les événements d'armes par rapport à votre inventaire, enregistrez d'abord |
| Aucune idée de ce que font les cheaters | Envoyez les journaux à un webhook Discord conservé dans une convar |
| Cheater trouvé | Bannissez depuis txAdmin avec les identificateurs enregistrés |
| La règle bloque les joueurs honnêtes | Basculez en mode enregistrement uniquement et réduisez la condition |
Réponses rapides
Ai-je besoin d'une ressource anticheat ?
D'abord sécurisez vos propres scripts, car c'est ce qui arrête les abus les plus courants. Une ressource anticheat peut ajouter la détection par-dessus, mais ce n'est pas un remplacement pour la validation côté serveur.
Un anticheat peut-il arrêter chaque cheater ?
Non. Les cheaters s'adaptent, et le client du jeu est sur leur machine. L'objectif est de rendre la triche difficile, de détecter l'évident, et d'enlever rapidement les contrevenants.
Est-il sûr d'annuler les événements du jeu sur le serveur ?
Oui, avec prudence. Annuler un événement l'arrête pour tout le monde, donc testez que le gameplay normal tel que vos propres scripts qui créent des explosions fonctionnent toujours avant d'exécuter une règle sur un serveur en direct.
Des scripts sans ce problème
CCTV Security CamerasDes caméras à placer, une tablette multi-vues en direct et des photos imprimées comme preuves.Voir le script →
Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →
Tebex TemplateUn thème premium sans code pour votre boutique Tebex, entièrement modifiable depuis le panel Tebex.Voir le script →