26.05.2016, 04:53
(
Последний раз редактировалось F1N4L; 27.05.2016 в 00:56.
)
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.
Exemplo:
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):
Exemplo:
BANINDO O JOGADOR
Exemplo:
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:
DESBANINDO O JOGADOR
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:
Exemplo:
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.
Conexгo:
APLICANDO NA PRБTICA:
NOS COMANDOS ABAIXO TEM EXEMPLOS CORRETOS DA UTILIZAЗГO DO SISTEMA
Comandos:


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
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[]);
Код:
mysql_ban_connect("localhost", "root", "server_samp", "");
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[])
Код:
//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
}
Код:
mysql_ban_player(Player_Name[], Player_IP[], Ban_By[], Reason[], Ban_Type, Time);
Код:
mysql_ban_player("WesleyScript", "127.0.0.1", "F1N4L", "LIXO", PERMANENTE, 0);
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
Код:
mysql_ban_remove(Banned[]);
Код:
bool:mysql_ban_remove_check(Banned[])
Код:
//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
}
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);
APLICANDO NA PRБTICA:
Код:
public OnFilterScriptInit() // ou OnGameModeInit
{
mysql_ban_connect("localhost", "root", "server_samp", "");
return 1;
}
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


