[FilterScript] [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrхes, Money Hack)
#1

Mais um trabalho que acabei agora, tentei fazer a extrutura o mais simples possнvel para que ambos os scripters (avanзados, intermйdios e novatos) consigam perceber e editar o sistema.
Conteъdo & explicaзгo do prуprio:

Anti armas - A primeira vez o jogador й avisado e sгo retiradas as armas, а segunda vez й kickado;
Anti Ping - O jogador que tiver o ping acima do permitido й avisado 1 vez, а segunda vez й kickado;
Anti Spam - O jogador que fizer Spam й avisado, se fizer denovo й kickado;
Anti DB - O jogador que fizer DB й preso durante 2 minutos;
Anti Palavrхes - O jogador que digitar alguma palavra proibida, й alterada para estrelas (*).
Anti Money Hack - Nгo interfere com Amunnations nem mбquinas de rua, apenas com EnableStuntBonusForAll e EnableStuntBonusForPlayer;

Como alterar algo no sistema?

Como posso alterar o limite de ping do sistema?
Procure pela linha:
pawn Code:
#define MaxPing 650
E altere o 650 para o nъmero que quer que seja o mбximo de ping.

Como coloco mais palavras proibidas para elas serem substituidas por *?
Procure por:
pawn Code:
new PPalavras[MAX_PALAVRAS_SZ][50] = {
E em baixo adicione as palavras que quiser... Nunca se esqueзa de contar as palavras, porque o nъmero de palavras que tiver deve ser o nъmero que estб definido em:
pawn Code:
MAX_PALAVRAS_SZ ?

Como modificar a * para outro caractйr (exemplo: -) ?
Procure por:
pawn Code:
strcat(subzero,"*");
E altere o "*" pelo caractйr que quer.

Observaзхes:

Se usar este sistema, troque todos os:
pawn Code:
GivePlayerMoney( playerid, Quantia );
que tiver no seu gamemode/filterscript por:
pawn Code:
GivePlayerCash( playerid, Quantia );
Desabilite o stunt bonus do seu gamemode/filterscript para nгo dar conflito com o Anti Money Hack, coloque o seguinte no OnGameModeInit:
pawn Code:
EnableStuntBonusForAll( 0 );
Sistema:

pawn Code:
/*                  [K.A.C] Knight's Anti Cheat

Anti armas - A primeira vez o jogador й avisado e sгo retiradas as armas, а segunda vez й kickado;
Anti Ping - O jogador que tiver o ping acima do permitido й avisado 1 vez, а segunda vez й kickado;
Anti Spam - O jogador que fizer Spam й avisado, se fizer denovo й kickado;
Anti DB - O jogador que fizer DB й preso durante 2 minutos;
Anti Palavrхes - O jogador que digitar alguma palavra proibida, й alterada para estrelas (*).
Anti Money Hack -  Nгo interfere com Amunnations nem mбquinas de rua, apenas com EnableStuntBonusForAll e EnableStuntBonusForPlayer;

                     • Criador Geral: The Knight
                     • Anti Money Hack: DraKiNs
                     • Anti Palavrхes: SuB_ZeRo0_
   

*/


//Includes
#include <a_samp>

//Defines
#define MAX_PALAVRAS_SZ 14 //Altere para o nъmero de palavras que "PPalavras" contйm
#define MaxPing 650 //Altere para o nъmero que quiser que seja o mбximo de ping permitido
#define Cinzento                                                    (0x9C9C9CFF)
#define Vermelho                                                    (0xEE0000FF)
#define Amarelo                                                     (0xEEAD0EFF)
#define Laranja                                                     (0xFF7F00FF)
#define Verde                                                       (0x228B22FF)
#define Branco                                                      (0xFFFFFFAA)
#define Roxo                                                        (0x9F79EEFF)
#define Rosa                                                        (0xFF6A6AFF)
#define Azulll                                                       (0x9C9C9C)
#define Azull                                                        (0x5CACEE)
#define Azul                                                         (0x4682B4)

//Variбveis
new PPalavras[MAX_PALAVRAS_SZ][50] = {
"puta",
"p.u.t.a",
"p-u-t-a",
"noob",
"n.o.o.b",
"n-o-o-b",
"n.oo.b",
"n-oo-b",
"corno",
"c.o.r.n.o",
"c-o-r-n-o",
"viado",
"v.i.a.d.o",
"v-i-a-d-o"
};
enum jInformacoes
{
   kNome[ 24 ],
   Nome[ 24 ],  
   aAvisos,
   pAvisos,  
   nMsgs,  
   Preso
}
new jInfo[ MAX_PLAYERS ][ jInformacoes ];
new aProibidas[][] =
{
        {38},
        {32},
        {36},
        {25}  
};
new sStr[ 128 ];

//Forward
forward @dDinheiro( playerid );
forward @sPreso( killerid );
forward @pArmas( playerid );
forward @aPing( playerid );
forward @aSpam( playerid );

public OnFilterScriptInit()
{
   print("oi");
   SetTimer( "@pArmas", 500, true ); //500 = 5 milesimas de segundo (meio minuto)
   SetTimer( "@aPing", 5000, true ); //30000 = 30 segundos
   SetTimer( "@dDinheiro", 2000, true); //2000 = 2 segundos
   EnableStuntBonusForAll( 0 );    
   return true;  
}

//Calbacks
public OnPlayerConnect( playerid )
{
   GetPlayerName( playerid, jInfo[ playerid ][ Nome ], 23 );  
   return true;  
}

public OnPlayerCommandText( playerid, cmdtext[] )
{
   if( !strcmp( cmdtext, "/jPresos", true ) )  
   {  
      if( !IsPlayerAdmin( playerid ) ) return SendClientMessage( playerid, Vermelho, "Sу administradores logados na RCON podem usar este comando!" );      
      SendClientMessage( playerid, Azull, "|PRESOS| Jogadores Presos:" );      
      for( new j = 0; j < MAX_PLAYERS; j++ )      
      {      
         if( IsPlayerConnected( j ) )        
         {        
            if( jInfo[ j ][ Preso ] == 1 )        
            {        
               GetPlayerName( j, jInfo[ playerid ][ Nome ], 23 );            
               format( sStr, sizeof( sStr ), "{5CACEE}Jogador(a): {FFFFFF}%s | {5CACEE}ID: {FFFFFF}%i", jInfo[ playerid ][ Nome ], j );            
               SendClientMessage( playerid, Amarelo, sStr );            
            }
         }        
      }      
      return true;      
   }
   return false;  
}

public @pArmas( playerid )
{
   for( new X = 0; X < sizeof( aProibidas ); X++ )    
   {
      if( GetPlayerWeapon( playerid ) == aProibidas[ X ][ 0 ] )
      {    
         if( jInfo[ playerid ][ aAvisos ] == 1)      
         {                                                                                                                
            format( sStr, sizeof( sStr ), "[K.A.C] %s foi kickado do servidor! [Motivo: Uso de armas proibidas]", jInfo[ playerid ][ Nome ]);        
            SendClientMessageToAll( Vermelho, sStr );
            SendClientMessage( playerid, Cinzento, "[K.A.C] Foi avisado 2 vezes antes, agora foi kickado ...");
            for( new j = 0; j <= MAX_PLAYERS; j++ )
            {
               if( IsPlayerConnected( j ) )
               {
                  if( IsPlayerAdmin( j ) )
                  {
                     SendClientMessage( j, Vermelho, sStr );
                  }
               }
            }
            Kick( playerid );
         }
         else if( jInfo[ playerid ][ aAvisos ] == 0 )
         {      
            ResetPlayerWeapons( playerid );
            format( sStr, sizeof( sStr ), "[K.A.C] %s estб a usar armas proibidas, se usar mais 1 vez й kickado!", jInfo[ playerid ][ Nome ])
            SendClientMessageToAll( Vermelho, sStr );
            SendClientMessage( playerid, Cinzento, "[K.A.C] Foi apanhado a usar armas proibidas, se usar mais 1 vez й kickado ...");
            jInfo[ playerid ][ aAvisos ] = 1;
            for( new j = 0; j <= MAX_PLAYERS; j++ )
            {
               if( IsPlayerConnected( j ) )
               {
                  if( IsPlayerAdmin( j ) )
                  {
                     SendClientMessage( j, Vermelho, sStr );
                  }
               }
            }
         }                                                                                  
      }      
   }
   return true;
}

public OnPlayerText(playerid, text[])
{
   new findsub,subzeropos,subzero[50],sz[128];
   format(sz,128,"%s",text);
   while(subzeropos<=strlen(sz))
   {
      for(new d=0;d<MAX_PALAVRAS_SZ;d++)
      {
         findsub=strfind(sz,PPalavras[d],true,subzeropos);
         if(findsub!=-1&&findsub==subzeropos)
         {
            strdel(sz,findsub,findsub+strlen(PPalavras[d]));
            for(new h=0;h<strlen(PPalavras[d]);h++)
            {
               strcat(subzero,"*");
            }
            strins(sz,subzero,findsub,256);
            strdel(subzero,0,strlen(subzero));
         }
      }
      subzeropos++;
   }
   SendPlayerMessageToAll(playerid,sz);
   SetTimerEx( "@aSpam", 3000, false, "i", playerid ); //3000 = 3 segundos  
   jInfo[ playerid ][ nMsgs ]++;    
   if( jInfo[ playerid ][ nMsgs ] >= 3)  
   {  
      SendClientMessage( playerid, Vermelho, "[K.A.C] Nгo faзa spam, para a prуxima vez serб kickado!" );      
   }  
   if( jInfo[ playerid ][ nMsgs ] >= 4 )  
   {  
      format( sStr, sizeof( sStr ), "[K.A.C] %s foi kickado do servidor! [Motivo: Spam]", jInfo[ playerid ][ Nome ] );      
      SendClientMessageToAll( Vermelho, sStr );      
      SendClientMessage( playerid, Cinzento, "[K.A.C] Vocк foi kickado do servidor por fazer Spam!" );      
      Kick( playerid );      
   }
   return false;
}

public @aSpam( playerid ) { jInfo[ playerid ][ nMsgs ] = 0; return true; }

public @aPing( playerid )
{
   for( new i = 0; i < MAX_PLAYERS; i++ )  
   {  
      if( GetPlayerPing( i ) >= MaxPing )      
      {
         if( jInfo[ playerid ][ pAvisos ] == 1 )      
         {    
            format( sStr, sizeof( sStr ), "[K.A.C] %s foi kickado do servidor! [Motivo: Ping %d | Mбximo: %d]", jInfo[ i ][ Nome ], GetPlayerPing( i ), MaxPing );        
            SendClientMessageToAll( Vermelho, sStr );
            SendClientMessage( playerid, Cinzento, "[K.A.C] Foi avisado 2 vezes sobre o seu ping, agora foi kickado..." );        
            for( new j = 0; j <= MAX_PLAYERS; j++ )
            {
               if( IsPlayerConnected( j ) )
               {
                  if( IsPlayerAdmin( j ) )
                  {
                     SendClientMessage( j, Vermelho, sStr );
                  }
               }
            }
            Kick( playerid );            
         }              
         else if( jInfo[ playerid ][ pAvisos ] == 0 )
         {      
            format( sStr, sizeof( sStr ), "[K.A.C] %s estб com o ping acima do limite, se fфr avisado mais 1 vez й kickado!", jInfo[ playerid ][ Nome ])
            SendClientMessageToAll( Vermelho, sStr );
            SendClientMessage( playerid, Cinzento, "[K.A.C] O seu ping estб demasiado alto, se tiver mais 1 aviso sobre o ping serб kickado ...");
            jInfo[ playerid ][ pAvisos ] = 1;
            for( new j = 0; j <= MAX_PLAYERS; j++ )
            {
               if( IsPlayerConnected( j ) )
               {
                  if( IsPlayerAdmin( j ) )
                  {
                     SendClientMessage( j, Vermelho, sStr );
                  }
               }
            }            
         }
      }
   }            
   return true;  
}

public OnPlayerDeath( playerid, killerid, reason )
{
   if( IsPlayerInAnyVehicle( killerid ) && reason != WEAPON_VEHICLE )
   {
      SetPlayerInterior( killerid, 0 );    
      SetPlayerPos( killerid, 2143.4492,622.0122,-3.4715 );            
      GetPlayerName( killerid, jInfo[ killerid ][ kNome ], 23 );      
      format( sStr, sizeof( sStr ), "[K.A.C] %s foi preso! [Motivo: DriveBy | Tempo: 2 minutos]", kNome );
      SendClientMessageToAll( Vermelho, sStr );
      SendClientMessage( killerid, Cinzento, "[K.A.C] Vocк foi preso por cometer DriveBy! (2 minutos)" );
      SetTimerEx( "@sPreso", 120000, false, "d", killerid );
      jInfo[ killerid ][ Preso ] = 1;      
   }
   return true;
}

public @sPreso( killerid )
{
   GetPlayerName( killerid, jInfo[ killerid ][ kNome ], 23 );
   format( sStr, sizeof( sStr ), "[K.A.C] %s cumpriu o seu tempo na prisгo e foi solto!", kNome);    
   SendClientMessageToAll( Verde, sStr );
   SendClientMessage( killerid, Verde, "[K.A.C] Vocк cumpriu seu tempo na prisгo e foi solto!" );
   GameTextForPlayer( killerid, "~g~Voce foi solto", 3000, 1 );
   SpawnPlayer( killerid );
   jInfo[ killerid ][ Preso ] = 0;
   return true;
}

public @dDinheiro( playerid )
{
   for( new aMH = 0; aMH < MAX_PLAYERS; aMH++ )
   {
      if( GetPVarInt( aMH, "Money Hack" ) == 10 )
      {
         SetPVarInt( aMH , "Money Hack", 0 );
         return false;
      }
      if( GetPlayerMoney( aMH ) < GetPVarInt( aMH, "Dinheiro" ) ) SetPVarInt( aMH, "Dinheiro", GetPlayerMoney( aMH ) );
      while( GetPlayerMoney( aMH ) <= GetPVarInt( aMH, "Dinheiro" ) )  return false;
      format( sStr, sizeof( sStr ), "[K.A.C] %s foi kickado do servidor! [Motivo: Money Hack]", jInfo[ playerid ][ Nome ] );      
      SendClientMessageToAll( Vermelho, sStr );      
      SendClientMessage( playerid, Cinzento, "[K.A.C] Vocк foi kickado do servidor por tentativa de MoneyHack!" );
   }              
   return true;
}

//Stocks
stock GivePlayerCash(playerid, dQuantia)
{
   GivePlayerMoney( playerid, dQuantia);
   SetPVarInt( playerid, "Dinheiro",GetPlayerMoney(playerid));
   SetPVarInt( playerid, "Money Hack", 10);
}
Tem idйias para melhora do sistema? Mande-me uma MP ou poste aqui mesmo neste tуpico (:
Prуxima versгo lanзada em breve...

Crйditos:
Criador Geral: The Knight
Anti Money Hack: DraKiNs
Anti Palavrхes: SuB_ZeRo0_
Reply
#2

Mais Um?
A coisa mais facil й fazer anti-cheat.
Mesmo assim parabйns.
Reply
#3

Antes de falar, deveria examinar primeiro...
Na bord pt/br nгo existe nenhum, e se existe, nгo estб completo mas sim й apenas um ъnico tipo de anti algo.
Reply
#4

Tem o do DraKiNs ou й do Higor, mais parabйns Diogo Bras
Reply
#5

Muito Completo... Muito Legal
Muito Cool.
Gostei Parabens
Reply
#6

The Knight nгo existe necessidade em um timer no anti spaw.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)