AN

Function Emarea(Cid,frompos,topos)

Por Antharaz, 14 de mar. de 2010 em Mods, funções e outros

5
2.3k
AntharazA
14 de março de 2010 às 15:38

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

KydraiK
14 de março de 2010 às 20:34

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.

satan666S
14 de março de 2010 às 21:39

na realidade existe varias funções idênticas.

AntharazA
15 de março de 2010 às 00:37

Na verdade, as funções citadas exigem a coordenad z, que no meu é opcional. Mas enfim, vi que existem funções deste mesmo tipo.

 

Obrigado a todos que postaram =D

2 meses depois...
15 de maio de 2010 às 12:07

Bacana.. vou mover para uma área que se encaixe!

Obrigado!