Postado Abril 7, 2014 11 anos Boa tarde galera do TibiaKing, cá estou novamente solicitando ajuda. O que acontece é o seguinte, quebrei a cabeça tentando resolver, mas realmente achei que seria melhor postar pois as pessoas daqui estão mais qualificadas a me ajudar e assim eu não perco tanto tempo em apenas um parte de um script, digamos, bobo. Ao script: Seria uma verificação se há player em determinada área e funcionará assim... Se não houver player nesta área (pode ter monstro, só não pode player) então, será executada a criação de um ITEM no chão. E caso haja player, será agendada uma nova verificação, sucessivamente, até não haver nenhum player na área para então criar o item no chão. O script havia ficado assim, mas estou encontrando problemas (Resumo do script): local pos = {x = 855, y = 980, z = 7} local reativar = 10 -- em segundos local check = 4 -- em segundos local from = {x = 860, y = 978, z = 7} local to = {x = 865, y = 982, z = 7} function ReAtive() -- linha 38 de erro do Launcher if #getSpectatorsFromArea(from, to) >= 1 then -- linha 39 de erro do Launcher doBroadcastMessage("Temos intrusos e o item nao foi criado!") addEvent(ReAtive, check * 1000) else doCreateItem(corpse, 1, pos) doBroadcastMessage("Item adicionado com sucesso!") end end Com o script desta maneira, está ocorrendo o seguinte, se houver um monstro no local, ele da a mensagem de "Intrusos" normalmente, como programado. Só que se eu remover o monstro do local, da esta mensagem no launcher quando executa a verificação, na hora de criar o item: [07/04/2014 11:59:33] [Error - MoveEvents Interface] [07/04/2014 11:59:33] In a timer event called from: [07/04/2014 11:59:33] data/movements/scripts/ResidentEvil/zombie.lua:onStepIn [07/04/2014 11:59:33] Description: [07/04/2014 11:59:33] data/movements/scripts/ResidentEvil/zombie.lua:39: attempt to get length of a nil value [07/04/2014 11:59:33] stack traceback: [07/04/2014 11:59:33] data/movements/scripts/ResidentEvil/zombie.lua:39: in function <data/movements/scripts/ResidentEvil/zombie.lua:38> Eu sei que não era para identificar o monstro como player no script, mas estava tentando resolver este problema primeiro. Se alguém puder me ajudar, ficaria muito grato. Lembrando: Não pode haver player no local, monstros serão ignorados. Aguardo ajuda. Editado Abril 7, 2014 11 anos por Adriano SwaTT (veja o histórico de edições) Gosta do meu trabalho? Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs. Atenciosamente,Adriano Swatt' Para ver meus tutoriais acesse meu perfil.
Postado Abril 7, 2014 11 anos eu faria assim (não testei e isso é só um exemplo) só to dando a ideia de outro modo que não vá retornar um valor nil for x = from.x, to.x do for y = from.y, to.y do for z = from.z, to.z do local mob = getTopCreature({x=x, y=y, z=z}).uid if mob ~= 0 and isPlayer(mob) then doBroadcastMessage("Temos intrusos e o item nao foi criado!") addEvent(ReAtive, check * 1000) else doCreateItem(corpse, 1, pos) doBroadcastMessage("Item adicionado com sucesso!") end end end return true end Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Abril 7, 2014 11 anos Autor Não sei se entendi algumas coisas.. Este script pode ficar diretamente abaixo da function ReAtive()? Devo adicionar valores nesta parte? for x = from.x, to.x do for y = from.y, to.y do for z = from.z, to.z do Se sim, ficaria assim: "for x = 890.x, 891.x do"? Ou os "atalhos" from.x e to.x já irá buscar os valores na declaração anterior? Desde já obrigado, mas não sei muito bem como funciona o "for" ainda. -- EDIT' Eu testei dessa forma, sem editar e está executando a função dando resultado um monte de vezes. Ex: ao invés de criar um item, está criando 29 itens, e mesmo com player ou sem player. Editado Abril 7, 2014 11 anos por Adriano SwaTT (veja o histórico de edições) Gosta do meu trabalho? Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs. Atenciosamente,Adriano Swatt' Para ver meus tutoriais acesse meu perfil.
Postado Abril 7, 2014 11 anos Solução local pos = {x = 855, y = 980, z = 7} local reativar = 10 -- em segundos local check = 4 -- em segundos local from = {x = 860, y = 978, z = 7} local to = {x = 865, y = 982, z = 7} function getPlayersFromArea(from, to) local ret = {} for _, pid in pairs(getSpectatorsFromArea(from, to) or {}) do if isPlayer(pid) then table.insert(ret, pid) end end return ret end function ReAtive() -- linha 38 de erro do Launcher if #getPlayersFromArea(from, to) >= 1 then -- linha 39 de erro do Launcher doBroadcastMessage("Temos intrusos e o item nao foi criado!") addEvent(ReAtive, check * 1000) else doCreateItem(corpse, 1, pos) doBroadcastMessage("Item adicionado com sucesso!") end end -"Supra Omnes Lux Lucis" - Acima de todos brilha a Luz -
Postado Abril 7, 2014 11 anos Autor Ahhh vou falar a verdade viu, este cara é muito gostoso. EUAEUIAHUIEHAUIHEUIHA Mano, me ajudou muito. Obrigado mesmo. Gosta do meu trabalho? Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs. Atenciosamente,Adriano Swatt' Para ver meus tutoriais acesse meu perfil.
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.