S0
pedido

Monitorar Private Messages (Pms)

Por s0me0ne, 20 de jul. de 2012 em Scripts

tibia
otserv
13
2.3k
s0me0neS
20 de julho de 2012 às 20:58

Versão do Tibia: 8.6

Informações: Bom, eu queria que tudo que o player enviar para outro através de PMs fosse arquivado num .txt. Não é impossível, eu já vi sistemas assim. Entããão, someone can help? Estou necessitando desse sistema pra descobrir como um cara está clonando items no meu server.

OneshotO
20 de julho de 2012 às 21:10

No channels.xml, procure por:

 

<channel id="65535" name="Private Chat Channel"/>

 

Troque por:

 

<channel id="65535" name="Private Chat Channel" logged="yes"/>

 

Não tenho muita certeza se irá funcionar. Caso não funcione, você poderá compilar um servidor com esse creaturescript onWriteToChannel e então é só fazer um script.

s0me0neS
20 de julho de 2012 às 21:16

Bom, eu já fiz as duas coisas. Até já fiz um script pra isso.

 

function onWriteToChannel(cid, channelId, text)

doWriteLogFile("data/logs/Channels/"..getCreatureName(cid).." [Channel "..channelId.."].txt",""..getCreatureName(cid)..": "..text.."")

return true

end

 

Era pra estar criando uma log para cada coisa que a pessoa escrevesse, com o nome e o id do channel, mas não funfou. (PS: A pasta channel já foi criada, antes que você diga)

 

~~ Edit ~~

 

Agora que vi que você me passou uma versão com alterações no sistema. Eu uso o do Colandus, sem o Default. Tem algum problema?

Editado Julho 20 por s0me0ne

OneshotO
20 de julho de 2012 às 21:21

Façamos assim.

 

function onWriteToChannel(cid, channelId, text)
local file = io.open("data/logs/channels/".. getCreatureName(cid) .." [".. channelId .."].txt", "a+")
file:write(os.date("%d/%m/%Y   %X") .."   ".. text)
file:close()
return true
end

 

O do Colandus só roda em canais configurados no channels.xml, se os jogadores estiverem conversando uns com os outros pelo Default ou privado, o script não irá retornar nada nesse caso.

Editado Julho 20 por Oneshot

s0me0neS
20 de julho de 2012 às 21:23

Então devo usar o seu modelo?

OneshotO
20 de julho de 2012 às 21:27

Sim, mas é a mesma coisa do Colandus, só adicionei para executar o creatureevent no game.cpp.

Editado Julho 20 por Oneshot

s0me0neS
20 de julho de 2012 às 21:29

Certo. Se funcionar eu venho aqui e edito.

OneshotO
20 de julho de 2012 às 21:41

Achei um modo mais limpo de fazer isso, requer uma pequena edição nas sources e você não vai precisar mais do creaturescript.

 

Abra o game.cpp, procure por:

 

#include "group.h"

 

Abaixo, coloque:

 

#include "textlogger.h"

 

Procure por:

 

Game::playerSay

 

Dentro da função, encontre:

 


switch(type)
{
	case SPEAK_SAY:
		return internalCreatureSay(player, SPEAK_SAY, text, false);
	case SPEAK_WHISPER:
		return playerWhisper(player, text);
	case SPEAK_YELL:
		return playerYell(player, text);
(...)

 

Adicione acima de switch(type)

 

Logger::getInstance()->eFile("players/" + player->getName() + ".log", text, true);

Editado Julho 20 por Oneshot

s0me0neS
20 de julho de 2012 às 21:47

Hm... Isso ai faz com que tudo seja arquivado, ou precisa configurar algo, etc?

OneshotO
20 de julho de 2012 às 21:49

Tudo vai ser arquivado e você não precisará configurar nada, só compilar.

s0me0neS
20 de julho de 2012 às 21:50

Certo, funfou. Brigadão ae. Dou REP + amanhã, os meus acabaram.

 

Mas com esse sistema ai não dá pra diferenciar quando é PM e quando é Default, né?

Editado Julho 20 por s0me0ne

OneshotO
20 de julho de 2012 às 22:03

É, essa é a única desvantagem, ele não vai diferenciar entre PMs e Default Channel. Compilei aqui para testar e funcionou certinho mesmo:

 

[20/7/2012 22:2:22] Ei, sabe o Mário?
[20/7/2012 22:2:51] Aquele que te comeu atrás do armário!!

Editado Julho 20 por Oneshot

KlaugunsK
20 de julho de 2012 às 23:44

Pelo menos se tiver algum bug no servidor e se alguem falar por default em algum lugar escondido o cara vai saber de tudo vou usalo no meu server...