Salut,
hélas ce code comprend 2 - 3 défaut....
1. tu change la variable a un dans la commande = simple retard pour la détection
2. tu retourne 1 dès qu'un joueur à le moneyCheat à 1
3. Tu ne tiens pas en compte de la bonne façon des ajouts d'argents
Tu devrais plutôt enregistrer l'argent du joueur dans une variable(oldmoney dans ce code), lorsqu'il y a un changement fait par le serveur, tu ajoute le montant à la variable en question, tu évite de faire un timer trop court (5 ou 10 secondes est bien suffisant)...
donc ca donnerais à peu près ceci:
#define GivePlayerMoney(%0,%1) gLastCash[%0] += %1;\
GivePlayerMoney(%0, %1)
#define DIFFERENCE_MAXIMALE 500//différence maximale autorisée entre l'argent prévu et réel
new gLastCash[MAX_PLAYERS];//argent supposé du joueur
public MoneyHackDetection()
{
new tmp[128], money;
for( new i = 0; i < MAX_PLAYERS; i++)
{
if((money = GetPlayerMoney(i)))
{
if((money-gLastCash[i]) >= DIFFERENCE_MAXIMALE)
{
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
format(tmp, sizeof(tmp), "Le joueur %s est kické pour money hack!", tmp);
SendClientMessageToAll(0xFFFFFFFF, tmp);
Kick(i);
}
gLastCash[i] = money;
}
}
return 1;
}
voilà en espérant que ce code soit bon, tu dois faire à peu près comme avec le code de sasuke, tu ajoute l'argent à la variable gLastCash lorsque tu donne de l'argent à un joueur (voir le premier define, ps. j'ai bien peur qu'il faudrait changer tous tes GivePlayerMoney (dont le premier du define) afin d'éviter que le code fasse de la récursion...(voir ci-dessous)).
Que dire de plus? n'oublie pas le timer (de 5 ou 10 secondes)
#define sGivePlayerMoney(%0,%1) gLastCash[%0] += %1;\
GivePlayerMoney(%0, %1)
++Sim++