Ir para conteúdo

Posts Recomendados

Ola galerinha xtibiana.

Vou disponibilizar um sistema de mensagens offline de modo simples e pratica.

Não e necessário a utilização de database basta um arquivo de texto.

 

Para mandar uma mensagem e so dizer /msg(nome do player, mensagem).

E quando o player logar ele vai ter que abrir uma channel de mensagens off e ele receberá as mensagens.

 

Vamos a instalação.

 

Crie um arquivo de TEXTO chamado de mensagens na pasta data do seu otserv

 

Agora vá em lib e crie um arquivo lua chamado de mensagens:

 

function doSendMsg(cid, receptor, msg)
local file = io.open("./mensagens.txt", "a")
file:write("\n Player "..tostring(receptor).." Mensagem: "..tostring(msg).." por "..getCreatureName(cid).."End")
file:close()
end

function getPlayerMgs(name)
local x = {}
local msg = io.open("./mensagens.txt", "r")
for i in msg:read("*a"):gmatch("Player "..name.." Mensagem: (.-)End") do
table.insert(x, tostring(i))
io.close()
end
return x or 0
end

 

Vá em data/xml e abra o arquivo channel.xml.

E coloque isto:

 

 

 

<channel id="68" name="Mensagens Off" level="1"/>

 

 

 

Vá em talkactions e crie um arquivo lua chamado de mens e coloque isto:

 

function onSay(cid, words, param, channel)
local t = string.explode(param, ",")
if not t[1] then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve dizer o nome do player /msg(nome do player, mensagem)") and false
end
if not t[2] then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve escrever a mensagem  /msg(nome do player, mensagem)") and false
end
if #t[2] <= 4 then
return doPlayerSendCancel(cid, "Você deve dizer a msg com mais de 4 caracteres /msg(nome do player, mensagem)") and false
end
if not playerExists(t[1]) then
return doPlayerSendCancel(cid, "Este player não existe") and false
end
local pid = getPlayerByNameWildcard(receptor)
if pid then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem não foi enviado porque este player esta online") and false
end
doSendMsg(cid, t[1], t[2])
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem foi enviado com sucesso para "..t[1].."")
return true
end

 

Vá em talkactions.xml e coloque esta tag:

 

 

 

<talkaction words="/msg" event="script" value="mens.lua"/>

 

 

 

Vá em creaturescripts e crie um arquivo lua chamado de mens e coloque este código:

 

function onLogin(cid)
local mens = getPlayerMgs(getCreatureName(cid))
local str = "Você tem "..#mens.." mensagens olhe na channel de Mensagens Off"
if #mens >= 1 then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, str)
return true
end
return true
end

 

Vá em creaturescripts e crie um arquivo lua chamado de mensagens e coloque isto:

 

function onJoinChannel(cid, channelId)
if channelId == 68 then
local mens = getPlayerMgs(getCreatureName(cid))
for i = 1, #mens do
doShowTextDialog(cid, 1397, mens[i])
end
return true
end
return true
end

 

Registre o evento em login.lua colocando isto antes do ultimo return true:

 

 

 

registerCreatureEvent(cid, "mensagens")
registerCreatureEvent(cid, "mens")

 

 

 

Vá em creaturescripts e coloque esta tag em creaturescripts.xml:

 

 

 

<event type="joinchannel" name="mensagens" event="script" value="mensagens.lua"/>
<event type="login" name="mens" event="script" value="mens.lua"/>

 

 

 

E isto ae pessoal.

Agora quando o player logar ele recebe a mensagem e basta ele abrir a channel e ir clikando "Ok" nas paginas do dialogo

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

Muito Bom!!

Ah tempos estava a procura desse sistema... ainda bem que visualmente esta melhorando a seção de scripts!

 

Muitos servidores irão ultilizar este... muito bom mesmo!!

 

Sugestão para \V2/:

- Colocar um bloqueador. Exemplo: !bloquiar Fulano

Assim, "Fulano" não poderia mandar mais mensagens private pra mim.

 

- Limite de mensagens: Seria legal ter um limite de mensagens para evitar flood, exemplo: 10 (free) e 20 (vip).

Mensagens numeradas, dando pra usar o comando (exemplo): !deletemessage 2, aí caso chegue no limite de mensagens, seria avisado que tal player não pode receber mais mensagens..

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

muito bom ms caotic.. sempre trazendo scripts interessantes '--'

da pra tirar um duvida?

tem alguma diferença entre essas funçoes?...

getPlayerByNameWildcard(receptor) e getPlayerByName(receptor)

Link para o comentário
Compartilhar em outros sites

Aqui deu isso:

 

[04/01/2013 23:20:45] [Error - CreatureScript Interface]

[04/01/2013 23:20:45] data/creaturescripts/scripts/mens.lua:onLogin

[04/01/2013 23:20:45] Description:

[04/01/2013 23:20:45] data/lib/mensagens.lua:10: attempt to index local 'msg' (a nil value)

[04/01/2013 23:20:45] stack traceback:

[04/01/2013 23:20:45] data/lib/mensagens.lua:10: in function 'getPlayerMgs'

[04/01/2013 23:20:45] data/creaturescripts/scripts/mens.lua:2: in function <data/creaturescripts/scripts/mens.lua:1>

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Aqui deu erro quando loga o char

 

[27/01/2013 15:30:43] Lipee has logged in.
[27/01/2013 15:30:43] [Error - CreatureScript Interface]
[27/01/2013 15:30:43] data/creaturescripts/scripts/mens.lua:onLogin
[27/01/2013 15:30:43] Description:
[27/01/2013 15:30:43] data/lib/mensagens.lua:10: attempt to index local 'msg' (a nil value)
[27/01/2013 15:30:43] stack traceback:
[27/01/2013 15:30:43]  data/lib/mensagens.lua:10: in function 'getPlayerMgs'
[27/01/2013 15:30:43]  data/creaturescripts/scripts/mens.lua:2: in function <data/creaturescripts/scripts/mens.lua:1>
[27/01/2013 15:30:43] Lipee has logged out.

Link para o comentário
Compartilhar em outros sites

Aqui deu erro quando loga o char

 

[27/01/2013 15:30:43] Lipee has logged in.
[27/01/2013 15:30:43] [Error - CreatureScript Interface]
[27/01/2013 15:30:43] data/creaturescripts/scripts/mens.lua:onLogin
[27/01/2013 15:30:43] Description:
[27/01/2013 15:30:43] data/lib/mensagens.lua:10: attempt to index local 'msg' (a nil value)
[27/01/2013 15:30:43] stack traceback:
[27/01/2013 15:30:43]  data/lib/mensagens.lua:10: in function 'getPlayerMgs'
[27/01/2013 15:30:43]  data/creaturescripts/scripts/mens.lua:2: in function <data/creaturescripts/scripts/mens.lua:1>
[27/01/2013 15:30:43] Lipee has logged out.

 

Tem certeza que segui o procedimento certo.

 

Crie um arquivo de TEXTO chamado de mensagens na pasta data do seu otserv

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...