Ir para conteúdo
  • 0

Alguma função


Skymagnum

Pergunta

Bom dia eu estava afastado de Tibia, e resolvi voltar e fazer um script, porém eu não me recordo da função que pega os itens que tem no tile, então eu queria saber se alguém ai se lembra da função que pegaria um item que esta no tile(eu não sei o id do item, pq é aleatorio, só queria pegar aquele item lá)

	local positions = {		{x = 1052, y = 1056, z = 7},		{x = 1052, y = 1057, z = 7},		{x = 1052, y = 1058, z = 7},		{x = 1052, y = 1059, z = 7},		{x = 1052, y = 1060, z = 7},		{x = 1052, y = 1051, z = 7}	}		local rep = math.random(1, 20)	local count = 1	local cc = 1	local lastPos = nil		for i = 1, rep do		addEvent(doSendMagicEffect, count * 150, positions[cc], 6)		count = count + 1		cc = cc + 1		if cc > #positions then			cc = 1		end		lastPos = positions[cc]	end		local getItem = aqui iria a função que vai pegar o item da lastPos

 

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 1

/\ algu assim?

local function getItemInPos(pos)   local info = getTileInfo(pos)   local p = {x=pos.x, y=pos.y, z=pos.z}      for i = info.things, 1, -1 do      p.stackpos = i      local item = getTileThingByPos(p)      if item.itemid > 0 and not isCreature(item.uid) then         return item      end   end   return {itemid = 0, uid = 0}endlocal positions = {  {x = 1052, y = 1056, z = 7},  {x = 1052, y = 1057, z = 7},  {x = 1052, y = 1058, z = 7},  {x = 1052, y = 1059, z = 7},  {x = 1052, y = 1060, z = 7},  {x = 1052, y = 1051, z = 7}}local lastPos = nilfor i = 0, math.random(0, 19) do   lastPos = positions[(i%#positions)+1]     addEvent(doSendMagicEffect, i*150, lastPos, 6)   endlocal item = getItemInPos(lastPos)--agora podes usar item.itemid e item.uid

 

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

  • 0
local info = getTileInfo(pos)info.things -- todos os things( items + creatures )info.items -- todos os itemsinfo.creatures -- creatures no tileinfo.topItems info.downItems

Sem o id e sem o stackpos o melhor que da pra fazer é puxar a lista de todos no tile

 

 

Caso voce saiba o stack pos, tu pode usar esse aqui:

getThingFromPosition(pos)

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

  • 0
2 horas atrás, dalvorsn disse:
local info = getTileInfo(pos)info.things -- todos os things( items + creatures )info.items -- todos os itemsinfo.creatures -- creatures no tileinfo.topItems info.downItems

Sem o id e sem o stackpos o melhor que da pra fazer é puxar a lista de todos no tile

 

 

Caso voce saiba o stack pos, tu pode usar esse aqui:

getThingFromPosition(pos)

 

setField(L, "things", tile->getThingCount());setField(L, "creatures", tile->getCreatureCount());setField(L, "items", tile->getItemCount());setField(L, "topItems", tile->getTopItemCount());setField(L, "downItems", tile->getDownItemCount());

 

acho que soh retorna a qntdade heim... o.O

Link para o comentário
Compartilhar em outros sites

  • 0
1 minute ago, nogenem45 said:

 

setField(L, "things", tile->getThingCount());setField(L, "creatures", tile->getCreatureCount());setField(L, "items", tile->getItemCount());setField(L, "topItems", tile->getTopItemCount());setField(L, "downItems", tile->getDownItemCount());

 

acho que soh retorna a qntdade heim... o.O

Sim, mas a ordem dele é baseada na quantidade, o stack é diretamente o numero de things.

Aqueles 255 253 são apenas padrões pra função lua buscar, o item não está de fato no stack 255, ele ta la no inicio

se tu fizer um loop com stack variando ate a quantidade do things, tu pega todos os things do tile

só nao me recordo se ele começa de 0 ou de 1

Link para o comentário
Compartilhar em outros sites

  • 0
15 minutes ago, nogenem45 said:

/\ algu assim?

local function getItemInPos(pos)   local info = getTileInfo(pos)   local p = {x=pos.x, y=pos.y, z=pos.z}      for i = info.things, 1, -1 do      p.stackpos = i      local item = getTileThingByPos(p)      if item.itemid > 0 and not isCreature(item.uid) then         return item      end   end   return {itemid = 0, uid = 0}endlocal positions = {  {x = 1052, y = 1056, z = 7},  {x = 1052, y = 1057, z = 7},  {x = 1052, y = 1058, z = 7},  {x = 1052, y = 1059, z = 7},  {x = 1052, y = 1060, z = 7},  {x = 1052, y = 1051, z = 7}}local lastPos = nilfor i = 0, math.random(0, 19) do   lastPos = positions[(i%#positions)+1]     addEvent(doSendMagicEffect, i*150, lastPos, 6)   endlocal item = getItemInPos(lastPos)--agora podes usar item.itemid e item.uid

 

Yep, mas podem haver mais items, nesse caso tem que ver o que ele precisa, como ele vai identificar qual item certo. O que tu fez retornaria sempre apenas um item, o primeiro mais acima.

@Skymagnum Qual o metodo de identificação do item correto? Ou basta ser o topitem?

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

  • 0

/\ eh fiquei nessa duvida tb, tem hora q ele fla 'os items' e tem hora q ele fla 'o item'... tava esperando ele flar algu ;p

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpem a demora, só vai haver um item no tile, é tipo uma "roleta" vai sair soltando os effects e parar em uma posição e dar o item que tiver nela para o jogador.

 

-- essa do @nogenem45 vai me servir, muito obrigado aos 2

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

  • 0

posso dar uma opinião? se vc vai usar roleta então provavelmente os itens são muito bem definidos, vc pode usar getTileItemById (pos, itemid) q nem o @Poccnn bem colocou.
Pra mim é a função mais "confiável" de se usar, as outras vc vai ter que ficar checando possiveis bugs e falhas no sistema o tempo todo e isso acaba sendo mais pesado pro número de execuções do que a própria definição da função via source. Qualquer dúvida tamo aí

Link para o comentário
Compartilhar em outros sites

  • 0
8 horas atrás, Night Wolf disse:

posso dar uma opinião? se vc vai usar roleta então provavelmente os itens são muito bem definidos, vc pode usar getTileItemById (pos, itemid) q nem o @Poccnn bem colocou.

Pra mim é a função mais "confiável" de se usar, as outras vc vai ter que ficar checando possiveis bugs e falhas no sistema o tempo todo e isso acaba sendo mais pesado pro número de execuções do que a própria definição da função via source. Qualquer dúvida tamo aí

Sim pensei em colocar todos os itens em um array e checar se eles estão lá, vou ver qual fica melhor.

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

×
×
  • Criar Novo...