Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Bem, procurei aqui no Tibia King e não achei nada relacionado, então, criei um script de Caixa Postal, ou, Mensagem Offline, como preferirem.

 

Versão: TFS 0.4

Autor: Kemmlly

 

Como funciona: 

Enviar: O jogador usa o comando: !caixa "nome do jogador" - "Mensagem", sem as aspas. Se o jogador estiver Off, a mensagem ficará guardada na Caixa Postal dele, se não, o jogo te indicará a falar pelo PV.

Receber: O jogador que recebeu a mensagem usa o comando: !recados ler, para ler as mensagens que tem disponíveis na caixa, ou, !recados apagar, para limpar a caixa postal se estiver muito cheia, pois acumula mensagens, segue exemplo:

 

!recados ler

caixapostal.png

 

 

!recados apagar

caixavazia.png

 

 

Instalação:

data/talkactions/scripts/caixapostal.lua

function onSay(cid, words, param, channel)

local t = string.explode(param, "-")

	if t[1] == '' or t[1] == nil then
		doPlayerSendTextMessage(cid, 19, "Comando invalido, use !caixa 'NOME DO JOGADOR' - 'MENSAGEM' sem as aspas.")
		return true
		else
			local player = db.getResult("SELECT `id` FROM `players` WHERE `name` = '"..t[1].."';"):getDataInt("id")
			if player == nil then
			doPlayerSendTextMessage(cid, 19, "Esse jogador nao existe!")
			return true
				elseif	player ~= nil and t[2] == '' then
				doPlayerSendTextMessage(cid, 19, "A mensagem nao pode ser vazia!")
				return true
					elseif player ~= nil and t[2] ~= '' then
					if getPlayerByNameWildcard(t[1]) ~= nil then 
					doPlayerSendTextMessage(cid, 19, "Esse jogador esta online, fale pelo PV!")
					return true
					else
					local origem = getCreatureName(cid)
					local caixa = getGlobalStorageValue(player)
					local data = os.date("%d/%b as %X")
					if caixa == -1 or caixa == "Voce nao tem nenhum recado!" then caixa = "\n" end
					doPlayerSendTextMessage(cid, 19, "A mensagem foi enviada com sucesso!")
					setGlobalStorageValue(player, "["..data.."] - "..origem..": "..t[2].." \n\n"..caixa.."")
					return true
					end
			end
	
	end
end

 

data/talkactions/scripts/recados.lua

function onSay(cid, words, param, channel)

local t = string.explode(param, ",")
local player = db.getResult("SELECT `id` FROM `players` WHERE `name` = '"..getCreatureName(cid).."';"):getDataInt("id")
local mensagens = getGlobalStorageValue(player)

	if t[1] == '' or t[1] == nil then
	doPlayerSendTextMessage(cid, 19, 'Comando invalido.')
	elseif t[1] == 'ler' then
	if mensagens == -1 then mensagens = "Voce nao tem nenhum recado!" 
	doShowTextDialog(cid, words, '-- Recados --\n\n'..mensagens..'')
	else
	doShowTextDialog(cid, words, '-- Recados --\n\n'..mensagens..'')
	end
	elseif t[1] == 'apagar' then
	doPlayerSendTextMessage(cid, 19, 'Mensagens apagadas com sucesso!')
	setGlobalStorageValue(player, "Voce nao tem nenhum recado!")
	end
	return true
	
end
	

 

data/talkactions/talkactions.xml

	<talkaction words="!caixa" event="script" value="caixapostal.lua"/>
	<talkaction words="!recados" event="script" value="recados.lua"/>

 

Ultimo passo, porém, importante;

 

em data/lib/004-database.lua vá até a linha 60 e mude:

error("[Result:getDataInt] Result not set!")

para:

return nil

 

Se no seu não for exatamente na linha 60, procure a função:

function Result:getDataInt(s)
	if(self:getID() == -1) then
		error("[Result:getDataInt] Result not set!")
	end

E faça a alteração. Isso é para não dar erro na hora de procurar um player pelo nome quando o jogador escrever um nome de player inválido.

 

Espero que gostem, abraços.

  • Respostas 6
  • Visualizações 1.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Porque você invés de modificar a função db.getResult retornando para nil para evitar um erro que tem no seu script, porque você não cria uma função própria para o seu script para não retornar nil, som

  • vocẽ está salvando as mensagem em uma storage global, não seria melhor colocar para salvar em um arquivo de logs e acessar ele quando o jogador pedir? até porque o valor que você coloca na storage tem

  • Pensei nisso mesmo, em colocar em arquivos de log, mas não sabia que tinha limite de caracteres no global storage, aí fiz pelo global mesmo, mas agora que sei vou mudar. Realmente é a forma correta, o

Posted Images

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Postado
6 horas atrás, Kemmlly disse:

Bem, procurei aqui no Tibia King e não achei nada relacionado, então, criei um script de Caixa Postal, ou, Mensagem Offline, como preferirem.

 

Versão: TFS 0.4

Autor: Kemmlly

 

Como funciona: 

