Всем привет.
С вами Batka1337.
Сегодня я вам покажу и сделаю анти-чит на FlyHack.
Добавляем эти строчки в ежесекундный таймер, у меня это public OnPlayerUpdate
Код:
if(IsPlayerFlyHack(playerid))
{
if(PlayerInfo[playerid][pAdmin] > 0 ) return 0;
GKick(playerid);
SendClientMessage(playerid,0xFF6347AA,"Вы кикнуты по подозрению в читерстве!");
return 1;
}
Далее создаём сам паблик анти-чита
Код:
stock IsPlayerFlyHack(const playerid)
{
if(PlayerInfo[playerid][pAdmin] > 0) return 0;
new Float:X, Float:Y, Float:Z;
new Float:CoordX,Float:CoordY,Float:CoordZ;
GetPlayerPos(playerid, CoordX, CoordY, CoordZ);
GetPlayerVelocity(playerid,X,Y,Z);
if((GetPlayerAnimationIndex(playerid) == 1538 || GetPlayerAnimationIndex(playerid) == 1539 || GetPlayerAnimationIndex(playerid) == 1543) && floatround(floatsqroot(X*X+Y*Y+Z*Z)*170.0) > 10 && CoordZ > 2)
{
if(IsPlayerInRangeOfPoint(playerid, 20.0, 1968.3948,-1198.0753,17.4500)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 2310.9861,-1412.8881,21.6151)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 1241.1094,-2379.7263,8.3145)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 225.6394,-1187.0551,73.4500)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 193.2040,-1224.7693,76.5034)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 196.0067,-1232.3684,76.5034)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 512.7349,-1104.1942,78.8238)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 1283.7939,-806.5845,86.1230)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 20.0, 2531.6001,1568.4032,8.4171)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 60.0, 2105.2651,1916.6781,9.5989)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 150.0,-792.4582,2173.0356,40.0821)) return 0;
else if(IsPlayerInRangeOfPoint(playerid, 150.0,1993.5868,1601.2623,9.2979)) return 0;
return 1;
}
return 0;
}
Далее, делаем паблик кика, чтобы игрок успел прочитать за что кикнуло. Добави это в конец мода.
Код:
forward KickTimer(playerid);
public KickTimer(playerid) return GKick(playerid);
stock GKick(playerid, time = 5000)
{
if(GetPVarInt(playerid, "Kick") == -1) Kick(playerid);
else if(!GetPVarInt(playerid, "Kick")) SetPVarInt(playerid, "Kick", SetTimerEx("KickTimer", time, 0, "d", playerid));
else
{
KillTimer(GetPVarInt(playerid, "Kick"));
SetPVarInt(playerid, "Kick", -1);
GKick(playerid);
}
return 1;
}