Postado Fevereiro 9, 2015 10 anos Senhores, boa noite! É possível fazer com que a script abaixo desconsidere player com o "group id" seja maior que 1 ? Assim, os GODs não aparecem no rank. local ranks = { ['fist'] = {0}, ['club'] = {1}, ['sword'] = {2}, ['axe'] = {3}, ['distance'] = {4}, ['shield'] = {5}, ['fish'] = {6}, ['magic'] = {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 Editado Fevereiro 9, 2015 10 anos por ADM Lucas OTBR (veja o histórico de edições)
Postado Fevereiro 9, 2015 10 anos Solução function getPlayerNameByGUID2(n) local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";") if c:getID() == -1 then return "SQL_ERROR["..n.."]" end return c:getDataString("name") end function onSay(cid, words, param) local max = 20 local letters_to_next = 20 local skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, } local name_now local name = "Highscore for level\n" local rkn = 0 local no_break = 0 param = string.lower(param) dofile('config.lua') if param == "" or param == "level" and ( param ~= "magic" and param == "ml") and skills[param] == nil then name = name.."\n" name = name.."Rank Level - Nome do Jogador\n" local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";") repeat no_break = no_break +1 if v:getID() == -1 then break end rkn = rkn+1 name_now, l = v:getDataString("name"), string.len(v:getDataString("name")) space = "" for i=1, letters_to_next-l do space = space.." " end name = name..rkn..". "..v:getDataInt("level") .." - "..name_now..space.." ".."\n" if no_break >= 20 then break end until v:next() == false elseif param == "magic" or param == "ml" then name = name.."\n" name = name.."Rank Magic - Nome do Jogador\n" local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";") repeat if v:getID() == -1 then break end rkn = rkn+1 name_now, l = v:getDataString("name"), string.len(v:getDataString("name")) space = "" for i=1, letters_to_next-l do space = space.." " end name = name..rkn..". "..v:getDataInt("maglevel").." - "..name_now..space.." ".." ".."".."\n" until v:next() == false elseif param == "reset" or param == "resets" then name = name.."\n" name = name.."Rank Reset - Nome do Jogador\n" local v = db.getResult("SELECT `id`, `reset` FROM `players` ORDER BY reset DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("id")), string.len(getPlayerNameByGUID2(v:getDataInt("id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("id")..']' end name = name..kk..". "..v:getDataInt("reset").." - "..name_now..space.." \n" until v:next() == false elseif skills[param] ~= nil then name = name.."\n" name = name.."Rank "..param.." fighting - Nome do Jogador\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". "..v:getDataInt("value").." - "..name_now..space.." \n" until v:next() == false end if name ~= "Highscore\n" then doPlayerPopupFYI(cid, name) end return TRUE end
Postado Fevereiro 9, 2015 10 anos Onde seria colocado essa script ? Bem útil ela. No Xml iria algo também ?
Postado Fevereiro 11, 2015 10 anos basta criar um arquivo ranking.lua na pasta data\talkactions\scripts e adicionar o código acima depois você vai em talkactions.xml e adiciona essa tag <talkaction words="!rank" script="ranking.lua" />
Postado Maio 21, 2015 9 anos não é por nada não mas god ainda aparece na lista de skills, você não fez nenhuma checagem de group id aqui: local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;") em comparação com as outras linhas, dá pra ver claramente que você ou quem fez o script não tinha conhecimento algum das querys e provavelmente pegou a linha das skills de algum outro script: local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";")local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";") Como o script inteiro foi feito só pra colocar limite em skills, quando na vdd era mt mais simples imitar o jeito que estava em level e ml, tudo que vc teria que fazer era: local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `group_id` <= 2, `skillid` = "..skills[param].." ORDER BY `value` DESC LIMIT 0, "..(max)..";") mas como você fez toda a checagem desnecessária então vc tem que manter o ORDER igual, ficando assim: local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `group_id` <= 2, `skillid` = "..skills[param].." ORDER BY `value` DESC;") Obs: não tive tempo pra testar mas provavelmente é isso, se alguém tiver um conhecimento melhor de sql e quiser me corrigir, fique a vontade
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.