Bonjour,
J'ai créé un anticheat serveur (money, hp et armure) en m'inspirant d'un aticheat cheat money SERVER SIDE.
Bon, je m'adresse aux personnes qui ont un minimum de connaissances et de logique :happy
Voila mon problème, quelque fois, mon anticheat détecte un cheat alors qu'il ne devrait pas.
Par exemple, quand je donne de l'armure à un joueur avec ma commande, l'anticheat reset l'armure et me dit que le joueur a essayé de cheat. Là est le problème.
Pour faire simple, je vais vous montrer simplement l'anticheat armure:
Le timer qui check si je joueur cheat:
<?php
public AntiCheatPlayer(playerid) // TimerEx exécuté toute les 1 seconde (lancé quand un joueur se connecte et killed quand il se déconnecte)
{
if(IsSpawned[playerid] == 1 && AdminLevel[playerid] == 0)
{
new Float:Armor;
GetPlayerArmour(playerid, Armor);
if(Armor != SSArmor[playerid]) // Armor = l'armure coté client et SSArmor[playerid] coté serveur
{
if(Armor < SSArmor[playerid])
{
SSArmor[playerid] = Armor;
}
else if(Armor > SSArmor[playerid])
{
new username[MAX_PLAYER_NAME], string[150];
GetPlayerName(playerid,username,sizeof(username));
format(string,sizeof(string),"[ANTI-CHEAT]"ECOLOR_WHITE" %s(%d) a tenté de regénérer son armure.", username,playerid);
SendClientAlertToAllAdmins(string);
SetPlayerArmour(playerid,SSArmor[playerid]); // là on remet l'armure du joueur (valeur contenue dans la variable coté serveur)
}
}
}
}La fonction SetPlayerArmourSS:
<?php
stock SetPlayerArmourSS(playerid, Float:Armor)
{
SSArmor[playerid] = Armor;
return SetPlayerArmour(playerid,SSArmor[playerid]);
}
Maintenant la commande pour donner de l'armure à un joueur:
<?php
COMMAND:adarmour(playerid,params[])
{
new string[128], nom[MAX_PLAYER_NAME], ID, Float:armure;
if(AdminLevel[playerid] <=2) return 0; // si le joueur n'est pas admin on stop la commande ici
if(!sscanf(params, "uf", ID,armure))
{
if(IsPlayerConnected(ID))
{
GetPlayerName(ID,nom,sizeof(nom));
format(string,65,"Vous avez fixé l'armure de %s(%d) à %f.",nom,ID,armure);
SendClientMessage(playerid,COLOR_ADMIN,string);
format(string,85,"7[ARMURE] Un Administrateur a fixé l'armure de %s(%d) à %f.",nom,ID,armure);
IRC_GroupSay(gGroupID,IRC_CHANNEL,string);
SetPlayerArmourSS(ID,armure); // on défini l'armure grâce à ma fonction SetPlayerArmourSS
}
else SendClientMessage(playerid,COLOR_ERROR,"Ce joueur n'est pas connecté.");
}
else SendClientMessage(playerid,COLOR_ERROR,"Utilisation: /adarmour (ID/Nom Joueur) (Armure [DOIT ÊTRE INFÉRIEUR OU ÉGAL À 100 !]).");
return 1;
}
Même problème quand un joueur achète de l'armure, malgré que je lui donne l'armure avec ma fonctione SetPlayerArmourSS, quelque fois son armure est reset...
Merci de votre aide ! :)