O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Servidor

Como configurar o RankingServer no seu servidor de MU Online

Aprenda a configurar um RankingServer para exibir rankings de reset, mestre e guild no seu servidor de MU Online, com coleta de dados, atualização automática e integração com o site.

GA Gabriel · Atualizado em 10 jan 2026 · ⏱ 16 min de leitura
Resposta rápida

Um ranking bem-feito é um dos maiores motores de engajamento de um servidor de MU Online. Ver o próprio nome subir na lista de resets, disputar o topo do ranking mestre ou brigar pela liderança entre guilds mantém os jogadores conectados e competitivos. Por trás dessa vitrine aparentemente simples e

Um ranking bem-feito é um dos maiores motores de engajamento de um servidor de MU Online. Ver o próprio nome subir na lista de resets, disputar o topo do ranking mestre ou brigar pela liderança entre guilds mantém os jogadores conectados e competitivos. Por trás dessa vitrine aparentemente simples existe um trabalho técnico importante: coletar os dados corretos do banco, calcular as classificações sem travar o servidor, atualizar as informações em intervalos adequados e integrar tudo ao site de forma segura. É aqui que entra o RankingServer — seja como um serviço dedicado, seja como um conjunto de rotinas e consultas que alimentam a exibição. Neste tutorial você vai aprender os tipos de ranking mais comuns, como coletar dados sem sobrecarregar a base de produção, como agendar a atualização, como integrar ao site e quais erros evitar. É um tema avançado porque mistura banco de dados, agendamento e segurança de exibição.

Pré-requisitos

Este guia assume que o servidor já está operacional e com jogadores gerando dados. Caso ainda esteja montando a base, comece pelo tutorial de como criar servidor de MU Online e volte quando já houver contas e personagens no banco.

  • Servidor de MU Online funcional com banco de dados (geralmente SQL Server, mas varia por emulador).
  • Acesso administrativo ao banco (usuário com permissão de leitura e de criação de tabelas/procedures).
  • Conhecimento básico de SQL para escrever e ajustar consultas.
  • Um site/painel do servidor (normalmente em PHP) onde o ranking será exibido.
  • Ferramenta de agendamento disponível (SQL Server Agent, Agendador de Tarefas do Windows ou cron, conforme o ambiente).
  • Backup do banco antes de criar objetos novos.

Tipos de ranking no MU Online

Antes de configurar, é preciso saber o que exibir. Os rankings mais consagrados na cultura do MU são:

RankingBaseado emObservações
ResetQuantidade de resets do personagemO mais popular; costuma desempatar por nível e experiência
Mestre (Master)Nível mestre (Master Level)Relevante em seasons com sistema de mestre
GuildScore/pontos da guildSoma de contribuição dos membros, wins de Castle Siege, etc.
LevelNível do personagemComum em servidores no-reset ou de progressão longa
PK/KillsAbates em PvPExige tratamento para evitar farm de kills
GensPontuação do sistema GensPresente em seasons que têm o sistema
EventosVitórias em Blood Castle, Devil Square, CCDepende de o emulador registrar essas métricas

Nem todo emulador registra todas essas métricas no banco. O primeiro passo prático é descobrir onde cada dado mora nas tabelas do seu banco, pois nomes de colunas e tabelas variam por emulador.

Entendendo de onde vêm os dados

No MU Online, as informações relevantes para ranking normalmente ficam em algumas tabelas centrais. Os nomes abaixo são ilustrativos e mudam conforme o emulador:

  • Tabela de personagens (ex.: Character) — costuma guardar Name, cLevel, Resets, MasterLevel, Class, Experience.
  • Tabela de guilds (ex.: Guild) — nome, marca, mestre da guild, pontuação.
  • Tabela de membros de guild (ex.: GuildMember) — vínculo entre personagem e guild.
  • Tabelas de eventos ou rankings específicos, quando existirem.

O primeiro trabalho é mapear essas colunas. Uma consulta simples para inspecionar o topo de resets seria (exemplo ilustrativo):

-- Exemplo ILUSTRATIVO - nomes de tabela/coluna variam por emulador
SELECT TOP 100
    Name,
    Resets,
    cLevel,
    Class
FROM Character
ORDER BY Resets DESC, cLevel DESC, Experience DESC;

Note o desempate: primeiro por resets, depois por nível e experiência. Definir critérios de desempate claros evita reclamações de "por que ele está na frente se temos o mesmo reset".

