Salut, voila comment créer la base d'un anti Weapon Hack !
Voici une liste des compétences qui vont être apprises :
* Les Timers
* Les fonctions GetPlayerWeapon, BanEx, Et formater une phrase
* Et bien sûr, comment connaitre l'id d'une arme !
But :
Nous voulons contrôler si le joueur possède un minigun pour le bannir, mais le contrôle ne va pas se faire tout seul ! Ca serait tellement simple :p
On va donc utiliser un
Timer qui se mettra en route au début du GameMode et qui contrôlera toutes les secondes (ou autre) si le joueur possède un Minigun.
Un Timer se crée avec SetTimer. Il faudra le placer dans OnGameModeInit.
Un timer doit avoir son callback, ou il effectuera son "action" si le joueur cheat. nous allons donc employer un forward.
Script :
En haut du script
forward Cheat(); // Indique au script le nouveau callback. Le nom du forward doit être le même que celui donné au timer, et au Callback.
public OnGameModeInit()
{
SetTimer("Cheat",1000,true); // Un timer de 1000 Millisecondes (= 1 seconde)
}
Nous venons de créer notre Timer !
Détails : ("Cheat") Le nom du timer
1000 : Le nombre de millisecondes avant un controle
True : Le timer se répète ; False : Il n'est utilisé qu'une fois.
Place maintenant au callback : public Cheat()
public Cheat()
{
for(new i=0; i < MAX_PLAYERS; i++)
{
new Name[MAX_PLAYER_NAME], Ban[44];
GetPlayerName(i, Name, sizeof(Name));
format(Ban, sizeof(Ban), "%s a été banni pour possession de minigun",Name);
if (GetPlayerWeapon(i) == 38)
{
BanEx(i,"Cheat");
SendClientMessageToAll(couleur,Ban);
}
}
return 1;
}
Vous remarquerez que j'ai placé ca : for(new i=0; i < MAX_PLAYERS; i++)
C'est juste une structure de loop (boucle) et il faut faire attention à remplacer playerid par i dans toutes les fonctions de cette loop.
new Name[MAX_PLAYER_NAME], Ban[44];
GetPlayerName(playerid, Name, sizeof(Name));
format(Ban, sizeof(Ban), "%s a été banni pour possession de minigun",Name);
Alors ces 3 phrases servent juste à une chose : Récupérer le nom du joueur qui cheate pour le stocker dans la variable "Name" qui sera elle même réutilisée pour être stockée dans la variable Ban qui est en fait la phrase qui sera utilisée si un joueur est détecté comme cheater.
On aura donc :
Gilux a été banni pour possession de minigun
Ou
Chuck Norris a été banni pour possession de minigun
Ou
R. Domenech a été banni pour possession de minigun

Selon le nom du joueur.
Vous aurez remarqué : %s (enfin j'espère ! :rules)
Ca sert a stocker du texte, donc dans ce cas un nom de joueur.
autres exemples :
%i : Nombre entier (Peut être utilisé pour l'id d'un joueur)
%d : Nombre décimal
etc etc.
Et pour finir, if (GetPlayerWeapon(i) == 38) !
Ce code cherche a savoir si le joueur possède l'arme 38 ???
Oui car 38 = L'id du minigun ! Pour avoir la liste des armes, go
ICI.Donc voilà, vous avez un anti cheat de base qui vous éliminera quelques cheaters sans efforts :p
Vous pouvez par la suite faire la même chose pour les lances roquettes (ID 35 et 36) Et surtout les lunettes de vision nocturnes qui posent des problèmes à tout les joueurs quand un cheater les met (Tout le monde voit ses effets)
Liens utiles :
GetPlayerWeaponBanExSetTimerWeaponsIDsCode a valider ! :p++