Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Salve galera, mais um script para quem está precisando dar aquela limpada no banco de dados e otimizar o Servidor.
Crie um script chamado cleandatabase.lua na pasta globalevents/scripts e cole isso dentro dele.


-- Especificações --
-- TFS 1.1+
-- Objetivo é limpar as contas inativas/vazias e os players juntamente, assim removendo os usuários que estão inativos e ocupando espaço no banco de dados, isso é útil pela questão do processamento e comunicação do Servidor com o banco de dados, quanto mais clean, mais rápido será as operações.

--[[ Clean Database by Cjaker ]]--
local inactiveMonths = 3
local createdMonths = 1

local function clearInactivePlayers()
    local totalClear = 0
    local inactiveTimestamp = os.time() - (86400 * (inactiveMonths*30))
    local query = "SELECT * FROM accounts"
    local resultId = db.storeQuery(query)
    if resultId ~= false then
        repeat
            local haveActive = false
            local accId = result.getDataInt(resultId, "id")
            local players = db.storeQuery("SELECT * FROM `players` WHERE `account_id` = " ..accId)
            if players ~= false then
                repeat
                    local lastLogin = result.getDataInt(players, "lastlogin")
                    if lastLogin ~= 0 and lastLogin <= inactiveTimestamp then
                        db.query("DELETE FROM `players` WHERE `id` = " ..result.getDataInt(players, "id"))
                        totalClear = totalClear + 1
                    else
                        haveActive = true
                    end
                until not result.next(players)
                result.free(players)
                
                if not haveActive then
                    db.query("DELETE FROM `accounts` WHERE `id` = " ..accId)
                end
            end
        until not result.next(resultId)
    end
    result.free(resultId)
    
    return totalClear
end

local function clearEmptyAccounts()
    local totalClear = 0
    local createdTimestamp = os.time() - (86400 * (createdMonths*30))
    local query = "SELECT * FROM `accounts`"
    local resultId = db.storeQuery(query)
    if resultId ~= false then
        repeat
            local accId = result.getDataInt(resultId, "id")
            local createDate = result.getDataInt(resultId, "creation")
            if createDate <= createdTimestamp and db.storeQuery("SELECT * FROM players WHERE account_id = " ..accId) == false then
                db.query("DELETE FROM `accounts` WHERE `id` = " ..accId)
                totalClear = totalClear + 1
            end
        until not result.next(resultId)
    end
    result.free(resultId)
    
    return totalClear
end

function onStartup()
    print('>> ' ..clearEmptyAccounts().. " contas vazias deletadas.")
    print('>> ' ..clearInactivePlayers().. " players inativos deletados.")
end

Em globalevents.xml insira essa linha
 

<globalevent type="startup" name="CleanDatabases" script="cleandatabase.lua" />

Deixe seu REP+ para incentivar meu trabalho e publicar mais scripts interessantes como esse, valeu e bom uso!

  • Respostas 12
  • Visualizações 2.5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • É ruim executar queries em loop, esse código enorme que vc fez podia ser uma única querie se vc soubesse usar a linguagem SQL. Você tá simplesmente dando SELECT em TUDO e deixando pra filtrar pela lin

  • https://www.4shared.com/rar/lw2m5UTtba/Banco_de_Dados.html? upei todas minhas aulas de banco de dados nesse link aí, dá uma lida e vê se vc consegue refazer :D qualquer coisa posso te ajudar

Postado

Script pra qual versão do TFS? O que ele vai limpar da database?

Especifique no tópico para o pessoal ficar mais inteirado sobre ele.

Postado
  • Autor
4 minutos atrás, Matk disse:

Script pra qual versão do TFS? O que ele vai limpar da database?

Especifique no tópico para o pessoal ficar mais inteirado sobre ele.

Feito!

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