Ir para conteúdo

Getstoragerank(Storage, N)


Posts Recomendados

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

Editado por Demonbholder
Link para o comentário
Compartilhar em outros sites

Veja bem, isto não é um script e sim uma função.

 

São muitos os sistemas que utilizam storage para guardar um número que aumenta a cada vez que o sistema é usado.

 

Um exemplo é o meu sistema de duelo de summons, ou o sistema de rep do xotservx, entre outros.

 

Valeu pelos comentários.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...