Postado Abril 6, 2018 7 anos Olá pessoal, minha dúvida é a seguinte, como usar o comando for nessa situação: Eu tenho a seguinte função: Spoiler function getMonstersInArea(area) local monsters = {} for x = area.fromx, area.tox do for y = area.fromy, area.toy do for z = area.fromz, area.toz do monsterpos = {x=x,y=y,z=z,stackpos=253} monster = getThingFromPos(monsterpos) if isMonster(monster.uid) == true then table.insert(monsters, monster.uid) end end end end return monsters end E a seguinte tabela como exemplo, e como já deve ser definida usando essa função: Spoiler local table = { ["indice"] = { var = 12, var3 = "Var", positionsToCheck = { area1 = {fromx=1, fromy=2, fromz=3, tox=6, toy=7, toz=8}, area2 = {fromx=10, fromy=12, fromz=14, tox=16, toy=18, toz=20} }, } } Se eu usar a função da seguinte maneira, ela funciona corretamente,a finalidade para qual eu vou usa-la é para remover monstros de uma area: Spoiler local monsters = getMonstersInArea(table["indice"].positionsToCheck.area1) if #monsters > 0 then for i = 1, #monsters do doRemoveCreature(monsters[i]) end end Até ai tudo certo se eu usar dessa forma, como já disse tudo funciona corretamente, no entando, eu preciso que seja configurável quantas posições eu quiser checar para remover os montros, pois as vezes indices diferentes terão numeros de areas diferentes para serem checadas. Para isso, tentei usar o for da seguinte maneira: Spoiler for area,_ in pairs(table["indice"].areasToCheck) do local monsters = myNew({fromx=table["indice"].areasToCheck[areas].fromx, fromy=table["indice"].areasToCheck[areas].fromy, fromz=table["indice"].areasToCheck[areas].fromz}, {tox=table["indice"].areasToCheck[areas].tox, toy=table["indice"].areasToCheck[areas].toy, toz=table["indice"].areasToCheck[areas].toz}) if #monsters > 0 do for i = 1, #monsters do doRemoveCreature(monsters[i]) end end end Mas fica dando o seguinte erro: for initial value must be a number, algo assim. Ainda estou aprendendo a programar e não tenho muito conhecimento, por isso gostaria que me ajudassem e me esclarecessem minha dúvida de como usar o for nessa situação. Caso não tenha ficado totalmente claro oque eu pretendo fazer, seria basicamente salas para matar monstros, tipo uma quest, só que toda vez que o jogador for entrar se ainda tiver monstros lá eles ser ão removidos, cada indice da tabela seria uma actionID diferente pra colocar em uma alavanca diferente pra startar a sala. Bom, acho que deu pra entender, espero que me ajudem com essa dúvida, e obrigado desde já!
Postado Abril 6, 2018 7 anos @Shadow.Styller Você pode adicionar esse for na própria função, verificando assim todas as áreas contidas na tabela positionsToCheck. Spoiler function getMonstersInArea(positionsToCheck) local monsters = {} for _, area in pairs(positionsToCheck) do for x = area.fromx, area.tox do for y = area.fromy, area.toy do for z = area.fromz, area.toz do monsterpos = {x=x,y=y,z=z,stackpos=253} monster = getThingFromPos(monsterpos) if isMonster(monster.uid) == true then table.insert(monsters, monster.uid) end end end end end return monsters end E você utiliza da seguinte maneira: Spoiler local table = { ["indice"] = { var = 12, var3 = "Var", positionsToCheck = { area1 = {fromx=1, fromy=2, fromz=3, tox=6, toy=7, toz=8}, area2 = {fromx=10, fromy=12, fromz=14, tox=16, toy=18, toz=20} } } } local monsters = getMonstersInArea(table["indice"].positionsToCheck) if #monsters > 0 then for i = 1, #monsters do doRemoveCreature(monsters[i]) end end Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito. Aristóteles
Postado Abril 6, 2018 7 anos Autor 5 horas atrás, Way20 disse: @Shadow.Styller Você pode adicionar esse for na própria função, verificando assim todas as áreas contidas na tabela positionsToCheck. Mostrar conteúdo oculto function getMonstersInArea(positionsToCheck) local monsters = {} for _, area in pairs(positionsToCheck) do for x = area.fromx, area.tox do for y = area.fromy, area.toy do for z = area.fromz, area.toz do monsterpos = {x=x,y=y,z=z,stackpos=253} monster = getThingFromPos(monsterpos) if isMonster(monster.uid) == true then table.insert(monsters, monster.uid) end end end end end return monsters end E você utiliza da seguinte maneira: Mostrar conteúdo oculto local table = { ["indice"] = { var = 12, var3 = "Var", positionsToCheck = { area1 = {fromx=1, fromy=2, fromz=3, tox=6, toy=7, toz=8}, area2 = {fromx=10, fromy=12, fromz=14, tox=16, toy=18, toz=20} } } } local monsters = getMonstersInArea(table["indice"].positionsToCheck) if #monsters > 0 then for i = 1, #monsters do doRemoveCreature(monsters[i]) end end Olá, obrigado! Funcionou certinho. Como a função não é minha e como eu já disse estou começando nem pensei em mexer nela pra não dar bosta hahaha já que custei pra achar essa função que funcionasse do jeito que eu queria. For ainda é uma coisa que estou aprendendo por isso as vezes tenho dificuldade, tem algum link de tutorial que eu possa ver ? eu vi um aqui no tk mas é meio antigo. E obrigado de novo amigão!
Postado Abril 6, 2018 7 anos 8 minutos atrás, Shadow.Styller disse: Olá, obrigado! Funcionou certinho. Como a função não é minha e como eu já disse estou começando nem pensei em mexer nela pra não dar bosta hahaha já que custei pra achar essa função que funcionasse do jeito que eu queria. For ainda é uma coisa que estou aprendendo por isso as vezes tenho dificuldade, tem algum link de tutorial que eu possa ver ? eu vi um aqui no tk mas é meio antigo. E obrigado de novo amigão! Participe do nosso clube de estudos, quando tiver alguma duvida relacionada a linguagem, pode perguntar lá. Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito. Aristóteles
Postado Abril 6, 2018 7 anos Autor 56 minutos atrás, Way20 disse: Participe do nosso clube de estudos, quando tiver alguma duvida relacionada a linguagem, pode perguntar lá. Obrigado mano, vou participar la!
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.