Função CheckItemArea !

porkts
Por porkts
em Scripts

porkts

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/06/08Posts: 13Char no Tibia: fasso-tudo

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)

1360478_1.png

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

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.

5303fg1.png

porkts

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/06/08Posts: 13Char no Tibia: fasso-tudo

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

1360478_1.png

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

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

5303fg1.png

porkts

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/06/08Posts: 13Char no Tibia: fasso-tudo

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

1360478_1.png

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

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

5303fg1.png

porkts

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/06/08Posts: 13Char no Tibia: fasso-tudo

Cara, você está salvando a minha vida ! kkkkk agora sim 100% certo! Podem fechar o tópico ;)

1360478_1.png

Stigal

don't ever stop...
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 28/11/10Posts: 3402Gênero: Masculino

Movido!

VI6MDIG.png

 

"O fracasso é a oportunidade de se começar de novo inteligentemente"

Minhas Redes Sociais: Youtube | Página & Grupo | Steam  | Discord Xtibia | Skype: @mrooger

 

OTpanel