OM
talkaction

[AGS] Guild Rank

Por Omega, 22 de jan. de 2014 em Actions e Talkactions

ags
omega
otserv
tibia
script
6
2.8k
OmegaO
22 de janeiro de 2014 às 00:56

Aviso

Esse script precisa do Advanced Guild System instalado corretamente para funcionar.

 

Informações

Essa talkaction reúne as informações de todos os jogadores que tem guild. Depois, separa os 10 lvls mais altos de cada guild e soma, fazendo um ranking. No final, o jogador que usar o comando recebe uma janela com as 10 guilds (se existirem) mais fortes do servidor, rankeadas pela soma dos 10 levels mais altos (se existirem).

 

Código

Salve como guildrank.lua em talkactions/scripts:

 

 

function onSay(cid, words, param)
    local guilds = {}
    local guild_rank = {}
    -- Seleciona o level e a guild de cada jogador com guild e com level maior que 10, ordenados pelo level
    local query = db.getResult("SELECT level, guild_id FROM players WHERE guild_id > 0 AND level > 10 ORDER BY level DESC")
    -- Caso nenhum jogador seja selecionado, retorna verdadeiro
    if query:getID() == -1 then
        return true
    end
    repeat
        local level = query:getDataInt("level")
        local guild_id = query:getDataInt("guild_id")
        -- Cria uma tabela dentro da tabela guilds para cada guilda
        if not guilds[guild_id] then
            guilds[guild_id] = {level = level, members = 1}
        -- Se a tabela já existir e o número de membros for menor que 10, soma o level e +1 ao número de membros
        elseif guilds[guild_id].members < 10 then
            guilds[guild_id].level = guilds[guild_id].level + level
            guilds[guild_id].members = guilds[guild_id].members + 1            
        end
    -- Termina se não existirem mais resultados
    until not query:next()
    query:free()
    -- Passa os resultados obtidos para a tabela guild_rank, para ordená-la com table.sort
    for i, k in pairs(guilds) do
        table.insert(guild_rank, {id = i, level = k.level})
    end
    -- Ordena a tabela guild_rank de acordo com a soma dos levels
    table.sort(guild_rank, function(a, b) return a.level > b.level end)
    local i = 0
    local str = '        Guild Rank\n'
    -- Crie uma string com o nome das guildas em um ranking
    for _, info in pairs(guild_rank) do
        i = i + 1
        str = str .. i .. ' - '.. getGuildNameById(info.id) .. ' - ' .. info.level .. '\n'        
        if i == 10 then
            break
        end
    end
    -- Se algum erro ocorrer e o ranking não tiver informações, manda a mensagem "No Guild Information..."
    local ret = str ~= '        Guild Rank\n' and str or "No guild information to be displayed."
    doPlayerPopupFYI(cid, ret)    
    return true
end

 

 

Agora, registre a talkaction em talkactions.xml:

<talkactions words="/guildrank" access="0" event="script" value="guildrank.lua"/>

Editado Abril 25 por Omega

Gabriel CoutoG
22 de janeiro de 2014 às 01:05

Muito bom, Omega, parabéns!

Ótimo recurso adicional para um servidor :)

 

Esse conteúdo foi postado no facebook do XTibia.com!

 

* https://www.facebook.com/XTibia

AlexclusiveA
22 de janeiro de 2014 às 01:52

Ótimo mesmo heim cara..hoje mesmo estávamos falando de servidores com guilds de 100+.

Essa talk action facilitaria muito pra galera ver os rank das melhores guilds rs

 

Parabéns!

cs007C
22 de janeiro de 2014 às 12:53

Parabéns vai ser ótimo para quem não faz uso do site.

3 meses depois...
MasterzikkaM
25 de abril de 2014 às 13:41

Cara desculpem por reativar o topico mais é importante aki nn deu pra usar o comando nn..

 

no execultavel nn aparece nem um erro mais e como se o comando nn existice..

 

Ja comferi se o nome do arquivo ta igual o da tag, ta tudo sertim mais nn pega me ajuda pff..

OmegaO
25 de abril de 2014 às 18:04

Cara desculpem por reativar o topico mais é importante aki nn deu pra usar o comando nn..

 

no execultavel nn aparece nem um erro mais e como se o comando nn existice..

 

Ja comferi se o nome do arquivo ta igual o da tag, ta tudo sertim mais nn pega me ajuda pff..

 

Aviso

Esse script precisa do Advanced Guild System instalado corretamente para funcionar