Postado Abril 15, 2014 11 anos 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 (obg ao @Beeny por fazer essa linda sign <3)
Postado Janeiro 1, 2018 7 anos 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 Janeiro 2, 2018 7 anos @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 Janeiro 2, 2018 7 anos 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 (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.