DE

[Função] Doordertable

Por Demonbholder, 28 de mar. de 2011 em Mods, funções e outros

7
2.3k
28 de março de 2011 às 21:51

Olá galera! Minha primeira contribuição oficial como colaborador. Eu queria fazer uma função que seria quase que uma extensão da getTabHighValue, assim eu decidi criar ou re-criar uma função que ordena a tabela em ordem crescente. Não sei se já existe uma função na própria linguagem lua pura, mas se existir, é desconhecida por mim, então decidi fazer a minha.

 

Oks, lá vamos nós a função.

 

function doOrderTab(tabela, value)

max = nil

for i = 1, table.maxn(tabela) do
valor = value
for a, b in ipairs(tabela) do
if b > valor then
valor = b
end
end
table.remove(tabela, table.find(tabela, valor))
if valor ~= value then
max = max == nil and valor or max .. ", " .. valor
end
end
return max
end

 

1º Parâmetro: Tabela a ser ordenada.

2º Parâmetro: Valor mínimo que o número deve ser para ser considerado na ordem.

 

Exemplos em Talkactions:

 

function onSay(cid, words, param)

t = {}

for pos, pid in ipairs(getPlayersOnline()) do
t[pos] = getPlayerLevel(pid)
end
doShowTextDialog(cid, 2160, doOrderTab(t, 0))
end

 

Ordena o nível dos jogadores online.

 

function onSay(cid, words, param)

t = {500, 700, 400}

doShowTextDialog(cid, 2160, doOrderTab(t, 0))
end

 

Ordena a tabela acima, retornando:

 

700, 500, 400

 

É isso, espero que ajude, até mais galera.

thaliaT
29 de março de 2011 às 21:27

Muito boa a função!

Demonbholder cada vez mais além com seus scripts!

Parabens

OneshotO
02 de abril de 2011 às 21:16

Gostei muito da função do código. Seu avanço na linguagem foi rápido. Parabéns :)

Saymon14S
03 de abril de 2011 às 11:01

Muito show mano, ainda criar function um dia =D

satan666S
07 de abril de 2011 às 18:25

Ficou boa a função, existe uma função em lua chamada "table.sort (table [, comp])" que faz isso mesmo.

na sua fução tem uma função que eu não conheço na linguagem padrão lua que é "table.find(tabela, valor)" é uma função sua, criada ou apenas acompanha a biblioteca dos ot servers?

07 de abril de 2011 às 21:32

É uma função para ot servers, creio que seria algo como:

 

function table.find(t, val)

ret = nil

for pos, mat in pairs(t) do
if mat == val then
ret = pos
break
end
end
return ret
end

 

Ou talvez algo um pouco mais complexo. Até.

Editado Maio 10 por Demonbholder

tinfer3T
07 de abril de 2011 às 22:09

apenas acompanha a biblioteca dos ot servers.