Enviar: O jogador usa o comando: !caixa "nome do jogador" - "Mensagem", sem as aspas. Se o jogador estiver Off, a mensagem ficará guardada na Caixa Postal dele, se não, o jogo te indicará a falar pelo PV.

Receber: O jogador que recebeu a mensagem usa o comando: !recados ler, para ler as mensagens que tem disponíveis na caixa, ou, !recados apagar, para limpar a caixa postal se estiver muito cheia, pois acumula mensagens, segue exemplo:

 

!recados ler

caixapostal.png

 

 

!recados apagar

caixavazia.png

 

 

Instalação:

data/talkactions/scripts/caixapostal.lua


function onSay(cid, words, param, channel)

local t = string.explode(param, "-")

	if t[1] == '' or t[1] == nil then
		doPlayerSendTextMessage(cid, 19, "Comando invalido, use !caixa 'NOME DO JOGADOR' - 'MENSAGEM' sem as aspas.")
		return true
		else
			local player = db.getResult("SELECT `id` FROM `players` WHERE `name` = '"..t[1].."';"):getDataInt("id")
			if player == nil then
			doPlayerSendTextMessage(cid, 19, "Esse jogador nao existe!")
			return true
				elseif	player ~= nil and t[2] == '' then
				doPlayerSendTextMessage(cid, 19, "A mensagem nao pode ser vazia!")
				return true
					elseif player ~= nil and t[2] ~= '' then
					if getPlayerByNameWildcard(t[1]) ~= nil then 
					doPlayerSendTextMessage(cid, 19, "Esse jogador esta online, fale pelo PV!")
					return true
					else
					local origem = getCreatureName(cid)
					local caixa = getGlobalStorageValue(player)
					local data = os.date("%d/%b as %X")
					if caixa == -1 or caixa == "Voce nao tem nenhum recado!" then caixa = "\n" end
					doPlayerSendTextMessage(cid, 19, "A mensagem foi enviada com sucesso!")
					setGlobalStorageValue(player, "["..data.."] - "..origem..": "..t[2].." \n\n"..caixa.."")
					return true
					end
			end
	
	end
end

 

data/talkactions/scripts/recados.lua


function onSay(cid, words, param, channel)

local t = string.explode(param, ",")
local player = db.getResult("SELECT `id` FROM `players` WHERE `name` = '"..getCreatureName(cid).."';"):getDataInt("id")
local mensagens = getGlobalStorageValue(player)

	if t[1] == '' or t[1] == nil then
	doPlayerSendTextMessage(cid, 19, 'Comando invalido.')
	elseif t[1] == 'ler' then
	if mensagens == -1 then mensagens = "Voce nao tem nenhum recado!" 
	doShowTextDialog(cid, words, '-- Recados --\n\n'..mensagens..'')
	else
	doShowTextDialog(cid, words, '-- Recados --\n\n'..mensagens..'')
	end
	elseif t[1] == 'apagar' then
	doPlayerSendTextMessage(cid, 19, 'Mensagens apagadas com sucesso!')
	setGlobalStorageValue(player, "Voce nao tem nenhum recado!")
	end
	return true
	
end
	

 

data/talkactions/talkactions.xml


	<talkaction words="!caixa" event="script" value="caixapostal.lua"/>
	<talkaction words="!recados" event="script" value="recados.lua"/>

 

Ultimo passo, porém, importante;

 

em data/lib/004-database.lua vá até a linha 60 e mude:


error("[Result:getDataInt] Result not set!")

para:


return nil

 

Se no seu não for exatamente na linha 60, procure a função:


function Result:getDataInt(s)
	if(self:getID() == -1) then
		error("[Result:getDataInt] Result not set!")
	end

E faça a alteração. Isso é para não dar erro na hora de procurar um player pelo nome quando o jogador escrever um nome de player inválido.

 

Espero que gostem, abraços.

 

Script bacana, depois irei testa-lo. Obrigado pelo conteúdo e acredito que ajudará muitas pessoas! Continue assim :D

Postado

Porque você invés de modificar a função db.getResult retornando para nil para evitar um erro que tem no seu script, porque você não cria uma função própria para o seu script para não retornar nil, somente em seu script, porque vai que alguém utiliza db.getResult no futuro, e tenha problema porque utilizou o seu nil? :p

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Postado
  • Autor
8 horas atrás, vankk disse:

Porque você invés de modificar a função db.getResult retornando para nil para evitar um erro que tem no seu script, porque você não cria uma função própria para o seu script para não retornar nil, somente em seu script, porque vai que alguém utiliza db.getResult no futuro, e tenha problema porque utilizou o seu nil? :p

 

Na verdade, eu já modifiquei isso no database porque ele quando não acha determinado valor dentro da tabela retorna ERROR, eu não mudei os parâmetros do getDatInt, mudei apenas a forma com que ele representa que não achou resultado nenhum, de ERRO para NIL, porque assim fica bem mais fácil de usa-lo nas condições de script, não só pra esse mas para qualquer um, eu só resumi o ERROR para NIL para facilitar a programação, não interfere no resultado positivo do getDatInt.

 

Obrigado por comentar, abraços.

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo