Ir para conteúdo
  • 0

Função CheckItemArea !


porkts

Pergunta

Galera eu já tinha feito um post antes ( http://www.xtibia.com/forum/topic/202831-funcao-checkitemarea/ )

Bom eu usei o script do Brun123, só que, não deu certo :X tipo, no script dele:

 

function checkItems(itemsId, centerPos, range)

for direction = 0, 3 do

for _range = 1, range do

for _, itemid in pairs(itemsId) do

local checkpos = getPosByDir(centerPos, direction, _range)

if getTileItemById(checkpos, itemid).uid > 1 then return true end

end

end

end

return false

end

 

Na segunda linha "for direction = 0, 3 do" ele só considera o norte, sul, leste e oeste, então eu mudei pra "for direction = 0, 7 do" para que ele considere as outras direções também (nordeste, suldeste....) só que não deu certo :o

ficou assim:

 

semttulolfk.png

(considerando a arvore como id que tem que estar perto)

Depois disso eu mudei do jeito que tava o script com o for de 0 a 3 e deu na mesma :X

Alguém pode me dar uma força ai?

 

(Resumo: eu quero um script que cheque se tem tal id perto dele, pq eu vou fazer uma profissão que só pode usar magia se tiver perto de uma arvore, na imagem a cima vocês podem ver que só em alguns sqm's que ele pode usar magia e em outros não :X)

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Use assim:

 

function checkItems(itemsId, centerPos, range)
   for direction = 0, 7 do
    for _range = 1, range do
	    for _, itemid in pairs(itemsId) do
		    local checkpos = getPosByDir(centerPos, direction, _range)
		    doSendMagicEffect(checkpos, 15)
		    if getTileItemById(checkpos, itemid).uid > 1 then return true end
	    end
    end
   end
return false
end

 

Coloquei apenas pra verificar das direções 0 a 7 e com uma linha a mais, pra mandar um efeito nas áreas que o script procurou...

lembrando que a própria centerPos (parâmetro da função) não é vasculhada em si, apenas os tiles ao redor.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara fiz desse jeito, botei a função numa talkaction:

function onSay(cid, words, param)
local items = {2707}
 if checkItems(items, getCreaturePosition(cid), 1) == true then
  doBroadcastMessage("Funcionou.", MESSAGE_STATUS_CONSOLE_GREEN)
 else
  doBroadcastMessage("Nao Funcionou.", MESSAGE_STATUS_CONSOLE_GREEN)
 end
end

 

e deu nisso:

semttulosv.jpg

 

Ai, só que não funcionou :X ja tentei de tudo kkkkk desde de ontem to tentando :X

Link para o comentário
Compartilhar em outros sites

  • 0

Faz assim pra testar:

 

function checkItems(itemsId, centerPos, range)
   for direction = 0, 7 do
    for _range = 1, range do
	    for _, itemid in pairs(itemsId) do
		    local checkpos = getPosByDir(centerPos, direction, _range)
		    doSendMagicEffect(checkpos, 15)
		    if getTileItemById(checkpos, itemid).uid > 1 then return true end
	    end
    end
   end
return false
end

function onSay(cid, words, param)

   local items = {2707}
   checkItems(items, getThingPos(cid), 1)

return true
end

 

só precisa usar 1x, é melhor pra ver quais áreas os scripts está vasculhando

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz isso, igualzinho ta ai, e testei, olha como ficou os efeitos:

 

semttulomi.jpg

 

e testando aqui, se tiver uma arvore onde da os foguinhos, a função retorna true, se nao da false, por exemplo se a arvore estiver a um sqm a baixo do player da false :X

Link para o comentário
Compartilhar em outros sites

  • 0

provavelmente a sua função getPosByDir está com problemas...

de toda forma, já que o objetivo é pegar todas as direções formando um quadrado, não precisa utilizar a função getPosByDir, use desse jeito:

 

function checkItems(itemsId, centerPos, size)
   for x = -size, size do
    for y = -size, size do
	    local checkpos = {x = centerPos.x + x, y = centerPos.y + y, z = centerPos.z}
	    for _, itemid in pairs(itemsId) do
		    doSendMagicEffect(checkpos, 15)
		    if getTileItemById(checkpos, itemid).uid > 1 then return true end
	    end
    end
   end
return false
end

function onSay(cid, words, param)

   local items = {2707}
   checkItems(items, getThingPos(cid), 1)

return true
end

 

Verifique aonde vai aparecer os effects agora

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...