Ir para conteúdo
  • 0

DELETAR PLAYERS OFFLINE POR TEMPO


jhowzikah

Pergunta

Olá amigos, tenho um OT mapa baiak, estou com o sql muito carregado de players, estou com cerca de 400 players no sql, sendo que tem apenas 150 jogando...

Pedido: quero algum script que delete esses players inativos, com 12 dias de inatividade, independente do level.

Problema: ja testei varios scripts de outros sites e ate mesmo daqui, nao consegui arrumar nenhum 100%, ja executei na SQL esse seguinte comando, mas da error...

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

O ERROR FALA ALGUMA COISA SOBRE UNIX_TIMESTAMP..

Ja tentei tambem um que é pelo globalevents, acho que o nome é dbclean... algo assim, mas da erro na distro...

MINHA DISTRO É A TFS 0.36, DA OTLAND, OU A DO MAPA BASE DO BAIAK BARAO, QUE A A ALISSOW, uso as 2 pq roda perfeito com alto uptime.

Me ajudem por favor

----------------------------------------------------------

Um membro de outro forum me falou o seguinte:

VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

Esse unix_timestamp não funciona corretamente no SQLite Studio, e sim no MySQL

eu acho que você pode optar por outro jeito

Crie uma talkaction qualquer e execute ela in-game

function onSay(cid, words, param)

db.query("DELETE FROM `players` WHERE `level` < 50 AND `name` <> `Account Manager` AND `lastlogin` < ".. os.time() - 20 * 24 * 60 * 60)


return true
end

20 * 24 * 60 * 60 = tempo em segundos de inatividade.

20 * 24 * 60 * 60 = 20 dias offline.

40 * 24 * 60 * 60 = 40 dias offline.

-------------------------------------------------------------------------------

Eu n sei se fiz corretamente, mas n deu certo aqui... quando eu executo o comando, da erro na distro!

Estou desesperado pq quando o ot vai salvar, demora muito!

ME AJUDEM POR FAVOR!

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Problema:

[04/09/2015 13:34:28] [Error - TalkAction Interface]

[04/09/2015 13:34:28] data/talkactions/scripts/dbclean.lua:onSay

[04/09/2015 13:34:28] Description:

[04/09/2015 13:34:28] data/talkactions/scripts/dbclean.lua:8: attempt to call field 'query' (a nil value)

[04/09/2015 13:34:28] stack traceback:

[04/09/2015 13:34:28] data/talkactions/scripts/dbclean.lua:8: in function <data/talkactions/scripts/dbclean.lua:1>

Editei, tenta dnv.

Link para o comentário
Compartilhar em outros sites

  • 0
Troque:
db.query
por:
db.executeQuery

Esta correção também serve para aquele código que você mostrou no tópico.

 

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

  • 0

 

Troque:
db.query
por:
db.executeQuery

Esta correção também serve para aquele código que você mostrou no tópico.

 

 

[Warning - Event::loadScript] Event onSay not found (data/talkactions/scripts/deleteplayer.lua)

Editei, tenta dnv.

deu erro:

 

 

 

[04/09/2015 20:49:19] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such function: UNIX_TIMESTAMP (SELECT "id","name","account_id" FROM "players" WHERE "level" < 11 AND "name" NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND "group_id" < 2 AND "lastlogin" < UNIX_TIMESTAMP() - 432000;)
[04/09/2015 20:49:19] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such function: UNIX_TIMESTAMP (SELECT "id","name","account_id" FROM "players" WHERE "level" < 20 AND "name" NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND "group_id" < 2 AND "lastlogin" < UNIX_TIMESTAMP() - 1296000;)
[04/09/2015 20:49:19] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such function: UNIX_TIMESTAMP (SELECT "id","name","account_id" FROM "players" WHERE "level" < 50 AND "name" NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND "group_id" < 2 AND "lastlogin" < UNIX_TIMESTAMP() - 2592000;)
[04/09/2015 20:49:19] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such function: UNIX_TIMESTAMP (SELECT "id","name","account_id" FROM "players" WHERE "level" < 100 AND "name" NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND "group_id" < 2 AND "lastlogin" < UNIX_TIMESTAMP() - 5184000;)
[04/09/2015 20:49:19] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such function: UNIX_TIMESTAMP (SELECT "id","name","account_id" FROM "players" WHERE "level" < 130 AND "name" NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND "group_id" < 2 AND "lastlogin" < UNIX_TIMESTAMP() - 7776000;)

Ok, me desculpe.

 

No script que o Bruno postou, foi o que você conseguiu rodar, certo ?

Procure por esta linha:

result = db.getResult("SELECT `id`,`name`,`account_id` FROM `players` WHERE `level` < ".. cleanup[i].level .." AND `name` NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND `group_id` < 2 AND `lastlogin` < UNIX_TIMESTAMP() - ".. cleanup[i].time ..";")

E substitua por essa

result = db.getResult("SELECT `id`,`name`,`account_id` FROM `players` WHERE `level` < ".. cleanup[i].level .." AND `name` NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND `group_id` < 2 AND `lastlogin` < datetime('now', 'unixepoch', 'localtime') - ".. cleanup[i].time ..";")

Lembrando que faça sempre com um backup.

Cara, parece que funcionou kkkk, nao deu nenhum erro aqui na distro... vou tentar configurar pra 2 dias offline e aprovietar que irei viajar esse fds... ai quando voltar ja testo e te aviso, se puder me mandar uma PM com seu whatsapp, skype, sei la, manda...

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...