04.05.2011, 23:39
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.
• 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 posso alterar o limite de ping do sistema?
Procure pela linha:
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:
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:
Como modificar a * para outro caractйr (exemplo: -) ?
Procure por:
E altere o "*" pelo caractйr que quer.
Se usar este sistema, troque todos os:
que tiver no seu gamemode/filterscript por:
Desabilite o stunt bonus do seu gamemode/filterscript para nгo dar conflito com o Anti Money Hack, coloque o seguinte no OnGameModeInit:
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...
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
Como coloco mais palavras proibidas para elas serem substituidas por *?
Procure por:
pawn Code:
new PPalavras[MAX_PALAVRAS_SZ][50] = {
pawn Code:
MAX_PALAVRAS_SZ ?
Como modificar a * para outro caractйr (exemplo: -) ?
Procure por:
pawn Code:
strcat(subzero,"*");
Observaзхes:
Se usar este sistema, troque todos os:
pawn Code:
GivePlayerMoney( playerid, Quantia );
pawn Code:
GivePlayerCash( playerid, Quantia );
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);
}
Prуxima versгo lanзada em breve...
Crйditos:
Criador Geral: The Knight
Anti Money Hack: DraKiNs
Anti Palavrхes: SuB_ZeRo0_
Anti Money Hack: DraKiNs
Anti Palavrхes: SuB_ZeRo0_