Faaaaaala galera! Tudo tranquilo? Faz um tempão que eu não posto aqui né? Então, eu fiz essa função esses dias e resolvi divulgar porque todo mundo precisa dessa função eventualmente.
Como funciona: No primeiro parâmetro você irá colocar o número de storage, o qual você deseja checar o rank.
No segundo parâmetro será posto o número mínimo para o jogador entrar no rank, por exemplo, caso você coloque 0 e há algum jogador com -1 no valor de storage, ele não irá entrar na lista.
A função retorna uma tabela com os nomes dos jogadores em ordem do maior valor ao menor.
Enfim, vamos a função:
function getStorageRank(storage, n)
local n = n or 0
local data = tonumber(db.getResult("SELECT `id` FROM `players` ORDER BY `id` DESC;"):getDataString("id"))
local val, ret, nome, tabela, max = {}, {}, {}, {}, {}
for i = 1, data do
if tonumber(db.getResult("SELECT `online` FROM `players` WHERE `id` = "..i..";"):getDataString("online")) == 0 then
local data = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = "..i.." AND `key` = "..storage..";")
resultado = data:getID() == -1 and -1 or tonumber(data:getDataString("value"))
name = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..i..";"):getDataString("name")
else
for _, pid in pairs(getPlayersOnline()) do
if getPlayerGUID(pid) == i then
resultado = getPlayerStorageValue(pid, storage)
name = getPlayerName(pid)
end
end
end
table.insert(val, resultado)
table.insert(tabela, resultado)
table.insert(nome, name)
end
for i = 1, table.maxn(tabela) do
valor = n
for a, b in ipairs(tabela) do
if b >= valor then
valor = b
end
end
table.remove(tabela, table.find(tabela, valor))
table.insert(max, valor)
end
for i = 1, #max do
local pos = table.find(val, max[i])
table.insert(ret, nome[pos])
table.remove(nome, pos)
table.remove(val, pos)
end
return ret
end
Vamos a um exemplo de uso:
function onSay(cid, words, param)
for _, t in pairs(getStorageRank(38000, -1)) do
print(t)
end
end
Neste exemplo será impresso no distro os nomes dos jogadores em ordem de maior para menor.
É isso ai galera, espero que usem, até.