Jump to content
  • 0

Porta que só abre se tiver 3 itens


srkapetinha

Question

Bom Dia pessoal do Xtibia, então, eu to querendo fazer uma quest de addon, só que eu preciso que o player tenha que ter 3 itens para passar na porta...

é só isso, deve ser simples para quem manja de script, oque não é meu caso :/

REP+ para quem puder me ajudar...

Obrigado :D

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0


local items = { --[Quantidade] = ITEMID,

[10] = 2160,

[2] = 3031,

 

}

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

for count, id in pairs(items) do

if getPlayerItemCount(cid, id) < count then

doPlayerSendCancel(cid, "Voce nao tem "..(count - getPlayerItemCount(cid, id)).." ".. getItemNameById(id).." para passar.")

doSendMagicEffect(fromPosition, CONST_ME_POFF)

return false

end

end

 

return true

end

 

Link to comment
Share on other sites

  • 0
local items = {	--[Quantidade] = ITEMID, 
				[10] = 2160,
				[2] = 3031,
				
			}
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	for count, id in pairs(items) do
		if getPlayerItemCount(cid, id) < count then
			doPlayerSendCancel(cid, "Voce nao tem "..(count - getPlayerItemCount(cid, id)).." ".. getItemNameById(id).." para passar.")
			doSendMagicEffect(fromPosition, CONST_ME_POFF)
			return false
		end
	end
 
    return true
end

Eu posso colocar quantos itens eu quiser? e eu tenho que por algo na porta no remeres?

Link to comment
Share on other sites

  • 0

Pera aí, esqueci de uma coisa, as portas já tem um arquivo.

 

vá na pasta others/doors.lua

 

em baixo de:

function onUse(cid, item, fromPosition, itemEx, toPosition)

, e coloque isso

if item.uid == 1234 then 
		local items = {	--[Quantidade] = ITEMID, 
					[10] = 2160,
					[2] = 2148,
				
				}
			
		for count, id in pairs(items) do
			if getPlayerItemCount(cid, id) < count then
				doPlayerSendTextMessage(cid,20, "Voce nao tem "..(count - getPlayerItemCount(cid, id)).." ".. getItemNameById(id).." para passar.")
				doSendMagicEffect(fromPosition, CONST_ME_POFF)
				return false
			end
		end
		doorEnter(cid, item, toPosition)
		return true
	end

Na porta você deve colocar uniqueId 1234, você pode alterar no script o 1234 para outro, e colocar no remeres esse outro...

o player só passará se tiver todos os items da tabela, seguindo o exemplo...

Edited by Caronte
Link to comment
Share on other sites

  • 0

Pera aí, esqueci de uma coisa, as portas já tem um arquivo.

 

vá na pasta others/doors.lua

 

em baixo de:

function onUse(cid, item, fromPosition, itemEx, toPosition)

, e coloque isso

if item.uid == 1234 then 
		local items = {	--[Quantidade] = ITEMID, 
					[10] = 2160,
					[2] = 2148,
				
				}
			
		for count, id in pairs(items) do
			if getPlayerItemCount(cid, id) < count then
				doPlayerSendTextMessage(cid,20, "Voce nao tem "..(count - getPlayerItemCount(cid, id)).." ".. getItemNameById(id).." para passar.")
				doSendMagicEffect(fromPosition, CONST_ME_POFF)
				return false
			end
		end
		doorEnter(cid, item, toPosition)
		return true
	end

Na porta você deve colocar uniqueId 1234, você pode alterar no script o 1234 para outro, e colocar no remeres esse outro...

o player só passará se tiver todos os items da tabela, seguindo o exemplo...

Vou testar aqui se der algum problema eu te falo, se der certo eu edito aqui e dou REP+ , valeeeu, obrigado mesmo.

 

@EDIT 1

Caronte, tem como quando a pessoa não tiver os itens, a mensagem mostrar todos itens que precisa? Ele amostra só o primeiro, ai se eu pego o primeiro que ele mostra o segundo, queria que mostrasse todos os itens que precisa de uma só vez...

E outra coisa, se eu quiser por essa porta em outra quest com itens diferentes,oque eu tenho que mudar? ou colocar?

 

@EDIT 2

Quando eu tenho os 3 itens, diz "You cannot use this object" , não dá pra entrar mesmo assim :/

Edited by srkapetinha
Link to comment
Share on other sites

  • 0

Eu esqueci de falar que tem que ser com um "Gate of Expertise" , me manda uma mensagem para EU me lembrar depois De editar para aparecer tudo, porque estou De celular...

Link to comment
Share on other sites

  • 0

