SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Exclusão de contas inutilizadas [SQL]

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031976
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Exclusão de contas inutilizadas [SQL] Empty [Tutorial] Exclusão de contas inutilizadas [SQL]

    Mensagem por Weslley_Script Qua 5 Abr 2023 - 12:17

    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:
    Код:

    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 ):
    Код:

    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;
    }


    [Tutorial] Exclusão de contas inutilizadas [SQL] PisWn5w

    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:
    Код:

    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:
    Код:

    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.


    Creditos: F1N4L



    [Tutorial] Exclusão de contas inutilizadas [SQL] D07Xwqb
    [Tutorial] Exclusão de contas inutilizadas [SQL] Yjab9HN

      Data/hora atual: Ter 7 maio 2024 - 16:55