Ir para conteúdo

[Encerrado] Database Com Players Inativos


Posts Recomendados

Alguns jogadores, criam conta, e se por acaso não gostam do servidor, eles saem. E assim o servidor vai crescendo... E crescendo...

E chega um ponto que a database fica muito pesado. Tipo: o servidor tem 200 players online, e na database tem 5 mil jogadores.

-----MAIS DA METADE NUNCA MAIS ENTRA NO SERVIDOR----

Preciso de um programa que acabe com isso tipo: um programa que indica qual o ultimo dia que o player logou o char. E no caso se n puder deletar altomaticamente, eu posso deletar manualmente...

Agradescido a quem ajduar... =D

Jefferson

Link para o comentário
Compartilhar em outros sites

Qual a sua DB MySQL ou SQLite ?

 

Se for MySQL use query para poder excluir contas com determinadas características, indo no PhpMyAdmin na aba SQL para poder inserir a query.

 

* Deletar players inativos a 20 dias ou leveis 50-.

DELETE FROM players WHERE level < 50 AND lastlogin < UNIX_TIMESTAMP() - 20*24*60*60

 

* Deletar players que nunca logaram.

DELETE FROM `players` WHERE `lastlogin`=0;

 

Para mais comandos tem um topico legal aqui no Xtibia: aqui

Link para o comentário
Compartilhar em outros sites

Qual a sua DB MySQL ou SQLite ?

 

Se for MySQL use query para poder excluir contas com determinadas características, indo no PhpMyAdmin na aba SQL para poder inserir a query.

 

* Deletar players inativos a 20 dias ou leveis 50-.

DELETE FROM players WHERE level < 50 AND lastlogin < UNIX_TIMESTAMP() - 20*24*60*60

 

* Deletar players que nunca logaram.

DELETE FROM `players` WHERE `lastlogin`=0;

 

Para mais comandos tem um topico legal aqui no Xtibia: aqui

 

Rapidex a resposta eim!! :D

Eu n tenho site... É SQlite

 

Mais uma!! Eu devo colocar os cmds que vc mandar (se tiver) no talkaction, movements, ou action?

Link para o comentário
Compartilhar em outros sites

Mano tem uma talkaction se não me engano e do datapack do emporia da vapus, vou tentar postar aqui para você que com ela da para você executar query in game, num sei se vai rular em SQLite:

 

Em talkactions adicione:

<talkaction log="yes" words="/dbquery" access="6" script="dbquery.lua"/>

 

crie o arquivo dbquery.lua com o codigo:

 

function onSay(cid, words, param)

db.executeQuery(param)

return TRUE
end

 

Assim você tenta in-game:

/dbquery QUERY CODE

Editado por misaelzin
Link para o comentário
Compartilhar em outros sites

Query é aquilo que eu te mandei no primeiro post, é um comando para o SQL executar:

 

Exemplo:

Deletar players que nunca logaram.

DELETE FROM `players` WHERE `lastlogin`=0;

Então in-game ficaria assim /dbquery DELETE FROM `players` WHERE `lastlogin`=0

Editado por misaelzin
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Adicione um global event usado no elf war.

 

 

 

<globalevent name="cleandb" interval="46200" script="dbclean.lua"/>

 

 

dbclean.lua

 

-- [[> Automated Database Cleanup 1.1 //By Cybermaster <]] --
-- [[> Function getDBPlayersCount() by Elf <]] --
function getDBPlayersCount()
local result = db.getResult("SELECT COUNT(`id`) as `count` FROM `players`;")
local tmp = result:getDataInt("count")
result:free()
return tmp
end
function onStartup()
local DB_BEFORE = getDBPlayersCount()
--In each table, players with below specified level, and days of inactivity will be deleted from db on server startup
local cleanup = {
[1] = {level = 11, time = 5 * 24 * 60 * 60},
[2] = {level = 5000, time = 15 * 24 * 60 * 60},
[3] = {level = 30000, time = 30 * 24 * 60 * 60},
[4] = {level = 50000, time = 60 * 24 * 60 * 60},
[5] = {level = 150000, time = 90 * 24 * 60 * 60}
}
for i = 1, #cleanup do
	db.executeQuery("DELETE FROM `players` WHERE `level` < ".. cleanup[i].level .." AND `id` > 6 AND `group_id` < 2 AND `lastlogin` < UNIX_TIMESTAMP() - ".. cleanup[i].time ..";")
end

local DB_NOW = DB_BEFORE - getDBPlayersCount()
if DB_NOW > 0 then
	local text = ">> [DBCLEANUP] "..DB_NOW.." inactive players have been deleted from database."
	print("" .. text .. "")
	local file = io.open("data/logs/db_cleanup.txt", "a")
	file:write("\n[".. os.date("%d %B %Y %X ", os.time()) .."] "..text.."")
	file:close()
end
return true
end

Editado por Leoprotons
Link para o comentário
Compartilhar em outros sites

Por nada, bom eu me esqueci de citar que eu coloquei o globalevent pra poder executar de 12 em 12 horas, você pode colocar o tempo que quiser basta transformar o tempo em segundos e colocar aonde esta o numero 46200.

 

Obs: lembre-se que ele não sera execultado caso o servidor não fique on pelo tempo descrito em interval.

Link para o comentário
Compartilhar em outros sites

  • 6 years later...
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...