[Include] Ban System [MySQL R39-4 + TextDraw]
#1

Sei que jб hб sistemas assim, mas esse й meu primeiro sistema em MySQL.

Esse sistema em MySQL, do meu ponto de vista, ficou melhor que o meu anterior em SQLite e para dar uma diferenciada coloquei TextDraws no lugar de mensagens ou diбlogo.

TABELA E CONEXГO
A primeira coisa й conectar no banco de dados e deve ser inserido normalmente em OnGameModeInit/OnFilterScriptInit.
A Conexгo й estabelecida e a tabela й criada automaticamente, apenas forneзa as informaзхes corretas.
Код:
mysql_ban_connect(const host[], const user[], const database[], const password[]);
Exemplo:
Код:
mysql_ban_connect("localhost", "root", "server_samp", "");
VERIFICAЗГO DO JOGADOR
Podemos verificar se o jogador que serб banido estб online ou nгo com a seguinte funзгo (lembrando que a verificaзгo й em string e nгo inteiro como IsPlayerConnected):
Код:
bool:mysql_ban_player_check(Find[])
Exemplo:
Код:
//VERIFICANDO PELO NOME
GetPlayerName(playerid, Nome, 24);
if(mysql_ban_player_check(Nome) == true)
{
     //Player On
}
else
{
     //Player Off
}

//VERIFICANDO PELO IP
GetPlayerIp(playerid, IP, 16);
if(mysql_ban_player_check(IP) == true)
{
     //Player On
}
else
{
     //Player Off
}
BANINDO O JOGADOR
Код:
mysql_ban_player(Player_Name[], Player_IP[], Ban_By[], Reason[], Ban_Type, Time);
Exemplo:
Код:
mysql_ban_player("WesleyScript", "127.0.0.1", "F1N4L", "LIXO", PERMANENTE, 0);
OBS: Quando colocarem como Ban permanente, independentemente do tempo que vcs colocarem, nгo vai mudar nada.
O Ban permanente й basicamente 20 anos banido, ou seja, tecnicamente permanente mesmo. A verificaзгo se й permanente ou nгo й se caso os dias forem maiores que 3650, ou seja, +- 10 anos.

Por padrгo jб defini macros e podem rodar no GM/FS sem problemas, apenas serб mais fбcil de alternar entre o tipo de ban:
Код:
#define				PERMANENTE			0
#define				MINUTOS				1
#define				HORAS				2
#define				DIAS				3
DESBANINDO O JOGADOR
Код:
mysql_ban_remove(Banned[]);
Para evitar de fazer a verificaзгo no banco de dados se existe ou nгo atravйs dos comando SQL fiz a seguinte stock:
Код:
bool:mysql_ban_remove_check(Banned[])
Exemplo:
Код:
//VERIFICANDO PELO NOME
if(mysql_ban_player_check("F1N4L") == true)
{
     //Coluna encontrada
}
else
{
     //Coluna nгo encontrada
}

//VERIFICANDO PELO IP
if(mysql_ban_player_check("127.0.0.1") == true)
{
     //Coluna encontrada
}
else
{
     //Coluna nгo encontrada
}
VERIFICANDO AO CONECTAR
Eu criei o hook na include propositalmente, assim as ъnicas coisas necessбrias e principais sгo as stocks de conexгo ao banco de dados e a de banir, portanto, a verificaзгo vai ocorrer na include mesmo.
Код:
mysql_banned_check(playerid);
Conexгo:
APLICANDO NA PRБTICA:
Код:
public OnFilterScriptInit() // ou OnGameModeInit
{
	mysql_ban_connect("localhost", "root", "server_samp", "");
	
	return 1;
}
NOS COMANDOS ABAIXO TEM EXEMPLOS CORRETOS DA UTILIZAЗГO DO SISTEMA

