Ir para conteúdo

Featured Replies

Postado

tem várias maneiras, pode fazer por uma string excluidora (se tiver god/gm no nome não aparece) ou colocar um if pra checar acess também

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

  • 3 years later...
  • Respostas 7
  • Visualizações 1.9k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @perfollgustavo olha, eu até consigo fazer uma gambiarra muito louca pra conseguir um rank usando essa função mas ia ser mais ou menos seguindo esse raciocinio aqui: a gente sabe q na variavel str a

  • Só retirar o level do GOD..

Postado
Em 15/04/2014 em 04:19, xWhiteWolf disse:

tem várias maneiras, pode fazer por uma string excluidora (se tiver god/gm no nome não aparece) ou colocar um if pra checar acess também

Mas e aí, da umas explicações melhores com exemplos nesse rank abaixo...

 

local ranks = {

['fist'] = {0},

['club'] = {1},
['sword'] = {2},
['axe'] = {3},
['distance'] = {4},
['shield'] = {5},
['fish'] = {6},
['magic'] = {7},
['magic level'] = {7},
['magiclevel'] = {7},
['ml'] = {7},
['level'] = {8},

}


function onSay(cid, words, param)

local msg = string.lower(param)
if ranks[msg] ~= nil then
str = getHighscoreString((ranks[msg][1]))
else
str = getHighscoreString((8))
end
doShowTextDialog(cid,6500, str)
return TRUE

end

Postado

@perfollgustavo olha, eu até consigo fazer uma gambiarra muito louca pra conseguir um rank usando essa função mas ia ser mais ou menos seguindo esse raciocinio aqui:
a gente sabe q na variavel str a gente tem algo nesse formato aqui

str = [[
Top 10 for Level:

1. GOD Wolf, 300
2. GM Icaro, 298
3. God Bless, 297
4. Night Wolf, 30
5. Night Wolf, 30
6. Night Wolf, 30
7. Night Wolf, 30
8. Night Wolf, 30
9. Night Wolf, 30
10. Night Wolf, 30
]]

eu ia usar uma função de pattern (provavelmente string.match) para caçar por instancias com god/gm no nome e aí deletar a linha inteira. Mas isso não é o suficiente, teriamos que pegar todas as linhas de baixo dessa linha e diminuir o numero da linha tendo este resultado aqui:

str = [[
Top 10 for Level:

1. Night Wolf, 30
2. Night Wolf, 30
3. Night Wolf, 30
4. Night Wolf, 30
5. Night Wolf, 30
6. Night Wolf, 30
7. Night Wolf, 30
]]

O problema é que essa função é muito engessada e nós estariamos gastando um processamento absurdo para ficar corrigindo, procurando e deletando strings, isso é muito ruim (e caro computacionalmente!)

Uma abordagem um pouco melhor seria parecida com o script do @Artur Henrique de usar queries.
 

Spoiler

local maxnames = 20 -- quantos vai mostrar
local minspace = 20 -- espaço minimo entre um nome e outro
	 
local skills = {
	['fist'] = 0,
	['club'] = 1,
	['sword'] = 2,
	['axe'] = 3,
	['distance'] = 4,
	['shielding'] = 5,
	['shield'] = 5,
	['fishing'] = 6,
}

function onSay(cid, words, param)
	param = string.lower(param)
	local msg = ""	
	local consulta
	
	if (param == "" or param == "level") and not skills[param] then
		msg = msg.."Rank - Nome do Jogador [Level]\n\n"
		consulta = db.getResult("SELECT `name`, `level` AS `value`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT "..(maxnames)..";")
	elseif param == "magic" or param == "ml" or param == "magic level" or param == "magiclevel" then
		msg = msg.."Rank - Nome do Jogador [Magic Level]\n\n"
		consulta = db.getResult("SELECT `name`, `maglevel` AS `value` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT "..(maxnames)..";")
	elseif skills[param] then
		msg = msg.."Rank - Nome do Jogador [".. param .."]\n\n"
		consulta = db.getResult("SELECT `name`, `value` FROM `player_skills` INNER JOIN `players` ON `player_skills`.`player_id` = `players`.`id` WHERE `skillid` = "..skills[param].." AND `group_id` <= 2 ORDER BY `value` DESC LIMIT "..(maxnames)..";")
	else
		doPlayerSendCancel(cid, "Não foi possivel retornar esse tipo de ranking")
		return false
	end	
	
	local position = 0
	repeat
		if consulta:getID() == -1 then break end
		position = position + 1
		msg = msg..position.." - "..consulta:getDataString("name").." ["..consulta:getDataInt("value") .."]".. string.rep(" ", minspace - string.len(consulta:getDataString("name"))).. " ".."\n"
	until (not consulta:next() or position > maxnames)
	doShowTextDialog(cid, 6500, msg)
return false
end

 


Talvez tenha um erro ou outro nesse código pq eu fiz ele sem testar mas a lógica é essa

Editado por xWhiteWolf
esqueci do 's' no nome do campo player_skills (veja o histórico de edições)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo