Jump to content
  • 0

Alguma função


Skymagnum

Question

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 to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 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

 

Edited by nogenem45
Link to comment
Share on other 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)

Edited by dalvorsn
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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?

Edited by dalvorsn
Link to comment
Share on other 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 to comment
Share on other 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

Edited by Skymagnum
Link to comment
Share on other 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 to comment
Share on other 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.

Edited by Skymagnum
Link to comment
Share on other sites

×
×
  • Create New...