KI

Function getPlayersInArea

Por Killua, 03 de jan. de 2014 em Mods, funções e outros

getplayersinarea
amoeba13
getplayersfromarea
function
12
2k
KilluaK
03 de janeiro de 2014 às 21:51

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 Janeiro 4 por amoeba13

caoticC
03 de janeiro de 2014 às 23:07

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.

KilluaK
03 de janeiro de 2014 às 23:52

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

Valeu por avisar, vou tentar arrumar aqui.

 

Corrigido.

Editado Janeiro 4 por amoeba13

VodkartV
07 de janeiro de 2014 às 08:29


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 Janeiro 7 por Vodkart

KilluaK
07 de janeiro de 2014 às 10:24

Humilhou... -.-

 

Mas, me diz, eu poderia usar isInArea invés de isInRange?

VodkartV
07 de janeiro de 2014 às 10:31

existe a função isInArea?? nem sabia '-'

KilluaK
07 de janeiro de 2014 às 18:13

Existe '-'

isInArea(pos, fromPos, toPos)
OmegaO
07 de janeiro de 2014 às 21:19

isInArea = isInRange

3 semanas depois...
LordfireL
25 de janeiro de 2014 às 03:45

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.

KilluaK
25 de janeiro de 2014 às 03:58

É costume... kkkk, desse jeito aí fica melhor mesmo

Qual o problema com o nome da variável?

LordfireL
25 de janeiro de 2014 às 17:18

É 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é.

KilluaK
25 de janeiro de 2014 às 17:31

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 :)