Estratégia de coleta sem sobrecarregar o servidor

O erro mais comum de iniciantes é fazer o site rodar essa consulta pesada a cada acesso de visitante direto na tabela de produção. Em um servidor movimentado, isso concorre com o GameServer pelo banco e degrada o desempenho de todos. A abordagem correta é desacoplar a coleta da exibição.

O padrão recomendado é:

  1. Criar uma tabela de cache de ranking (ex.: RankingCache) que guarda o resultado já calculado, com posição, nome, valor e data de atualização.
  2. Um job agendado recalcula e regrava essa tabela em intervalos definidos.
  3. O site lê apenas da RankingCache, com consultas leves e indexadas.

Assim, a consulta pesada roda uma vez por intervalo, não uma vez por visitante. Um esqueleto ilustrativo da tabela de cache:

-- Exemplo ILUSTRATIVO de tabela de cache de ranking
CREATE TABLE RankingCache (
    RankType   VARCHAR(20),   -- 'reset', 'master', 'guild'
    Position   INT,
    Name       VARCHAR(50),
    Value      INT,
    ExtraInfo  VARCHAR(100),
    UpdatedAt  DATETIME
);

E o procedimento que popula o ranking de reset poderia ser encapsulado numa stored procedure que apaga o cache do tipo reset e reinsere o TOP calculado.

Configurando o RankingServer ou as rotinas de atualização

O termo "RankingServer" cobre duas realidades. Em alguns emuladores existe um executável dedicado que lê o banco e serve os dados. Em muitos casos, porém, o "RankingServer" é simplesmente o conjunto de rotinas SQL + job agendado que descrevemos. Ambas as abordagens seguem a mesma lógica: coletar, calcular, cachear, servir.

Passos gerais de configuração:

  1. Mapeie as colunas de cada métrica no seu banco.
  2. Escreva as consultas de cada ranking (reset, mestre, guild), com desempates definidos.
  3. Crie a tabela de cache e as stored procedures que a preenchem.
  4. Agende a atualização com a ferramenta disponível.
  5. Aponte o site para ler do cache.
  6. Teste e valide os números com casos conhecidos.

Para o ranking de guild, a lógica é um pouco mais elaborada, pois normalmente soma a contribuição dos membros. Exemplo ilustrativo:

-- Exemplo ILUSTRATIVO de ranking de guild por soma de resets dos membros
SELECT TOP 50
    g.G_Name AS GuildName,
    SUM(c.Resets) AS GuildScore,
    COUNT(m.Name) AS Members
FROM Guild g
JOIN GuildMember m ON g.G_Name = m.G_Name
JOIN Character   c ON m.Name  = c.Name
GROUP BY g.G_Name
ORDER BY GuildScore DESC;

Ajuste a métrica de pontuação da guild ao que faz sentido no seu servidor: pode ser soma de resets, vitórias em Castle Siege, ou uma pontuação própria.

Agendando a atualização automática

O intervalo de atualização é uma decisão de equilíbrio. Muito curto sobrecarrega o banco; muito longo deixa o ranking "velho" e frustra os jogadores. Um intervalo entre 5 e 15 minutos costuma ser um bom ponto de partida para rankings de reset e mestre. Rankings de guild e eventos podem atualizar com menos frequência.

As opções de agendamento variam por ambiente:

  • SQL Server Agent: crie um Job que executa a stored procedure de atualização no intervalo desejado. É a forma mais integrada quando o banco é SQL Server.
  • Agendador de Tarefas do Windows: dispara um script (.sql via sqlcmd, ou um .php/.bat) periodicamente.
  • Cron (em ambientes Linux/painel): agenda um script que aciona a atualização.

Exemplo ilustrativo de chamada agendada via linha de comando:

:: Exemplo ILUSTRATIVO - atualiza o ranking a cada execução agendada
sqlcmd -S localhost -d MuOnline -U sa -P suaSenha -Q "EXEC UpdateRankingCache"

Evite colocar senhas em texto puro em scripts acessíveis; prefira autenticação integrada ou credenciais protegidas quando possível.

Integração com o site

