Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Usando o script do Cjaker como base (e a descrição do tópico dele, na cara dura mesmo!), otimizei as operações no banco de dados (tava muito zuado) e adicionei um range de accounts protegidas pra evitar apagar os gms/samples/contas de spoofers do otservlist/etc... ;

Salve galera, mais um script para quem está precisando dar aquela limpada no banco de dados e otimizar o Servidor.

 

-- Especificações --

  • TFS 1.1+
  • Objetivo é limpar as contas inativas/vazias e os players Inativos assim removendo os usuários que estão inativos e ocupando espaço no banco de dados.
     

-- Instruções --

 

  • Em globalevents.xml insira essa linha
    <globalevent type="startup" name="CleanDatabases" script="cleandatabase.lua" />

 

  • Crie um script chamado cleandatabase.lua na pasta globalevents/scripts e cole isso dentro dele.
    ---
    --- Generated by EmmyLua(https://github.com/EmmyLua)
    --- Created by leu.
    --- DateTime: 04/04/18 18:42
    ---
    
    --[[ Clean Database by Cjaker | Refactor and SQL Optimizations by Leu ]]--
    
    local inactiveMonths = 1 --> Quantos meses o player ficou inativo
    local createdMonths = 1 --> Quantos meses a conta foi criada e não possui character criado.
    local protectedAccIdEnd = 20 --ignorar accounts com id <= 20
    local function clearInactivePlayers()
        local inactiveTimestamp = os.time() - (86400 * (inactiveMonths*30))
        local totalClear=0
    
        local fromClause = "`players` WHERE `account_id` > ".. protectedAccIdEnd .." AND lastlogin <= "..inactiveTimestamp
    
        local resultId = db.storeQuery("SELECT COUNT(*) as num_inativos FROM "..fromClause)
        if resultId ~= false then
            totalClear = result.getDataInt(resultId, 'num_inativos')
            result.free(resultId)
            if totalClear > 0 then
                db.query("DELETE FROM "..fromClause)
            end
        end
    
        return totalClear
    end
    
    local function clearEmptyAccounts()
        local totalClear = 0
        local createdTimestamp = os.time() - (86400 * (createdMonths*30))
    
        local fromClause = "`accounts` ACCS WHERE `id` > ".. protectedAccIdEnd .." AND `creation` <= "..createdTimestamp.." AND (SELECT COUNT(*) from `players` WHERE `account_id` = ACCS.`id`) > 0"
    
        local resultId = db.storeQuery("SELECT COUNT(*) as num_inativas FROM "..fromClause)
        if resultId~= false then
            totalClear = result.getDataInt(resultId,'num_inativas')
            result.free(resultId)
            if totalClear > 0 then
                db.query("DELETE ACCS FROM "..fromClause)
            end
        end
    
    
        return totalClear
    end
    
    function onStartup()
        print('>> ' ..clearInactivePlayers().. " players inativos deletados.")
        print('>> ' ..clearEmptyAccounts().. " contas vazias deletadas.")
    end
      

     

 

é isso senhores, paganois, flw!

 

EDIT 24-04-2018: correção DELETE accs QUERY

 

Editado por Leu
correção DELETE accs QUERY (veja o histórico de edições)

  • Respostas 7
  • Visualizações 3.9k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • É uma opção ótima para quem não deseja deletar contas especiais, como no meu tópico dizia era no caso de todas sem exceção. Nem lembrava do tópico para otimizar, mas já que o fez, REP+

  • acho que algo assim funcionaria.   local inactiveMonths = 1 local createdMonths = 1 local protectedAccIdEnd = 20 local function clearInactivePlayers() local inactiveTimestamp = os.time()

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Postado

É uma opção ótima para quem não deseja deletar contas especiais, como no meu tópico dizia era no caso de todas sem exceção.
Nem lembrava do tópico para otimizar, mas já que o fez, REP+

  • 2 weeks later...
Postado

@Leu

 

deu um error e apagou só ps players

acho que é por que o meu funciona só com asyncQuery

Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ACCS WHERE `id` > 20 AND `creation` <= 1518512414 AND (SELECT COUNT(*) from `pla' at line 1

 

Editado por Dolera (veja o histórico de edições)

Postado
  • Autor
Em 4/14/2018 em 17:09, Dolera disse:

@Leu

 

deu um error e apagou só ps players

acho que é por que o meu funciona só com asyncQuery


Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ACCS WHERE `id` > 20 AND `creation` <= 1518512414 AND (SELECT COUNT(*) from `pla' at line 1

 

 

tava errado mesmo, faltando 1 palavrinha lá no  DELETE. Já corrigi, valeu

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo