Postado Dezembro 23, 2016 8 anos Estou tentando fazer o seguinte, queria fazer um script assim, se tiver tais itens em tais lugares e todos os players estiverem em tais lugares e um deles puxar a alavanca, vai teleportar todo mundo para tal lugar e os itens sumirá, tipo uma anihi, mas com itens para ser colocado em tais lugares, bom minha duvida é a seguinte, para nao encher de IF, eu decidi usar o for, mas nao sei usar ele ainda e queria saber se existe um jeito de fazer o "print ("1")" entrar apenas se todos os itens estiverem nos lugares, mas o jeito que estou fazendo ele esta entrando e saindo. Mostrar conteúdo oculto for _, item_pos in ipairs(pos) do if getTileItemById({x=item_pos.pos[1],y=item_pos.pos[2],z=item_pos.pos[3]}, item).uid >= 1 then print("1") Exemplo: queria que ele entrasse apenas uma vez, mas em vez disso... ele esta entrando 3 vezes. Eu adaptei meu codigo ja que nao consegui... mas chegou em uma parte que nao tem jeito, eu preciso disso, preciso conferir se todos itens estao em seus lugares e todos os players tbm e se for TRUE, eles sao teleportados. script completo: Mostrar conteúdo oculto function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = { [1] = {pos = {1170,965,7}, item = {"1"}}, [2] = {pos = {1171,968,7}, item = {"2"}}, [3] = {pos = {1171,969,7}, item = {"3"}} } local players_pos = { {x = 1164, y =964, z = 7, stackpos = 253} {x = 1165, y =964, z = 7, stackpos = 253}, {x = 1169, y =964, z = 7, stackpos = 253}, {x = 1171, y =966, z = 7, stackpos = 253}, {x = 1170, y =967, z = 7, stackpos = 253}, {x = 1169, y =968, z = 7, stackpos = 253}, {x = 1169, y =969, z = 7, stackpos = 253}, {x = 1167, y =968, z = 7, stackpos = 253} } local item = 2385 for _, item_pos in ipairs(pos) do if getTileItemById({x=item_pos.pos[1],y=item_pos.pos[2],z=item_pos.pos[3]}, item).uid >= 1 then doPlayerSendTextMessage(cid,22,'Confirmado item: '..item_pos.item[1]) end end for i = 1, #players_pos do local player = getThingfromPos(players_pos) for v = 1, #pos do if isPlayer(player.uid) == TRUE and getThingFromPos(pos[v].uid) == TRUE and item.uid > 0 then print('1') end end end end Editado Dezembro 23, 2016 8 anos por Pepeco (veja o histórico de edições)
Postado Dezembro 23, 2016 8 anos function doRemoveItensInPos(items, pos) -- function by vodka local items = type(items) == "table" and items or {items} for i = 1, table.maxn(items) do doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=1}).uid) end return nil end function getItemsInPos(items, pos) for i = 1,#items do local stack = getTileItemById(pos, items[1]) if stack.uid > 0 and math.max(1, stack.type) >= items[2] and i == #items then return true end end return false end ai pode usar assim a tabela por exemplo: local t = { {items = {{2385,1}} , pos = {x=1170, y=965, z=7}}, {items = {{2173,1},{2493,1}} , pos = {x=1171, y=968, z=7}} } podendo colocar 1 ou mais itens dentro da tabela e a quantidade necessaria de cada um. ai pra checar você usaria assim: for _, w in ipairs(t) do if not getItemsInPos(w.items, w.pos) then doPlayerSendCancel(cid, 'Está faltando items.') return true end end e pra remover os items for _, v in ipairs(t) do doRemoveItensInPos(v.items, v.pos) end Editado Dezembro 23, 2016 8 anos por Vodkart (veja o histórico de edições)
Postado Dezembro 23, 2016 8 anos Em 23/12/2016 em 08:29, Pepeco disse: Estou tentando fazer o seguinte, queria fazer um script assim, se tiver tais itens em tais lugares e todos os players estiverem em tais lugares e um deles puxar a alavanca, vai teleportar todo mundo para tal lugar e os itens sumirá, tipo uma anihi, mas com itens para ser colocado em tais lugares, bom minha duvida é a seguinte, para nao encher de IF, eu decidi usar o for, mas nao sei usar ele ainda e queria saber se existe um jeito de fazer o "print ("1")" entrar apenas se todos os itens estiverem nos lugares, mas o jeito que estou fazendo ele esta entrando e saindo. Mostrar conteúdo oculto Mostrar conteúdo oculto for _, item_pos in ipairs(pos) do if getTileItemById({x=item_pos.pos[1],y=item_pos.pos[2],z=item_pos.pos[3]}, item).uid >= 1 then print("1") Exemplo: queria que ele entrasse apenas uma vez, mas em vez disso... ele esta entrando 3 vezes. Eu adaptei meu codigo ja que nao consegui... mas chegou em uma parte que nao tem jeito, eu preciso disso, preciso conferir se todos itens estao em seus lugares e todos os players tbm e se for TRUE, eles sao teleportados. script completo: Mostrar conteúdo oculto Mostrar conteúdo oculto function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = { [1] = {pos = {1170,965,7}, item = {"1"}}, [2] = {pos = {1171,968,7}, item = {"2"}}, [3] = {pos = {1171,969,7}, item = {"3"}} } local players_pos = { {x = 1164, y =964, z = 7, stackpos = 253} {x = 1165, y =964, z = 7, stackpos = 253}, {x = 1169, y =964, z = 7, stackpos = 253}, {x = 1171, y =966, z = 7, stackpos = 253}, {x = 1170, y =967, z = 7, stackpos = 253}, {x = 1169, y =968, z = 7, stackpos = 253}, {x = 1169, y =969, z = 7, stackpos = 253}, {x = 1167, y =968, z = 7, stackpos = 253} } local item = 2385 for _, item_pos in ipairs(pos) do if getTileItemById({x=item_pos.pos[1],y=item_pos.pos[2],z=item_pos.pos[3]}, item).uid >= 1 then doPlayerSendTextMessage(cid,22,'Confirmado item: '..item_pos.item[1]) end end for i = 1, #players_pos do local player = getThingfromPos(players_pos) for v = 1, #pos do if isPlayer(player.uid) == TRUE and getThingFromPos(pos[v].uid) == TRUE and item.uid > 0 then print('1') end end end end vê se entende: local position = { [1] = {pos = {x=1170,y=965,z=7}, item = "1"}, [2] = {pos = {x=1171,y=968,z=7}, item = "2"}, [3] = {pos = {x=1171,y=969,z=7}, item = "3"} } local check = 0 for i = 1, #position do if getTileItemById(position[i].pos, item).uid then check = check + 1 doPlayerSendTextMessage(cid, 22, "Confirmado item "..position[i].item..".") end end if check == #position then todos os items estão no lugar, então fazer... else algum item não está no lugar, então fazer... end bom, vi agr que o vod respondeu :S Editado Dezembro 23, 2016 8 anos por Ed.Specter (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.