GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Salif le 30 Juillet 2013, 15:28:14
-
Bonjour à tous,
J'ai un DM, et je voudrais faire un simple anticheat qui contre les plus gros cheats tel que le "superman" (voler avec le joueur), voler avec la voiture, anti TP, cheat invincibilité, et éventuellement autres choses... Est-ce que vous pourriez m'éclairer sur la démarche à suivre, comment m'y prendre ? Je veux faire ça seul, justement pour m'exercer et je ne veux pas de FS. Merci d'avance.
-
Bonjour Salif.
Je ne m'y connais pas en codage, mais je voudrais te dire que je pense qu'il doit être très difficile (pour le voir souvent sur les serveurs GtaOnline) de contrer ce genre de choses. On a beau les bannir d'un serveur pour du cheat, il y a toujours des moyens de passer autour des règles. Si tu trouves, je pense que tu vas être tranquille longtemps.
Quelqu'un devrait passer t'aider à l'occasion.
-
Merci.
-
Bonjour,
Déjà tu peux savoir que le plus connu des logiciels de cheat (je ne citerai pas le nom) permet à tout les skins du jeu de marcher comme CJ. Si tu n'as pas utiliser UsePedAnims(); dans tout ton serveur alors tu pourras comparer si la personne utilise *****.
Donc, en comparant les styles de marche, comme ceci déjà ça pourra t'aider:
if(UsePedAnims(playerid))
{
// ... ton action
}
Je ne suis pas certain à 100% de ce que j'avance, mais faut essayer :smile:
-
D'accord merci. Ce qui m'intéresse le + à contrer c'est tout ce qui est TP, vol etc
-
Pour la téléportation, tu crées un timer qui check la distance entre le précédent point et l'actuel. Tu désactives le timer par un booléen pendant par exemple 5 secondes lorsque tu téléportes toi-même le joueur.
Pour le fait de voler à pied ou en voiture, tu vérifies l'altitude et le type de véhicule. S'il dépasse les 2.000 mètres (valeur arbitraire) en Infernus ou à pied, tu sais qu'il cheat.
-
Bonjour,
Déjà tu peux savoir que le plus connu des logiciels de cheat (je ne citerai pas le nom) permet à tout les skins du jeu de marcher comme CJ. Si tu n'as pas utiliser UsePedAnims(); dans tout ton serveur alors tu pourras comparer si la personne utilise *****.
Donc, en comparant les styles de marche, comme ceci déjà ça pourra t'aider:
if(UsePedAnims(playerid))
{
// ... ton action
}
Je ne suis pas certain à 100% de ce que j'avance, mais faut essayer :smile:
Je ne pense pas que ce soit la meilleure des choses à faire étant donné que certes, ça peut prouver que la personne a un cheat mais pas qu'elle l'utilise
Et ce qui importe c'est de prouver qu'elle cheat
Donc se servir de ça uniquement pour sanctionner, ce n'est pas vraiment très bon à faire
Sinon, pour l'invincibilité, tu n'as qu'à vérifier si, lorsqu'un joueur tire sur un autre joueur (Tu peux faire ça via OnPlayerTakeDamage il me semble), sa vie descend bien (pour ça tu fais un timer, que tu utiliseras aussi pour vérifier les tp, et tu récupères la vie dans une variable), si la vie est bien égale à la variable moins le dégats censés êtres reçus, tu ne fais rien, mais sinon, ça devrait détecter l'invincibilité
-
Merci, autre chose ? J'essaie de récolter un maximum d'informations.
KonVict92x, je me demande si à cause des lag, ou de l'unsynchro, des joueurs ne vont pas se retrouver banni par l'anticheat alors qu'ils ne cheatent pas ? Les lag ou l'unsynchro ou autre fait que parfois on se fait toucher mais on ne perd rien. Qu'en pensez vous ? Si vous avez des idées pour l'anticheat je suis preneur, lâchez vous je récolte un maximum d'infos. Merci bien.
-
Pour ma part ce que je peux te dire pour ton anti cheat, ne fait jamais d'anticheat qui kick, banni automatiquement car ton anticheat ne sera jamais sûr à 100%.
Ce qu'il faut que tu fasse c'est envoyer un message à tous les membres du staff présents indiquant le type de cheat utilisé.
Ensuite pour la conception des anticheats il faut que tu saches comment fonctionne le cheat en question et, pour cela il faut réfléchir un minimum.
-
Bien sûr c'est évident, je réfléchis de mon côté également ne t'inquiète pas. Je veux avoir votre avis pour voir si je fais bien les choses, si je les fais mal, ou si je ne les fais pas entièrement même. Ca m'aide à faire les choses bien en récoltant plusieurs avis.
Oui, je comptais aussi avertir les admins et ne pas kick/ban, je m'y connais beaucoup en méthode d'administrations, c'est pas un soucis ça, merci à vous en tout cas.
-
Les lag ou l'unsynchro ou autre fait que parfois on se fait toucher mais on ne perd rien. Qu'en pensez vous ?
Ton client et le serveur ne voient pas la même chose lors de ces phénomènes, ce qui explique ceci.
Sinon, pour l'invincibilité, tu n'as qu'à vérifier si, lorsqu'un joueur tire sur un autre joueur (Tu peux faire ça via OnPlayerTakeDamage il me semble), sa vie descend bien (pour ça tu fais un timer, que tu utiliseras aussi pour vérifier les tp, et tu récupères la vie dans une variable), si la vie est bien égale à la variable moins le dégats censés êtres reçus, tu ne fais rien, mais sinon, ça devrait détecter l'invincibilité
Oui, c'est intéressant comme solution, mais quelle est l'utilité ici d'utiliser un timer à moins d'avoir des résultats plus qu'exact ?
En général, quand un joueur prend des dégâts, sa vie ne baisse pas.
Et puis, ton idée ne gère pas les sodas qui redonne de la vie, c'est un coup à se faire bannir quand tu veux rafraîchir ton personnage :laugh:.
Moi je propose une idée base sur la tienne, appuyé par un code:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) {
new Float:playerHealth = 0.0;
GetPlayerHealth(playerid, playerHealth);
if (playerHealth > (100.0 - amount)) {
// HAXXXXXXX
}
return 1;
}
Cependant, si la vie du joueur est maintenant à 1, le code ne fonctionnera pas à moins que le joueur prenne un dégât supérieur à 99.
-
En général, quand un joueur prend des dégâts, sa vie ne baisse pas.
Ah bon ?
Et puis, ton idée ne gère pas les sodas qui redonne de la vie, c'est un coup à se faire bannir quand tu veux rafraîchir ton personnage :laugh:.
Impossible d'utiliser les distributeurs sur mon serveur.
Sinon pour le code je vais tester, merci, ça devrait fonctionner normalement...
-
En général, quand un joueur prend des dégâts, sa vie ne baisse pas.
Ah bon ?
Quand tu utilise ce genre de programme, oui, tu ne perd pas de vie.
Certains permette de perdre qu'un seul point de vie, ce qui permet de mettre certaines protections dans les choux.
-
D'accord. D'autres avis ? Sinon je demande le lock.
-
En quoi un lock du topic t'aiderait à réaliser un anti-cheat ?
-
Le mieux pour avoir un anticheat fiable a 100 % c'est d'instaurer des limites, de vie ( 95 au lieu de 100) de munitions ( 1000 maximum etc ) et ensuite de bannir si le joueur dépasse l'une de ces limites.
Pour l'invincibilité je pense qu'un test' lors de la réception des dommages pourrait être bien, les sodas et autres doivent être supprimées par contre...
-
Gzsume je disais ça car j'ai récolté certains avis et certaines aides, et si il n'y a plus personne pour donner d'autres aides alors autant lock ?
Xolokos c'est vraiment pas bête du tout, mais pour ces vérifications, tu me conseilles un timer ou OnPlayerUpdate (que j'ai jamais utilisé encore) ? Et oui les sodas etc ont été supprimés.
Autre chose, pour le cheat "vol" à pied, si je fais que : si le joueur est à une position Z supérieure a 500 (par exemple), ça le ban ou kick, seulement le joueur peut tout simplement être au mont chiliad... Pour le "vol" en voiture, il peut tout simplement être en train de faire une cascarde et donc ne pas être à la Position Z = 0.. C'est très dérangeant, vous en pensez quoi ?
-
Utilises le plugin MapAndreas (ou ZMap, je ne sais plus le nom exact) et poses la condition si Z (joueur) > GetZ() + 500 && !Avion. Logiquement ça devrait faire son effet.
-
Pour ma part ce que je peux te dire pour ton anti cheat, ne fait jamais d'anticheat qui kick, banni automatiquement car ton anticheat ne sera jamais sûr à 100%.
Ce qu'il faut que tu fasse c'est envoyer un message à tous les membres du staff présents indiquant le type de cheat utilisé.
-
Pas forcément obligé d'empêcher l'utilisation de distributeur, il suffit de récupérer l'animation actuelle du joueur et de vérifier si elle n'est pas la même que celle que l'on a lorsque l'on prend un soda, si l'animation n'est pas exacte, on procède à la vérification de cheat, sinon on continue comme si de rien était
Et en cas où ça ne suffirait pas, une utilisation de IsPlayerInRangeOfPoint bien placée et en ayant des coordonnées correctes (coordonnées de chaque distributeur de soda) règlerait le problème
Une utilisation de ces deux méthodes simultanées pourra permettre l'utilisation de Soda sans risquer de se faire accuser de cheat
Bon, ce n'est pas forcément fiable (la 1ère n'étant pas forcément fonctionnelle étant donné que j'ai tiré cette conclusion rapidement sans vérifier si c'était possible et la deuxième qui permettra à un joueur de cheat si il est à côté d'un Distributeur)
Ou sinon, l'éventualitée où la position d'un joueur soit toujours la même lorsque il prend un soda(à savoir: face au distributeur) permettrai de determiner si il est devant où non, réduisant les zones de cheat à quelques positions très exactes (et donc, les chances d'atterir à ces exactes positions seront très minimes)
-
Pour le airbreak tu n'as qu'a prendre le plugin MapSanAndreas pour la hauteur Z et si le joueur est a 2/4 mètres ou plus sous le sol c'est qu'il cheat airbreak.
( avec une vérification d'animation ça serai pas mal le problème ça serait quand le joueur est dans l'eau si il va a 2 mètres sous l'eau... ).
-
Pourquoi 2/4 mètres sous le sol ? Au dessus du sol tu veux dire ?
-
Le airbreak permet d'aller au dessus comme en dessous, et le nombre de batiment en dessous du sol est faible comparé aux batiments au dessus du sol (sans compter les intérieurs)
Le seul sous-sol qui me vient à l'esprit est celui du commisariat de San Fierro, et il est assez bas tout de même
-
Je dis en dessous car un airbreaker ne va pas s'amuser a faire le tour d'un immeuble donc si il passe en dessous il se fait bannir comme passer en dessous d'une maison et autres bâtiment haut.
-
Oui mais justement, y'a des sous-sols partout dans la map, et d'énormes trous dans la mer (notamment à côté de l'aéroport san fierro, on peux aller très loin sous l'eau)
Il faut trouver une position Z qui n'est pas accessible sans airbreak, mais en attendant les personnes pourraient airbreak au dessus de cette position Z (vu qu'elle doit être relativement basse en vue de la profondeur d'eau de certains endroits...)
-
Pour le armour cheat par exemple, un truc du genre si le joueur a + de 100 en armure, alors il est ban (ou tes admins sont avertis), et tu change tes commandes qui donne des armures pour que ce ne soit pas possible de mettre à 100 ^^
-
C'est pas faux pour les endroit en dessous de la hauteur sinon un simple check de position ou on est en dessous de 0, sinon la méthode de distance parcourue a pied / voiture reste le meilleur système pour le airbreak...
-
Xolokos, comment je pourrais faire pour la méthode de distance parcourue ? Explique moi en bref stp.
Sinon j'ai un petit soucis, si un mec cheat, les admins vont être flood comme quoi untel cheat, vu que je le ban pas et je ne le kick pas, je préviens les admins seulement que quelqu'un cheat, comment je pourrais remédier à ça ?
-
Tu regardes la distance maximum que tu parcours a pied et en avions, si il dépasse cette distance tu le suspectes.