getTileItemById (pos, itemid)
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

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 Maio 6 por dalvorsn
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

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.downItemsSem 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... ![]()
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...
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
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

/\ 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 Maio 6 por nogenem45
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 Maio 6 por dalvorsn
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

/\ 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
info
Grupo: Marquês
Registrado: 02/08/12
Posts: 1k
Reputação: +234
Char no Tibia: Maurolkit

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 Maio 7 por Skymagnum
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

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í
info
Grupo: Marquês
Registrado: 02/08/12
Posts: 1k
Reputação: +234
Char no Tibia: Maurolkit

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 Maio 7 por Skymagnum




info
Grupo: Marquês
Registrado: 02/08/12
Posts: 1k
Reputação: +234
Char no Tibia: Maurolkit
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