Search the Community
Showing results for tags 'Clean Database'.
Found 2 results
-
GlobalEvent [TFS 1.1+] Limpar Characters Inativos / Accounts vazias
Leu posted a topic in Classic Tibia
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- 5 replies
-
- Programação
- lua
-
(and 7 more)
Tagged with:
-
CreatureScript/GlobalEvent/MoveMent Limpar database (otimização)
Cjaker posted a topic in Classic Tibia
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!
Tibia King
Open Tibia Server
Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.
Anuncie no Tibia King
Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!