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!