Seregamil
Мастер
Всем привет, решил попробовать написать свой первый анти чит,
Пока выкладываю свои наработки, дабы извлечь все неполадки и баги...
Скрипт работает как FS так и в моде
У меня он в FS, все оружие которое запрещено на сервере вычерните из списка)
По крайней мере у меня за IP в чате, за превышения лимита скорости и за оружие запретное ловил, тюнинг и джет пак я не проверял если честно)
Автор: Seregamil
О всех багах, недостатках и пожеланиях сообщайте в теме)
P.S. не придираться что половина на англ.языке, переключать лень было)
Пока выкладываю свои наработки, дабы извлечь все неполадки и баги...
Скрипт работает как FS так и в моде
У меня он в FS, все оружие которое запрещено на сервере вычерните из списка)
PHP:
/*
Анти чит для Sa-Mp Сервера
Автор Seregamil
*/
#include <a_samp>
#define FloodTime 5
forward AntiCheat();
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Anti-Cheat By Seregamil...Loading - 100%");
print("--------------------------------------\n");
SetTimer("AntiCheat", 100,1);
return 1;
}
public OnFilterScriptExit()
{
print("\n--------------------------------------");
print(" Anti-Cheat By Seregamil...Unloading - 100%");
print("--------------------------------------\n");
return 1;
}
public OnPlayerConnect(playerid)
{
new playerip[30],string[64], pName[MAX_PLAYER_NAME];
GetPlayerIp(playerid, playerip, sizeof(playerip));GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
format(string,sizeof string,">> Player [ %s ] is connected [ip: %s]",pName, playerip);
SendClientMessageToAll(0xFFFFFFAA,string);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new string[64],name[MAX_PLAYER_NAME],Float:hp,Float:ar,playerip[30];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);GetPlayerHealth(playerid, hp);GetPlayerArmour(playerid, ar);GetPlayerIp(playerid, playerip, sizeof(playerip));
switch(reason)
{
case 0: format(string,sizeof string,"The player %s left our server. (Disconnected) [%s] [Health: %0.f] [Armour: %0.f]",name , playerip, hp, ar);
case 1: format(string,sizeof string,"The player %s left our server. (Exit) [%s] [Health: %0.f] [Armour: %0.f]",name,playerip, hp, ar);
case 2: format(string,sizeof string,"The player %s left our server. (Kicked | Banned) [%s] [Health: %0.f] [Armour: %0.f]",name,playerip, hp, ar);
}
SendClientMessageToAll(0xFFFFFFAA,string);
return 1;
}
public OnPlayerText(playerid,text[])
{
if ( containsAnyIP(text) )
{
SendClientMessage( playerid, 0xAFAFAFAA, "Реклама запрещена." );
return false;
}
if(GetPVarInt(playerid,"CountFlood") > gettime())
{
SendClientMessage(playerid,-1,"No Floood");
return false;
}
SetPVarInt(playerid,"CountFlood",gettime() + FloodTime);
return 1;
}
public AntiCheat()
{
/*Anti-Weapon_Hack*/
/*Ручные*/
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(GPW(i) == 35){KMes(i);Kick(i);return true;}//Raketomet
if(GPW(i) == 36){KMes(i);Kick(i);return true;}//raketomet2
if(GPW(i) == 37){KMes(i);Kick(i);return true;}//ognemet
if(GPW(i) == 38){KMes(i);Kick(i);return true;}//миниган
/*Anti Big Ping*/
if(GetPlayerPing(i) > 500){SendClientMessage(i,0xAFAFAFAA,"[Anti-Cheat] Вы удалены с сервера из-за высокого пинга");Kick(i);return true;}
/*Anti Speed Hack & Anti Jet Pack*/
if(GetSpeedVehicleKM(i) > 300){KMes(i);Kick(i);return true;}
if(GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK){KMes(i);Kick(i);return true;}
}
return 1;
}
public OnVehicleMod(playerid,vehicleid,componentid)
{
if(!(IsPlayerInRangeOfPoint(playerid,15.0,616.7820,-74.8151,997.6350) || IsPlayerInRangeOfPoint(playerid,15.0,615.2851,-124.2390,997.6350) || IsPlayerInRangeOfPoint(playerid,15.0,617.5380,-1.9900,1000.6829)) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
KMes(playerid);
Kick(playerid);
}
return true;
}
stock GetSpeedVehicleKM(playerid) // проверяет скорость
{
new Float:PosX, Float:PosY, Float:PosZ, Float:PlayerSpeedDistance;
GetVehicleVelocity(GetPlayerVehicleID(playerid), PosX, PosY, PosZ);
PlayerSpeedDistance = floatmul(floatsqroot(floatadd(floatadd(floatpower( PosX, 2), floatpower(PosY, 2)), floatpower(PosZ, 2))), 170.0);
new spe = floatround(PlayerSpeedDistance * 1);
return spe;
}
stock KMes(playerid)return SendClientMessage(playerid,0xAFAFAFAA,"[Anti-Cheat] Вы удалены с сервера за использования читов");
stock GPW(playerid)return GetPlayerWeapon(playerid);
stock containsAnyIP ( string[] )
{
new digits, digitGroups;
for ( new pos; ; pos++ )
{
switch ( string[pos] )
{
case 0 : break;
case '0'..'9', 'o', 'O', 'о', 'О', 'З', 'з' : digits++;
default :
{
if ( digits >= 2 )
{
digitGroups++;
digits = 0;
}
}
}
}
if ( digits >= 2 ) digitGroups++;
if ( digitGroups >= 4 ) return 1;
return 0;
}
Автор: Seregamil
О всех багах, недостатках и пожеланиях сообщайте в теме)
P.S. не придираться что половина на англ.языке, переключать лень было)
Последнее редактирование:
