Ir para conteúdo

Function Emarea(Cid,frompos,topos)


Antharaz

Posts Recomendados

ATENÇÃO: NÃO SE TRATA DE UM TUTORIAL, MAS DE UMA FUNCTION. COMO NÃO TEM UM LUGAR PARA FUNCTIONS, TIVE QUE POSTAR AQUI.

 

 

 

 

 

 

 

Nome: emarea(cid,frompos,topos)

Autor: Antharaz

Versão Testada: TFS 0.3.6 e TCS (todas versões)

 

Informações adicionais: Bem, não sei se já existe um function com este mesmo objetivo, mas eu pelo menos nunca vi. Ela verifica se determinado player está em certa área.

 

 

 

Como se usar:

 

 

Declare 2 variáveis, uma com as coordenadas do 1º sqm superior esquerdo da área e outro com as coordenadas do último sqm da parte inferior direita da área.

 

 

A da parte superior esquerda corresponde a frompos e a outra a topos. Não precisa colocar a coordenada z de cada sqm, isto é OPCIONAL, mas se colocar, coloque a do andar mais baixó no frompos e a do último andar que deseja verificar na topos.

 

 

Caso o player esteja na área, irá retornar TRUE, caso não esteje, irá retornar false.

 

 

Exemplos:

 

 

Abaixo haverá um exemplo no qual eu usei a function em uma talkction:

 

 

1º - usando com a coordenada Z

 

 

local frompos = {x=517,y=460,z=3}
local topos = {x=524,y=464,z=1}

function onSay(cid, words, param, channel)
   if emarea(cid,frompos,topos) then
       doBroadcastMessage("Está na área.")
   else
       doBroadcastMessage("Não está na área.")
   end
return TRUE
end

 

 

Resultado com god na pos [X: 520] [Y: 462] [Z: 2]

 

 

img1v.png

 

 

Resultado com god na pos [X: 520] [Y: 463] [Z: 4]

 

 

img2x.png

 

 

 

2º - retirando a coordenada z das variáveis:

 

 

local frompos = {x=517,y=460}
local topos = {x=524,y=464}

function onSay(cid, words, param, channel)
   if emarea(cid,frompos,topos) then
       doBroadcastMessage("Está na área.")
   else
       doBroadcastMessage("Não está na área.")
   end
return TRUE
end

 

 

 

Resultado com god na pos [X: 520] [Y: 462] [Z: 2]

 

 

img3k.png

 

 

Resultado com god na pos [X: 520] [Y: 463] [Z: 4]

 

 

img4ob.png

 

 

 

Como deu para ver pelas SSs, a diferença entre colocar o Z e não colocar, é que ele também verificará o andar.

 

 

Abaixo segue o code da function:

 

 

function emarea(cid,frompos,topos)

if frompos.x <= getThingPos(cid).x and topos.x >= getThingPos(cid).x and frompos.y <= getThingPos(cid).y and topos.y >= getThingPos(cid).y then
   if frompos.z and topos.z then
       if frompos.z >= getThingPos(cid).z and topos.z <= getThingPos(cid).z then
           return TRUE
       end
   else
   return TRUE
   end
end
return FALSE
end

Link para o comentário
Compartilhar em outros sites

Existe uma função parecida, isInRange ou isInArea.

 

function isInRange(pos, fromPos, toPos)
return (pos.x >= fromPos.x and pos.y >= fromPos.y and pos.z >= fromPos.z and pos.x <= toPos.x and pos.y <= toPos.y and pos.z <= toPos.z)
end

 

Acho que seria bom se criassem uma área para funções e sistemas.

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...