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