Comandos:
Код:
CMD:banname(playerid, params[])
{
	new NomeBanido[24], NomeBanidoPor[24], Motivo[20], TipoBanimento, Tempo,String[128];
	
	if(sscanf(params, "s[24]iis[20]", NomeBanido, TipoBanimento, Tempo, Motivo)) return SendClientMessage(playerid, -1, "/ban [nome] [Tipo: 0 = permanente | 1 = minutos | 2 = horas | 3 = dias] [tempo] [motivo]");
	
	if(TipoBanimento < 0 || TipoBanimento > 3) return SendClientMessage(playerid, -1, "Tipo de banimento incorreto! Utilize: 0 = permanente | 1 = minutos | 2 = horas | 3 = dias");
	
	GetPlayerName(playerid, NomeBanidoPor, sizeof NomeBanidoPor);
	
	if(mysql_ban_player_check(NomeBanido) == true)
	{
		switch(TipoBanimento)
		{
			case 0: format(String, sizeof String, "Admin %s baniu Online o jogador %s. Motivo: %s. Tempo: PERMANENTE", NomeBanidoPor, NomeBanido, Motivo);
			case 1: format(String, sizeof String, "Admin %s baniu Online o jogador %s. Motivo: %s. Tempo: %i Minutos", NomeBanidoPor, NomeBanido, Motivo, Tempo);
			case 2: format(String, sizeof String, "Admin %s baniu Online o jogador %s. Motivo: %s. Tempo: %i Horas", NomeBanidoPor, NomeBanido, Motivo, Tempo);
			case 3: format(String, sizeof String, "Admin %s baniu Online o jogador %s. Motivo: %s. Tempo: %i Dias", NomeBanidoPor, NomeBanido, Motivo, Tempo);
		}
	}
	else
	{
		switch(TipoBanimento)
		{
			case 0: format(String, sizeof String, "Admin %s baniu Offline o jogador %s. Motivo: %s. Tempo: PERMANENTE", NomeBanidoPor, NomeBanido, Motivo);
			case 1: format(String, sizeof String, "Admin %s baniu Offline o jogador %s. Motivo: %s. Tempo: %i Minutos", NomeBanidoPor, NomeBanido, Motivo, Tempo);
			case 2: format(String, sizeof String, "Admin %s baniu Offline o jogador %s. Motivo: %s. Tempo: %i Horas", NomeBanidoPor, NomeBanido, Motivo, Tempo);
			case 3: format(String, sizeof String, "Admin %s baniu Offline o jogador %s. Motivo: %s. Tempo: %i Dias", NomeBanidoPor, NomeBanido, Motivo, Tempo);
		}
	}
	SendClientMessageToAll(-1, String);
	
	mysql_ban_player(NomeBanido, "0.0.0.0", NomeBanidoPor, Motivo, TipoBanimento, Tempo);
	
	return 1;
}

CMD:banip(playerid, params[])
{
	new IpBanido[24], NomeBanidoPor[24], Motivo[20], TipoBanimento, Tempo, String[128];
	
	if(sscanf(params, "s[16]iis[20]", IpBanido, TipoBanimento, Tempo, Motivo)) return SendClientMessage(playerid, -1, "/ban [nome] [Tipo: 0 = permanente | 1 = minutos | 2 = horas | 3 = dias] [tempo] [motivo]");
	
	if(TipoBanimento < 0 || TipoBanimento > 3) return SendClientMessage(playerid, -1, "Tipo de banimento incorreto! Utilize: 0 = permanente | 1 = minutos | 2 = horas | 3 = dias");
	
	GetPlayerName(playerid, NomeBanidoPor, sizeof NomeBanidoPor);
	
	if(mysql_ban_player_check(IpBanido) == true)
	{
		switch(TipoBanimento)
		{
			case 0: format(String, sizeof String, "Admin %s baniu Online a faixa de IP %s. Motivo: %s. Tempo: PERMANENTE", NomeBanidoPor, IpBanido, Motivo);
			case 1: format(String, sizeof String, "Admin %s baniu Online a faixa de IP %s. Motivo: %s. Tempo: %i Minutos", NomeBanidoPor, IpBanido, Motivo, Tempo);
			case 2: format(String, sizeof String, "Admin %s baniu Online a faixa de IP %s. Motivo: %s. Tempo: %i Horas", NomeBanidoPor, IpBanido, Motivo, Tempo);
			case 3: format(String, sizeof String, "Admin %s baniu Online a faixa de IP %s. Motivo: %s. Tempo: %i Dias", NomeBanidoPor, IpBanido, Motivo, Tempo);
		}
	}
	else
	{
		switch(TipoBanimento)
		{
			case 0: format(String, sizeof String, "Admin %s baniu Offline a faixa de IP %s. Motivo: %s. Tempo: PERMANENTE", NomeBanidoPor, IpBanido, Motivo);
			case 1: format(String, sizeof String, "Admin %s baniu Offline a faixa de IP %s. Motivo: %s. Tempo: %i Minutos", NomeBanidoPor, IpBanido, Motivo, Tempo);
			case 2: format(String, sizeof String, "Admin %s baniu Offline a faixa de IP %s. Motivo: %s. Tempo: %i Horas", NomeBanidoPor, IpBanido, Motivo, Tempo);
			case 3: format(String, sizeof String, "Admin %s baniu Offline a faixa de IP %s. Motivo: %s. Tempo: %i Dias", NomeBanidoPor, IpBanido, Motivo, Tempo);
		}
	}
	SendClientMessageToAll(-1, String);
	
	mysql_ban_player("N/A", IpBanido, NomeBanidoPor, Motivo, TipoBanimento, Tempo);
	
	return 1;
}

