Ir para conteúdo
  • Cadastre-se

(Resolvido)[Ajuda] Checa se há player entre coordenadas.


Ir para solução Resolvido por MaXwEllDeN,

Posts Recomendados

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 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.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

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

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

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 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.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites
  • 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 -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

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.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo