Advertisement
Guest User

ProtectServer (c) Cartman#

a guest
Apr 6th, 2013
2,238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.93 KB | None | 0 0
  1. //////////////////////////////////////////////
  2. // ** Copyright (c) Cartman# **             //
  3. // ** All right reserved! **                //
  4. // ** Please not remove this credits. **    //
  5. //////////////////////////////////////////////
  6. // ============> INCLUDES <============ //
  7. #include <a_samp>
  8. #define CARTMAN#    COPYRITGHT_CREATOR
  9. #define VERSION 1.0.2
  10. #include <cartman#_protection>
  11.  
  12. // ============> NEWS & ENUMS <============ //
  13. new Same_IP=0,Join_Stamp,ban_s[25],exceed=0;
  14. new var[MAX_PLAYERS] = {-1,...}, warns[MAX_PLAYERS] = {0,...}, bool:npc[MAX_PLAYERS] = {false,...}, MAX_PLAYERS_ = MAX_PLAYERS;
  15.  
  16. enum LIST_ANTIFLOOD
  17. {
  18.     lastCheck,
  19.     floodRate
  20. }
  21. new AntiFlood_Data[MAX_PLAYERS][LIST_ANTIFLOOD];
  22.  
  23. // ============> PUBLICS & FUNCTIONS <============ //
  24. public OnFilterScriptInit()
  25. {
  26.     for ( new playerid; playerid < MAX_PLAYERS; playerid++ )
  27.     {
  28.         if ( IsPlayerConnected( playerid ) )
  29.             AntiFlood_InitPlayer( playerid );
  30.     }
  31.     return 1;
  32. }
  33.  
  34. public OnPlayerText(playerid, text[])
  35. {
  36.     assert( AntiFlood_Check( playerid ) );
  37.    
  38.     if(strfind(text, "samp.", true) != -1  || strfind(text, "gta.", true) != -1 || strfind(text, "samp,", true) != -1 || strfind(text, "gta,", true) != -1 || strfind(text, "s-a-m-p.", true) != -1 || strfind(text, "g-t-a.", true) != -1 ||
  39.     strfind(text, "s-a-m-p,", true) != -1 || strfind(text, "g-t-a,", true) != -1 || strfind(text, "[s][a][m][p].", true) != -1 || strfind(text, "[g][t][a].", true) != -1 || strfind(text, "sampx.", true) != -1 || strfind(text, "gtax", true) != -1 ||
  40.     strfind(text, ".ro", true) != -1 || strfind(text, ".com", true) != -1 || strfind(text, ".net", true) != -1 || strfind(text, ".org", true) != -1 || strfind(text, ".tk", true) != -1 ||
  41.     strfind(text, ",ro", true) != -1 || strfind(text, ",com", true) != -1 || strfind(text, ",net", true) != -1 || strfind(text, ",org", true) != -1 || strfind(text, ",tk", true) != -1 ||
  42.     strfind(text, ".-r-o", true) != -1 || strfind(text, ".-c-o-m", true) != -1 || strfind(text, ".-n-e-t", true) != -1 || strfind(text, ".-o-r-g", true) != -1 || strfind(text, ".-t-k", true) != -1 || strfind(text, ":7777", true) != -1)
  43.     {
  44.         new sendername[MAX_PLAYER_NAME];
  45.         new string[64];
  46.         GetPlayerName(playerid, sendername, 24);
  47.         format(string, 256, "SERVER: %s a fost deconectat, motiv: Reclama.", sendername);
  48.         SendClientMessageToAll(COLOR_LIGHTRED, string);
  49.         TogglePlayerControllable(playerid, 0);
  50.         Kick(playerid);
  51.         return 0;
  52.     }
  53.     return 1;
  54. }
  55.  
  56. public OnPlayerConnect(playerid)
  57. {
  58.     new name[MAX_PLAYER_NAME];
  59.     new string[32];
  60.     GetPlayerName(playerid, name,   sizeof(name));
  61.     if(!strfind("samp.", name, true)  || !strfind("gta.", name, true) || !strfind("samp,", name, true) || !strfind("gta,", name, true) || !strfind("s-a-m-p.", name, true) || !strfind("g-t-a.", name, true) ||
  62.     !strfind("s-a-m-p,", name, true) || !strfind("g-t-a,", name, true) || !strfind("[s][a][m][p].", name, true) || !strfind("[g][t][a].", name, true) || !strfind("sampx.", name, true) || !strfind("gtax", name, true) ||
  63.     !strfind(".ro", name, true) || !strfind(".com", name, true) || !strfind(".net", name, true) || !strfind(".org", name, true) || !strfind(".tk", name, true) ||
  64.     !strfind(",ro", name, true) || !strfind(",com", name, true) || !strfind(",net", name, true) || !strfind(",org", name, true) || !strfind(",tk", name, true) ||
  65.     !strfind(".-r-o", name, true) || !strfind(".-c-o-m", name, true) || !strfind(".-n-e-t", name, true) || !strfind(".-o-r-g", name, true) || !strfind(".-t-k", name, true) || !strfind(":7777", name, true))
  66.     {
  67.         SendClientMessage(playerid, 0xFF0000FF, "* Ai primit ban ip pe acest server.");
  68.         format(string, sizeof(string), "banip %s", name);
  69.         SendRconCommand(string);
  70.         Ban(playerid);
  71.     }
  72.     if(CountIP(GetIP(playerid)) >= 6) return BanAll(playerid), 0;
  73.     MAX_PLAYERS_ = playerid > MAX_PLAYERS_ ? playerid : GetHighestID(),
  74.     npc[playerid] = bool:IsPlayerNPC(playerid),
  75.     var[playerid] = SetTimerEx("BSS",2500,false,"i",playerid),
  76.     warns[playerid] = 0;
  77.     AntiFlood_InitPlayer( playerid );
  78.     new ConnIP[16];
  79.     GetPlayerIp(playerid,ConnIP,16);
  80.     new compare_IP[16];
  81.     new number_IP = 0;
  82.     for(new i=0; i<MAX_PLAYERS; i++) {
  83.         if(IsPlayerConnected(i)) {
  84.             GetPlayerIp(i,compare_IP,16);
  85.             if(!strcmp(compare_IP,ConnIP)) number_IP++;
  86.         }
  87.     }
  88.     if((GetTickCount() - Join_Stamp) < Time_Limit)
  89.         exceed=1;
  90.     else
  91.         exceed=0;
  92.     if(strcmp(ban_s, ConnIP, false) == 0 && exceed == 1 )
  93.     {
  94.         Same_IP++;
  95.         if(Same_IP > SAME_IP_CONNECT)
  96.         {
  97.             Ban(playerid);
  98.             Same_IP=0;
  99.         }
  100.     }
  101.     else
  102.     {
  103.         Same_IP=0;
  104.     }
  105.     if(number_IP > IP_LIMIT)
  106.         Kick(playerid);
  107.     GetStampIP(playerid);
  108.     return 1;
  109.  
  110. }
  111.  
  112. public OnPlayerDisconnect(playerid, reason)
  113. {
  114.     MAX_PLAYERS_ = GetHighestID(playerid);
  115.     if(npc[playerid]) npc[playerid] = false;
  116.     if(var[playerid] != -1)
  117.     {
  118.         KillTimer(var[playerid]);
  119.         var[playerid] = -1;
  120.     }
  121.     warns[playerid] = 0;
  122.     return 1;
  123. }
  124.  
  125. public OnPlayerCommandText( playerid, cmdtext[] )
  126. {
  127.     assert( AntiFlood_Check( playerid ) );
  128.     return 0;
  129. }
  130.    
  131. public OnPlayerDeath( playerid, killerid, reason )
  132. {
  133.     assert( AntiFlood_Check( playerid ) );
  134.  
  135.     return 1;
  136. }
  137.  
  138. AntiFlood_Check( playerid, bool:inc=true )
  139. {
  140.     AntiFlood_Data[playerid][floodRate] += inc ? RATE_INC : 0;
  141.     AntiFlood_Data[playerid][floodRate] = AntiFlood_Data[playerid][floodRate] - ( GetTickCount() - AntiFlood_Data[playerid][lastCheck] );
  142.     AntiFlood_Data[playerid][lastCheck] = GetTickCount();
  143.     AntiFlood_Data[playerid][floodRate] = AntiFlood_Data[playerid][floodRate] < 0 ? 0 : AntiFlood_Data[playerid][floodRate];
  144.  
  145.     if ( AntiFlood_Data[playerid][floodRate] >= RATE_MAX )
  146.     {
  147.         #if THRESOLD_ACTION == 1
  148.             new msg[64], name[MAX_PLAYER_NAME];
  149.  
  150.             GetPlayerName( playerid, name, sizeof( name ) );
  151.  
  152.             format( msg, sizeof( msg ), "SERVER: %s a primit ban pentru tentativa de flood.", name );
  153.  
  154.             SendClientMessageToAll( 0xEE9911FF, msg );
  155.  
  156.             Ban( playerid );
  157.         #elseif THRESOLD_ACTION == 2
  158.             new msg[64], name[MAX_PLAYER_NAME];
  159.  
  160.             GetPlayerName( playerid, name, sizeof( name ) );
  161.  
  162.             format( msg, sizeof( msg ), "SERVER: %s a primit ban pentru tentativa de flood.", name );
  163.  
  164.             SendClientMessageToAll( 0xEE9911FF, msg );
  165.  
  166.             Kick( playerid );
  167.         #else
  168.             SendClientMessage( playerid, 0xC00000FF, "Stop flooding." );
  169.         #endif
  170.  
  171.         return false;
  172.     }
  173.  
  174.     return true;
  175. }
  176.  
  177. AntiFlood_InitPlayer( playerid )
  178. {
  179.     AntiFlood_Data[playerid][lastCheck] = GetTickCount();
  180.     AntiFlood_Data[playerid][floodRate] = 0;
  181. }
  182.  
  183.  
  184. forward OnPlayerTeamPrivmsg( playerid, text[] );
  185. public OnPlayerTeamPrivmsg( playerid, text[] )
  186. {
  187.     assert( AntiFlood_Check( playerid ) );
  188.     return 1;
  189. }
  190.    
  191. stock GetStampIP(playerid){
  192.     new S_IP[16];
  193.     Join_Stamp=GetTickCount();
  194.     GetPlayerIp(playerid,S_IP,16);
  195.     format(ban_s, 16, "%s", S_IP);
  196. }
  197.  
  198. stock CountIP(ip[])
  199. {
  200.     new c = 0;
  201.     for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !strcmp(GetIP(i),ip)) c++;
  202.     return c;
  203. }
  204.  
  205. forward BSS(playerid);
  206. public BSS(playerid)
  207. {
  208.     new i = GetPlayerPing(playerid);
  209.     if(i <= 0 || i >= 50000)
  210.     {
  211.         if(warns[playerid] >= 1) BanAll(playerid);
  212.         else warns[playerid]++, var[playerid] = SetTimerEx("BSS",1500,false,"i",playerid);
  213.     }
  214.     return 0;
  215. }
  216. stock GetIP(playerid)
  217. {
  218.     new ip[16];
  219.     GetPlayerIp(playerid,ip,sizeof(ip));
  220.     return ip;
  221. }
  222.  
  223. stock BanAll(playerid)
  224. {
  225.     new ip[32];
  226.     GetPlayerIp(playerid,ip,sizeof(ip));
  227.     for(new i = 0, p = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !npc[i])
  228.     {
  229.         p = GetPlayerPing(i);
  230.         if(i == playerid || !strcmp(ip,GetIP(i)) || p <= 0 || p >= 50000)
  231.         {
  232.             BanEx(i,"Bot");
  233.             if(var[i] != -1)
  234.             {
  235.                 KillTimer(var[i]);
  236.                 var[i] = -1;
  237.             }
  238.         }
  239.     }
  240.     format(ip,sizeof(ip),"banip %s",ip);
  241.     return SendRconCommand(ip);
  242. }
  243.  
  244. stock GetHighestID(exceptof = INVALID_PLAYER_ID)
  245. {
  246.     new h = 0;
  247.     for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && i != exceptof && i > h) h = i;
  248.     return h;
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement