Skip to content

Anti-cheat

Anti-cheat

Toutes les décisions relatives à l'argent et aux stocks sont prises côté serveur. Le client dessine la pompe et signale ce qui s'est passé ; il ne décide jamais de ce que coûte quoi que ce soit ni de la quantité versée.

Ce que le serveur impose

  • Sessions de pompage. L'ouverture d'une pompe demande un jeton de session au serveur. Le paiement nécessite ce cordon et les litres facturés sont limités par la durée pendant laquelle la session a réellement été ouverte au débit configuré. Un client réclamant plus que ce que la pompe aurait pu physiquement délivrer est réduit à ce que l'horloge autorise.
  • Expiration de session. Les jetons sont à usage unique, liés au joueur qui les a ouverts, et supprimés après PumpSessionTimeout. Une session expirée ne facture rien.
  • Vérifications de distance. L'achat, le ravitaillement, la recharge, le remplacement d'une batterie, le remplissage d'un bidon, la commande de stock et chaque action du tableau de bord revérifient côté serveur que le joueur est réellement à cette station, avec une marge de DistanceSlack mètres pour le décalage de position du ped.
  • Limitation du taux (Rate limiting). Chaque événement et callback coûte un jeton provenant d'un seau par joueur qui se recharge à PerSecond et ne s'empile jamais au-delà de Burst. Une touche bloquée fonctionne toujours ; une boucle de spam se heurte à un mur presque immédiatement.
  • Limitation des valeurs (Clamping). Les prix, salaires, commandes, retraits et dépôts font l'objet de vérifications de limites et de types côté serveur. Rien au-dessus de MaxAmount n'est accepté du tout, et les prix sont maintenus dans Config.Refuel.PriceLimits.
  • Vérifications des permissions à chaque action. Les permissions du staff sont revérifiées côté serveur à chaque requête, et ne sont jamais fiables depuis l'UI. L'embauche, le licenciement et la modification de toute personne détenant la permission employees sont réservés au propriétaire, de sorte qu'un employé ne peut pas se promouvoir lui-même. Le transfert et la revente sont réservés au propriétaire et nécessitent de retaper le nom de la station.
  • Le stock et la banque sont l'état du serveur. Une vente ne se produit que si la station a réellement les litres et que le client a réellement l'argent ; les deux côtés bougent dans la même étape côté serveur.
config.lua
Config.AntiCheat = {
    RateLimit = { Burst = 14, PerSecond = 6 },
    MaxLitresPerPay = 200.0,
    LitreGrace = 3.0,
    PumpSessionTimeout = 900,
    DistanceSlack = 15.0,
    MaxAmount = 100000000,
    MaxWage = 25000,
    JerryPourTimeout = 600,
}
Paramètre Objectif
RateLimit Taille de la rafale et taux de recharge du seau d'événements par joueur
MaxLitresPerPay Plafond strict sur une seule session de pompe ou de chargeur, peu importe ce que dit le timing
LitreGrace Marge sur la vérification du timing, en litres. Couvre un tick avec du lag
PumpSessionTimeout Secondes pendant lesquelles une session reste valide
DistanceSlack Mètres supplémentaires autorisés en plus du rayon d'une station
MaxAmount Plafond sur toute valeur monétaire acceptée d'un client
MaxWage Salaire le plus élevé qu'un propriétaire peut attribuer à un employé
JerryPourTimeout Secondes pendant lesquelles un versement inachevé est mémorisé avant que le reste ne puisse plus être réclamé

Ajustement

Les valeurs par défaut conviennent à un serveur normal. Les deux qui valent la peine d'être modifiées :

  • LitreGrace — augmentez-le d'un litre ou deux si des joueurs ayant de mauvaises connexions sont lésés à la pompe. Gardez-le petit ; c'est du carburant gratuit.
  • RateLimit.Burst — augmentez-le si une station-service légitimement occupée commence à refuser des actions. Baissez-le si vous souhaitez un contrôle plus strict.

Assouplir considérablement MaxLitresPerPay ou DistanceSlack supprime le plafond pour lequel ces vérifications existent. Ne les modifiez que si des joueurs honnêtes sont visiblement bloqués.