CMD:banid(playerid, params[])
{
	new Banido, IpBanido[24], NomeBanido[24], NomeBanidoPor[24], Motivo[20], TipoBanimento, Tempo, String[128];
	
	if(sscanf(params, "uiis[20]", Banido, TipoBanimento, Tempo, Motivo)) return SendClientMessage(playerid, -1, "/ban [id/nome] [Tipo: 0 = permanente | 1 = minutos | 2 = horas | 3 = dias] [tempo] [motivo]");
	
	if(!IsPlayerConnected(Banido)) return SendClientMessage(playerid, -1, "Jogador nгo conectado!");
	
	if(TipoBanimento < 0 || TipoBanimento > 3) return SendClientMessage(playerid, -1, "Tipo de banimento incorreto! Utilize: 0 = permanente | 1 = minutos | 2 = horas | 3 = dias");
	
	GetPlayerName(playerid, NomeBanidoPor, sizeof NomeBanidoPor);
	
	GetPlayerName(Banido, NomeBanido, sizeof NomeBanido);
	GetPlayerIp(Banido, IpBanido, sizeof IpBanido);
	
	if(mysql_ban_player_check(IpBanido) == true)
	{
		switch(TipoBanimento)
		{
			case 0: format(String, sizeof String, "Admin %s baniu Online o jogador %s [IP: %s]. Motivo: %s. Tempo: PERMANENTE", NomeBanidoPor, NomeBanido,  IpBanido, Motivo);
			case 1: format(String, sizeof String, "Admin %s baniu Online o jogador %s [IP: %s]. Motivo: %s. Tempo: %i Minutos", NomeBanidoPor, NomeBanido, IpBanido, Motivo, Tempo);
			case 2: format(String, sizeof String, "Admin %s baniu Online o jogador %s [IP: %s]. Motivo: %s. Tempo: %i Horas", NomeBanidoPor, NomeBanido, IpBanido, Motivo, Tempo);
			case 3: format(String, sizeof String, "Admin %s baniu Online o jogador %s [IP: %s]. Motivo: %s. Tempo: %i Dias", NomeBanidoPor, NomeBanido, IpBanido, Motivo, Tempo);
		}
		SendClientMessageToAll(-1, String);
	}
	else SendClientMessage(playerid, -1, "Player ID informado nгo estб conectado!");
	
	mysql_ban_player(NomeBanido, IpBanido, NomeBanidoPor, Motivo, TipoBanimento, Tempo);
	
	return 1;
}

CMD:banremove(playerid, params[])
{
	if(isnull(params)) return SendClientMessage(playerid, -1, "/banremove [name/ip]");
	
	if(mysql_ban_remove_check(params) == true)
	{
		mysql_ban_remove(params);
		SendClientMessage(playerid, -1, "Jogador/IP encontrado e desbanido com sucesso!");
	}
	else SendClientMessage(playerid, -1, "Jogador/IP nгo foi encontrado no Banco de Dados!");
	
	return 1;
}



O sistema foi atualizado [26/05/2016 - 21:55]:
*TextDraws se resumem em apenas 4 - 2 box e 2 msg.
*Sistema bem otimizado e identado.


Download:
PASTEBIN

Crйditos:
a_samp // By SA-MP Team
zcmd // By Zeex
sscanf // By ******
a_mysql // By BlueG
Script // By F1N4L
Reply


Messages In This Thread
Ban System [MySQL R39-4 + TextDraw] - by F1N4L - 26.05.2016, 04:53
Re: Ban System [MySQL R39-4 + TextDraw] - by LockedLucas - 26.05.2016, 11:03
Re: Ban System [MySQL R39-4 + TextDraw] - by F1N4L - 26.05.2016, 13:19
Re: Ban System [MySQL R39-4 + TextDraw] - by _Play_ - 26.05.2016, 15:26
Re: Ban System [MySQL R39-4 + TextDraw] - by F1N4L - 26.05.2016, 15:32
Re: Ban System [MySQL R39-4 + TextDraw] - by Wellington1999 - 26.05.2016, 16:31
Re: Ban System [MySQL R39-4 + TextDraw] - by F1N4L - 26.05.2016, 16:52
Re: Ban System [MySQL R39-4 + TextDraw] - by ZEDD666 - 26.05.2016, 19:19
Re: Ban System [MySQL R39-4 + TextDraw] - by F1N4L - 26.05.2016, 19:30
Re: Ban System [MySQL R39-4 + TextDraw] - by n0minal - 26.05.2016, 19:51

Forum Jump:


Users browsing this thread: 1 Guest(s)