SA-MP Forums

SA-MP Forums (https://forum.sa-mp.com/index.php)
-   Lançamentos/Releases (https://forum.sa-mp.com/forumdisplay.php?f=56)
-   -   [FilterScript] [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack) (https://forum.sa-mp.com/showthread.php?t=253152)

The Knight 04/05/2011 11:39 PM

[K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack)
 
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_

Carl_Thuse 04/05/2011 11:49 PM

Re: [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack)
 
Mais Um?
A coisa mais facil é fazer anti-cheat.
Mesmo assim parabéns.

The Knight 05/05/2011 12:02 AM

Re: [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack)
 
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.

Macintosh 05/05/2011 12:17 AM

Re: [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack)
 
Tem o do DraKiNs ou é do Higor, mais parabéns Diogo Bras :)

hitachi_uchila 05/05/2011 02:55 AM

Re: [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack)
 
Muito Completo... Muito Legal
Muito Cool.
Gostei Parabens

[S]trong 05/05/2011 03:41 AM

Re: [K.A.S] Knight's Anti Cheat (Anti: Armas, Spam, DB, MaxPing, Palavrões, Money Hack)
 
The Knight não existe necessidade em um timer no anti spaw.


All times are GMT. The time now is 10:52 AM.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.