Esse tutorial aqui é realmente muito útil para servidores, seja de pequeno ou grande porte.
Muitos aki do fуrum tinham dъvidas com relaзгo a EXCLUSГO DE CONTAS INUTILIZADAS. Eu fiz pela primeira vez e deu certo!
Verifique basicamente se a conta está sendo utilizada ou não, caso a conta tenha ultrapassado tantos dias e não foi logado mais nela, automaticamente ela será excluída do BD.
OBS: Esse tutorial é direcionado diretamente para Banco de Dados e estarei usando MySQL e SQLite.
Eu ia publicar isso na área cуdigos ъteis, mas consegui fazer melhor como tutorial, pois assim os iniciantes podem postar suas dъvidas com relação a esse sistema.
Suponho que vc já tenha um sistema de registro e login completo em seu GM.
Toda vez que o jogador logar em seu servidor, vc precisa atualizar o tempo da conta para o tempo atual, obviamente.
O tempo que utilizei foi de 30 DIAS, então alterem para o tempo que vocês acham melhor.
ETAPA 1: Atualizando a conta.
Explicação: Toda vez que o jogador logar em sua conta, a coluna onde guarda o valor do gettime irá ser redefinida para o valor inicial, ou seja, voltará ao início da contagem.
Mysql R7:
Код:Muitos aki do fуrum tinham dъvidas com relaзгo a EXCLUSГO DE CONTAS INUTILIZADAS. Eu fiz pela primeira vez e deu certo!
Verifique basicamente se a conta está sendo utilizada ou não, caso a conta tenha ultrapassado tantos dias e não foi logado mais nela, automaticamente ela será excluída do BD.
OBS: Esse tutorial é direcionado diretamente para Banco de Dados e estarei usando MySQL e SQLite.
Eu ia publicar isso na área cуdigos ъteis, mas consegui fazer melhor como tutorial, pois assim os iniciantes podem postar suas dъvidas com relação a esse sistema.
Suponho que vc já tenha um sistema de registro e login completo em seu GM.
Toda vez que o jogador logar em seu servidor, vc precisa atualizar o tempo da conta para o tempo atual, obviamente.
O tempo que utilizei foi de 30 DIAS, então alterem para o tempo que vocês acham melhor.
ETAPA 1: Atualizando a conta.
Explicação: Toda vez que o jogador logar em sua conta, a coluna onde guarda o valor do gettime irá ser redefinida para o valor inicial, ou seja, voltará ao início da contagem.
Mysql R7:
- Código:
novo MySQL_Format[200], Nome[24];
GetPlayerName(playerid, Nome, tamanho do Nome);
mysql_format(conexão, MySQL_Format, "UPDATE `table_name` SET `colunm_name` = '%i' WHERE `player_name` = '%s'", 30 * 24 * 60 * 60 + gettime (), Nome);
mysql_function_query(conexão, MySQL_Format, false, "", "");
SQLite:
Код:- Código:
novo SQL_Format[200], Nome[24];
GetPlayerName(playerid, Nome, tamanho do Nome);
format(SQL_Format, sizeof(SQL_Format), "UPDATE `table_name` SET `colunm_name` = '%i' WHERE `player_name` = '%s'", 30 * 24 * 60 * 60 + gettime(), Name);
db_query(conexão, SQL_Format);
ETAPA 2: Verificando as contas.
Explicação: Vamos criar um timer que será responsável por verificar as contas inutilizadas e as mesmas, ao ultrapassarem o limite de tempo, serão automaticamente excluídas.
Temporizador ( OnGameModeInit/OnFilterStriptInit ):
Код:Explicação: Vamos criar um timer que será responsável por verificar as contas inutilizadas e as mesmas, ao ultrapassarem o limite de tempo, serão automaticamente excluídas.
Temporizador ( OnGameModeInit/OnFilterStriptInit ):
- Código:
[size=14][size=13]SetTimer("CheckUnusedAccounts", (24 * 60 * 1000), verdadeiro); // verifica a cada [b][u]1[/u][/b] dia[/size][/size]
[center][size=14]Mysql R7:[/size][/center]
[size=14]Код:
[size=13]encaminhar CheckUnusedAccounts();
public CheckUnusedAccounts()
{
novo MySQL_Format[200];
mysql_format(connection, MySQL_Format, "DELETE FROM `table_name` WHERE `colunm_name` < '%i'", gettime());
mysql_function_query(conexão, MySQL_Format, false, "", "");
retornar 1;
}[/size][/size]
SQLite:
Код:- Código:
encaminhar CheckUnusedAccounts();
public CheckUnusedAccounts()
{
novo SQL_Format[200];
format(SQL_Format, sizeof(SQL_Format), "DELETE FROM `table_name` WHERE `colunm_name` < '%i'", gettime());
db_query(conexão, SQL_Format);
retornar 1;
}
Explicação final (para iniciantes):
connection = Banco de dados.
table_name = Nome da tabela onde armazena os dados dos jogadores.
colunm_name = Nome da coluna que será inserida junto aos dados dos players.
player_name = Nome do jogador em questão.
[size=48]@ATUALIZAÇO: 27/11/2017[/size]
Estou atualizando este tópico para mostrar uma forma melhor e mais fácil de verificação sem precisar necessariamente formatar uma string para realizar tal verificação, sem falar que desta forma fica mais legível e "humana", pois não vamos precisar converter os segundos.
Vamos trabalhar com quatro funções SQL:
* NOW (SQLite/MySQL) = Pega o tempo atual já formatado em: AAAA/DD/MM HH/MM/SS
* DATEDIFF (MySQL) = Retorna a diferença entre 2 períodos de tempo: AAAA/DD/MM HH/MM/SS - AAAA/DD/MM HH/MM/SS = X dias * JULIANDAY (SQLite) = Retorna o tempo em
segundos , mas computa cálculos com datas e não necessariamente com segundos
* DATETIME (SQLite/MySQL) = Retorna a data e a hora
OBS.:
DATEDIFF( valor_maior , valor_menor )
Ex. correto: 1000 - 999 = 1
Ex. errado: 999 - 1000 = -1
O correto é calcular a data, claro, mas esse exemplo acima é sу pra ficar mais fácil de compreender o modo correto de calcular a data com o comando DATEDIFF.
Usando de forma errada, como mostrado acima, retorna valor negativo. (Não que seja errado, mas não é nosso objetivo trabalhar com negativo.)
Para começarmos, devemos criar uma coluna em nossa tabela com o tipo TIMESTAMP para armazenarmos o valor de NOW().
Código SQL usado para criar uma tabela:
- Código:
CREATE TABLE `tabela` (`id` INT(5) NOT NULL PRIMARY KEY AUTO_INCREMENT, `data` TIMESTAMP NOT NULL)
OBS.: SQLite utiliza AUTOINCREMENT ao invйs de AUTO_INCREMENT.
Inserindo informações:
MySQL:
Код:Inserindo informações:
MySQL:
- Código:
INSERT INTO `tabela` (`data`) VALORES (NOW())
SQLite:
Код:- Código:
INSERT INTO `tabela` (`data`) VALUES (datetime('now', 'localtime'))
Depois de criada a tabela, crie um timer global e a respectiva função a ser chamada:
Код:- Código:
SetTimer("VerificarInativos", (24 * 60 * 1000), true);
No código acima utilizamos um timer de 24 horas para chamar a verificação.
Verificação com MySQL:
Код:Verificação com MySQL:
- Código:
forward VerificarInativos();
public VerificarInativos()
{
mysql_query(con, "DELETE FROM `tabela` WHERE DATEDIFF(NOW(), `data`) > 90", true);
retornar verdadeiro;
}
Verificação com SQLite:
Код:- Código:
forward VerificarInativos();
public VerificarInativos()
{
db_query(con, "DELETE FROM `tabela` WHERE JULIANDAY('now') - JULIANDAY(`data`) > 90");
retornar verdadeiro;
}
Caso a conta esteja inativa por mais de 90 dias, então a mesma será deletada!
Com base na primeira explicação + essa segunda alternativa de verificação, acredito que tenha ficado claro a forma de usar.
Com base na primeira explicação + essa segunda alternativa de verificação, acredito que tenha ficado claro a forma de usar.
Creditos: F1N4L