Aller au contenu
TLRFRAMEWORK REDM Ma console

Surveillance anti triche

Code : shared/surveillance.lua (règles pures, testées par tests/test_surveillance.lua), server/surveillance/surveillance.lua, client/surveillance/surveillance.lua (envoi unique de la liste des ressources). Écran : panel › Joueurs › Surveillance (web/js/pages/surveillance.js) et console web (même module web/js/pages/surveillance_view.js). Tables : tlr_surv_profiles (410), tlr_surv_alerts (411), tlr_surv_config (412). Migrations 413 à 429 réservées.

Rien n'a été testé dans RedM : À VÉRIFIER EN JEU, en particulier les natives serveur (GetEntityHealth, GetEntityMaxHealth, GetSelectedPedWeapon, GetVehiclePedIsIn, GetEntityPopulationType) et les évènements weaponDamageEvent, explosionEvent, entityCreating (OneSync obligatoire).

Principe

Le serveur relève lui même position, santé et arme de chaque joueur (toutes les 2 s par défaut) et compare avec ce qu'il sait (inventaire, armes portées, journal). Le client n'est jamais cru. Chaque détection produit une alerte horodatée avec ses preuves (position, arme, santé, argent, latence...). Les alertes alimentent un score de risque par joueur.

Score de risque

Somme des poids des alertes non ignorées des 14 derniers jours, chaque poids divisé par deux toutes les 72 h (réglable). Le score est multiplié par 2 pour un compte neuf (première connexion depuis moins de 7 jours et moins de 10 h de jeu), par 1,5 si une seule des deux conditions est vraie. Les comptes déjà présents à l'installation du module ne sont pas considérés comme neufs faute d'historique de temps de jeu. Niveaux : faible (> 0), moyen (≥ 40), élevé (≥ 100).

Réactions graduées

Alerte aux admins (notification en jeu + console), alerte et capture, gel automatique, expulsion, bannissement. Chaque détection a un seuil, un nombre de répétitions sur 10 minutes avant d'appliquer sa réaction (avant : simple alerte), et une réaction. Le bannissement automatique n'est permis que pour les détections certaines (aujourd'hui : évènement injecté) ; ailleurs il retombe sur l'expulsion, même si quelqu'un le force en base. Une alerte par détection et par joueur toutes les 30 s au plus. Exemptés (droit tlr.surv.exempt ou bouton Exempter) : alertes seulement, jamais de sanction. Toute personne ayant accès au panel (tlr.panel.open) est exemptée d’office. Durée du bannissement automatique : Paramètres › Surveillance (0 = définitif).

Droits : tlr.surv.read (voir, recevoir les alertes), tlr.surv.act (geler, ignorer ; expulser et bannir exigent en plus tlr.players.kick / tlr.players.ban), tlr.surv.config (seuils, exemptions). Personne n'agit sur un rang égal ou supérieur.

Fenêtres de grâce

Aucun jugement de déplacement pendant 10 s après tout évènement client du serveur dont le nom contient teleport, revive, respawn, spawn, jail, prison, noclip, bring, goto, setcoords, warp, train ou hotair (tous modules confondus), et pendant 30 s après le chargement du personnage. Un module peut aussi appeler TLR.Surveillance.grace(src, secondes) ou l'export SurveillanceGrace. Un nouveau mode de déplacement scripté doit soit porter un de ces mots, soit appeler la grâce.

Détections, limites et cas légitimes exclus

DétectionMesureExcluLimites, faux positifs possibles
Téléportation impossibledistance entre deux relevés (250 m)véhicule (train, diligence, montgolfière), grâce, staff ayant tlr.admin.selftéléportation d'un autre script dont l'évènement ne porte aucun mot clé ; grosse perte réseau (relevé tardif)
Vitesse impossiblem/s entre deux relevés (45)idem, écart < 1 schute d'une falaise, ragdoll projeté par une explosion ; 3 répétitions requises
Vol ou nocliprelevés consécutifs en montée de plus de 4 m (4)véhicule, grâceascenseur ou monte charge scripté ; le serveur ne connaît pas la hauteur du sol, un vol à altitude constante n'est pas vu
Santé anormalesanté au dessus du maximum du jeu (50 points)aucunun script de soin qui monte la santé au delà du maximum (toniques spéciaux)
Invincibilitécoups reçus sans perte de santé (6 relevés)grâcecoups à 0 dégât, armures de scripts tiers ; repose sur weaponDamageEvent
Arme non possédéearme en main absente des armes portées connues du serveur (2 relevés)mains nues, lasso, canne à pêche, lanternes, torche, jumelles, appareil photo, détecteur, marteau ; grâcearme donnée par un script tiers sans passer par TLR.Weapons ; arme ramassée sur un PNJ si un module le permet
Munitions incohérentesréserve rapportée par le client au dessus de celle stockée (5 balles):branchée sur le journal ammo.reserve.higher existant ; latence lors d'un rechargement
Argent sans transactionhausse des objets dollar et cent non passée par l'inventaire (50 $ par 30 s)tout mouvement via TLR.Inventory (add, remove, applyDeltas, pickup, drop...) ou un rechargement venu des modules du cœur (boutiques, coffres, inventaire, artisanat, RPC)un script tiers qui écrit l'inventaire en base puis recharge : ajouter son dossier à RELOAD_OK
Objets sans transactionmême principe sur les autres objets (5 unités)idemidem
Rafale de requêtesrefus RPC (débit, action inconnue, permission) par minute (15):interface boguée qui boucle sur une action refusée
Événement injectéappel d'un évènement appât qu'aucun client honnête n'envoie (tlr:economy:server:addMoney, tlr:inventory:server:addItem, tlr:admin:server:setGroup, tlr:jobs:server:setJob, tlr:weapons:server:giveWeapon):certaine tant qu'aucun script n'utilise ces noms : ne jamais les réutiliser
Entités en masseentités créées par script (population 7) par 10 s (25)population ambiantescripts légitimes qui posent beaucoup d'objets d'un coup chez un joueur (décors, camp) : monter le seuil
Explosions en masseexplosions attribuées au joueur par 10 s (4):dynamite en rafale lors d'un évènement de mine ou de braquage
Ressource inconnueressources démarrées chez le client et absentes du serveur_cfx_internalsimple indice : un menu de triche injecté ne s'enregistre pas comme ressource, et un client modifié peut mentir

Écran

Joueurs triés par score (nouveaux comptes en avant à score égal), en ligne et hors ligne avec alertes récentes. Fiche : score, relevé actuel, historique des alertes avec preuves, boutons Observer (caméra d'observation ; depuis la console, capture), Geler / Dégeler, Expulser, Bannir, Ignorer l'alerte, Marquer traitée, Exempter. Onglet Réglages des détections : activation, seuil, répétitions, réaction.

Source : tlr_core/docs/SURVEILLANCE.md