Pera aí, esqueci de uma coisa, as portas já tem um arquivo.

 

vá na pasta others/doors.lua

 

em baixo de:

function onUse(cid, item, fromPosition, itemEx, toPosition)

, e coloque isso

if item.uid == 1234 then 
		local items = {	--[Quantidade] = ITEMID, 
					[10] = 2160,
					[2] = 2148,
				
				}
			
		for count, id in pairs(items) do
			if getPlayerItemCount(cid, id) < count then
				doPlayerSendTextMessage(cid,20, "Voce nao tem "..(count - getPlayerItemCount(cid, id)).." ".. getItemNameById(id).." para passar.")
				doSendMagicEffect(fromPosition, CONST_ME_POFF)
				return false
			end
		end
		doorEnter(cid, item, toPosition)
		return true
	end

Na porta você deve colocar uniqueId 1234, você pode alterar no script o 1234 para outro, e colocar no remeres esse outro...

o player só passará se tiver todos os items da tabela, seguindo o exemplo...

 

Caso eu queira que precise de level e não item, como faço?

Link to comment
Share on other sites

  • 0

Eu esqueci de falar que tem que ser com um "Gate of Expertise" , me manda uma mensagem para EU me lembrar depois De editar para aparecer tudo, porque estou De celular...

Mandei já Caronte, valeu :D

 

Caso eu queira que precise de level e não item, como faço?

http://www.xtibia.com/forum/topic/144346-porta-de-level/

Vê se esse tópico te ajuda amigo!

Boa sorte :D

Link to comment
Share on other sites

  • 0


if item.uid == 1234 then

local items = { --[Quantidade] = ITEMID,

[10] = 2160,

[2] = 2148,

 

}

local std = "Voce precisa dos seguintes items: "

for k, v in pairs(items) do

std = std.. k.."-"..getItemDescriptionsById(v).name.." "

end

 

for count, id in pairs(items) do

if getPlayerItemCount(cid, id) < count then

doPlayerSendTextMessage(cid,20, std)

doSendMagicEffect(fromPosition, CONST_ME_POFF)

return false

end

end

doorEnter(cid, item, toPosition)

return true

end

 

 

 

Link to comment
Share on other sites

  • 0
	if item.uid == 1234 then 
		local items = {	--[Quantidade] = ITEMID, 
					[10] = 2160,
					[2] = 2148,
				
				}
		local std = "Voce precisa dos seguintes items: "
		for k, v in pairs(items) do 
			std = std.. k.."-"..getItemDescriptionsById(v).name.."  "
		end
			
		for count, id in pairs(items) do
			if getPlayerItemCount(cid, id) < count then
				doPlayerSendTextMessage(cid,20, std)
				doSendMagicEffect(fromPosition, CONST_ME_POFF)
				return false
			end
		end
		doorEnter(cid, item, toPosition)
		return true
	end
	

Esse eu substituo o anterior que você mandou? Ou eu acrescento?

	if item.uid == 1234 then 
		local items = {	--[Quantidade] = ITEMID, 
					[10] = 2160,
					[2] = 2148,
				
				}
		local std = "Voce precisa dos seguintes items: "
		for k, v in pairs(items) do 
			std = std.. k.."-"..getItemDescriptionsById(v).name.."  "
		end
			
		for count, id in pairs(items) do
			if getPlayerItemCount(cid, id) < count then
				doPlayerSendTextMessage(cid,20, std)
				doSendMagicEffect(fromPosition, CONST_ME_POFF)
				return false
			end
		end
		doorEnter(cid, item, toPosition)
		return true
	end
	

2 Coisas, Ele só tá mostrando os 2 itens que você mandou com o script , o 3 que eu coloco aqui no script, não aparece, e continua não abrindo a porta com os itens.. Dá esse erro :

post-336465-0-10133500-1453327698_thumb.png

Edited by srkapetinha
Link to comment
Share on other sites

  • 0

@@Caronte:
Você não pode fazer o que fez, mas pode fazer o contrário

se vc colocar a quantidade na esquerda (entre colchetes), a quantidade não pode ser repetida (tipo vc nao pode colocar dois items q precisem de apenas 1 de cada) pq o pairs só vai ler o primeiro.

Teste aqui
http://www.lua.org/cgi-bin/demo(usa print pra ler o k,v in pairs)

@@srkapetinha, qual versão vc está usando? (tfs 1.x, tfs 0.4, tfs 0.3.6)? cada versão muda bastante o jeito de fazer os scripts, é bom informá-la.

Link to comment
Share on other sites

×
×
  • Create New...