Com o cache pronto, a exibição no site vira uma consulta leve. Em PHP, o padrão é ler da RankingCache filtrando pelo RankType e ordenando por Position. Dois cuidados de segurança são obrigatórios:

  • Nunca concatene entrada do usuário direto em SQL. Use consultas parametrizadas (prepared statements) para evitar SQL injection.
  • Use um usuário de banco somente-leitura para o site. O site não precisa escrever no banco de produção; se for comprometido, o dano é limitado.

Esqueleto ilustrativo em PHP:

// Exemplo ILUSTRATIVO - leitura do cache de ranking com PDO
$stmt = $pdo->prepare(
    "SELECT Position, Name, Value, ExtraInfo
     FROM RankingCache
     WHERE RankType = :type
     ORDER BY Position ASC"
);
$stmt->execute([':type' => 'reset']);
$ranking = $stmt->fetchAll(PDO::FETCH_ASSOC);

Você pode ainda adicionar uma camada de cache no próprio site (arquivo ou memória) para reduzir consultas quando o tráfego é alto, respeitando o mesmo princípio de desacoplar coleta e exibição.

Erros comuns e soluções

SintomaCausa provávelSolução
Ranking desatualizadoJob de atualização falhou ou intervalo longoVerificar histórico do job e reduzir o intervalo
Site lento ao abrir o rankingConsulta pesada rodando direto na produçãoMigrar para tabela de cache lida pelo site
Empates exibidos em ordem aleatóriaFalta de critério de desempateAdicionar ORDER BY secundário (nível, experiência)
Nomes ou valores erradosColuna/tabela mapeada incorretamenteRevisar o mapeamento no banco do emulador
Guild com pontuação zeradaJoin incorreto entre guild e membrosCorrigir a relação de membros na consulta
Risco de invasão pelo rankingConsulta concatenando entrada do usuárioUsar prepared statements e usuário somente-leitura

Boas práticas

Trate o ranking como um sistema de leitura barata sobre dados pesados: calcule uma vez, exiba muitas. Mantenha as consultas de coleta em stored procedures versionadas, para poder revisar e evoluir a lógica sem mexer no site. Documente o mapeamento de colunas do seu emulador, pois é a informação que mais se perde entre migrações. Monitore a execução do job de atualização e configure um alerta simples caso ele falhe, para não descobrir pelo jogador reclamando. E sempre isole as credenciais do site com permissões mínimas — o ranking é público, então é uma das superfícies mais visadas por ataques.

Checklist de lançamento

  • Colunas de cada métrica mapeadas no banco do emulador
  • Consultas de reset, mestre e guild com critérios de desempate definidos
  • Tabela de cache de ranking criada e indexada
  • Stored procedures de atualização testadas com dados reais
  • Job/agendamento configurado com intervalo adequado
  • Site lendo somente do cache, com prepared statements
  • Usuário de banco do site com permissão somente-leitura
  • Validação dos números contra casos conhecidos
  • Monitoramento/alerta do job de atualização ativo
  • Backup do banco realizado antes de criar os objetos novos

Perguntas frequentes

O que é um RankingServer no MU Online?

É um componente ou serviço que consulta o banco de dados do servidor, calcula as classificações de jogadores (resets, nível mestre, guilds) e disponibiliza esses dados de forma organizada para exibição no site ou dentro do jogo.

O ranking precisa rodar em tempo real?

Não, e normalmente não deve. Rankings costumam ser atualizados em intervalos (a cada poucos minutos ou horas) para não sobrecarregar o banco. Tempo real só é necessário em casos específicos e com cache adequado.

Posso mostrar o ranking direto no site sem RankingServer dedicado?

Sim. Muitos servidores geram o ranking com consultas SQL diretas a partir do site em PHP. O RankingServer dedicado é útil para centralizar a lógica, aplicar cache e reduzir carga no banco principal.

Por que meu ranking mostra dados desatualizados?

Geralmente é cache. Se você usa uma tabela intermediária ou arquivos de cache, o job de atualização pode ter falhado ou o intervalo estar muito longo. Verifique a rotina de coleta e o agendamento.

Como evitar que o ranking pese no desempenho do servidor?

Use tabelas ou views dedicadas ao ranking, atualizadas por um job agendado, e sirva o site a partir dessas tabelas em vez de consultar as tabelas de produção a cada acesso.

GA
Editor de guias e builds

Gabriel cobre gameplay, builds de classes, PvP e progressão. Testa cada estratégia em servidor antes de publicar.

Continue lendo

Artigos relacionados