GL

[Função] Playerinarea

Por gledsonrt, 01 de set. de 2012 em Mods, funções e outros

otserv
6
1.9k
gledsonrtG
01 de setembro de 2012 às 02:27

Olá galera!

 

Esta é uma função usada no meu OTServ, e vim disponibilizá-la para vocês.

Ela serve para checar se há algum jogador dentro de uma determinada área.

Muito útil em quests como anihilator e svargrond arena!

 

function checkArea(fromx, fromy, fromz, tox, toy, toz)
  for x=fromx, tox do
 	 for y=fromy, toy do
 	 	 for z=fromz, toz do
 	 	 	 position = {x=x, y=y, z=z, stackpos = 253}
 	 	 	 creature = getThingfromPos(position)
 	 	 	 if (isPlayer(creature.uid) == TRUE) then
 	 	 	 	 return true
 	 	 	 end
 	 	 end
 	 end
 end
 return false
end

 

Basicamente, caso ela encontre algum jogador, retornará 1, caso contrário, 0.

Basta adiciona-la ao arquivo "functions.lua"!

Para usá-la, escolha 2 posições:

fromx, fromy e fromz deve ser o canto esquerdo superior.
tox, toy e toz deve ser o canto direito inferior.

Espero que gostem!

 

KaulOTServ:GOD

Gledsonrt

VodkartV
01 de setembro de 2012 às 10:58

Mas já não existe a função 'isInRange' para esse tipo de coisa?

Editado Setembro 1 por Vodkart

gledsonrtG
01 de setembro de 2012 às 11:56

A vantagem é que para esta você pode trocar a parte:

 

if (isPlayer(creature.uid) == TRUE) then
   return true
end

 

Para qualquer função que você necessite: encontrar um item, um monstro, até mesmo contar quantos players existem na área.

jhon992J
01 de setembro de 2012 às 12:08

Eu uso essa que é bem simples:

function getPlayerInArea(fromPos, toPos) -- by jhon992
local online = getPlayersOnline()
local players = {}
for i=1, #online do
   if isInArea(getPlayerPosition(online[i]), fromPos, toPos) then
       players[#players+1] = online[i]
   end
end
return players
end

gledsonrtG
01 de setembro de 2012 às 12:52

Também funciona, mas novamente, a sua está limitada a players, e necessita da função isInArea.

A minha é basicamente a função isInArea, mas pode ser utilizada para qualquer propósito...

01 de setembro de 2012 às 16:17

O modo como o john usa para verificar se uma posição está dentro da outra é infinitamente superior a passar um loop por tudo e verificar se o player está lá.