Ir para conteúdo

Posts Recomendados

Olá, eu fiz uma função bem útil e vou postar aqui:


function getPlayersInArea(fromPos, toPos) -- function by amoeba13
    playersInArea = {}
    for x = fromPos.x, toPos.x do
        for y = fromPos.y, toPos.y do
            for z = fromPos.z, toPos.z do
                totalArea = {x=x, y=y, z=z}
                playerz = getTopCreature(totalArea)
                if isPlayer(playerz.uid) then
                    table.insert(playersInArea, playerz.uid)
                    
                end
            end
        end
    end
    return playersInArea
end

Como usar?

Exemplo:


function onSay(cid, words, param, channel)
    local area = getPlayersInArea({x = 153, y = 50, z = 7}, {x = 156, y = 53, z = 7})
    if area then
        for i = 1, (#area) do
            doTeleportThing(area[i], {x = 160, y = 51, z = 7}, false)
        end
end
return true
end
Editado por amoeba13
Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/
Compartilhar em outros sites

Tem um errinho meu colega.

 

O return vai brekar o loop isso significa que o so um player especificamente o primeiro vai ser retornado.

Uma array resolveria o problema.

Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/#findComment-1598483
Compartilhar em outros sites

Nossa cara... eu só tinha testado com um player kkk

Valeu por avisar, vou tentar arrumar aqui.

 

Corrigido.

Editado por amoeba13
Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/#findComment-1598504
Compartilhar em outros sites


function getPlayersInArea(fromPos, toPos)

local players = {}

for _, pid in ipairs(getPlayersOnline()) do

if isInRange(getPlayerPosition(pid), fromPos, toPos) then

table.insert(players, pid)

end

end

return players

end

Editado por Vodkart
Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/#findComment-1599598
Compartilhar em outros sites

  • 3 weeks later...

Por que vocês usam table.insert quando não tem índice/é pra adicionar na última posição?

 

Esse código

playersInArea[#playersInArea + 1] = playerz.uid
Tem uma performance ~20% superior pelos meus testes. É costume ou organização?

 

Aliás, cara, crie uma variável chamada _player, mas não crie uma chamada playerz.

Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/#findComment-1607937
Compartilhar em outros sites

É que variáveis chamadas "playerz" e "bonsters" (de outro script seu, acho) não ajudam quem quer modificar :p mas só isso também, fiquei curioso até.

Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/#findComment-1608508
Compartilhar em outros sites

Pois é isso é vdd, mas eu costumo dar esses nomes sem sentido pras variáveis que n precisam/devem ser modificadas... De qualquer jeito, obrigado pelas dicas :)

Link para o comentário
https://xtibia.com/forum/topic/226513-function-getplayersinarea/#findComment-1608515
Compartilhar em outros sites

×
×
  • Criar Novo...