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.





info
Grupo: Cavaleiro
Registrado: 05/01/08
Posts: 153
Reputação: +93
Char no Tibia: nenhum
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 endResultado com god na pos [X: 520] [Y: 462] [Z: 2]
Resultado com god na pos [X: 520] [Y: 463] [Z: 4]
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 endResultado com god na pos [X: 520] [Y: 462] [Z: 2]
Resultado com god na pos [X: 520] [Y: 463] [Z: 4]
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