Ranking MU Online com PHP + SQL: Guia Completo para Top Level, Resets, PK e Guild
Aprenda como criar rankings para MU Online usando PHP e SQL Server, consultar a tabela Character, montar Top Level, Top Resets, Top PK e entender como adaptar as queries para os campos realmente utilizados pela sua source.
Criar um ranking MU Online com PHP e SQL Server é uma das formas mais úteis de integrar o website diretamente com a database do servidor.
A partir da tabela Character, é possível montar
rankings de level, resets, PK, master reset, ranking
semanal, mensal e diversas outras classificações.
O ponto mais importante é entender que a query precisa seguir
a estrutura real da sua database. Um servidor pode utilizar
ResetCount, enquanto outro usa ResetsG.
Como funciona um ranking MU Online?
O ranking normalmente executa uma consulta SQL na database
MuOnline, organiza os registros e depois exibe
o resultado através do PHP.
Database MuOnline
|
v
Tabela Character
|
v
SELECT + ORDER BY
|
v
PHP
|
v
Tabela de ranking no website
Tabela Character no ranking
A tabela Character costuma possuir dados essenciais
para rankings.
Exemplos:
Name
Class
cLevel
Experience
ResetCount
ResetsG
MResets
PkCount
ctlcode
AccountID
Nem todos os campos existem em todas as sources.
Confira sua estrutura
sp_help 'Character';
Antes de copiar qualquer ranking, veja quais campos realmente existem na sua database.
Ranking Top Level MU Online
Um ranking de level pode ordenar primeiro por
cLevel e depois pela experiência.
SELECT TOP 10
Name,
Class,
cLevel,
Experience
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
cLevel DESC,
Experience DESC;
Por que usar Experience como desempate?
Dois jogadores podem estar no mesmo level. Nesse caso, quem possui maior experiência acumulada pode aparecer primeiro.
Ranking Top Resets MU Online
Primeiro descubra qual campo sua source usa.
Se for ResetCount:
SELECT TOP 10
Name,
Class,
ResetCount,
cLevel
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
ResetCount DESC,
cLevel DESC;
Se for ResetsG:
SELECT TOP 10
Name,
Class,
ResetsG,
cLevel
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
ResetsG DESC,
cLevel DESC;
Ranking semanal
Algumas sources possuem:
ResetsWeek
Nesse caso:
SELECT TOP 10
Name,
Class,
ResetsWeek
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY ResetsWeek DESC;
Ranking mensal
SELECT TOP 10
Name,
Class,
ResetsMonth
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY ResetsMonth DESC;
Ranking Top PK / Killers
Se sua source utiliza PkCount:
SELECT TOP 10
Name,
Class,
PkCount
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY PkCount DESC;
Ranking Master Reset
Se sua source utiliza:
MResets
uma consulta possível é:
SELECT TOP 10
Name,
Class,
MResets,
ResetsG
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
MResets DESC,
ResetsG DESC;
Ranking de Guilds
O ranking de guild depende muito mais da estrutura da source.
Uma database pode possuir:
Guild
GuildMember
Por exemplo, para contar membros:
SELECT
G_Name,
COUNT(*) AS TotalMembros
FROM GuildMember
GROUP BY G_Name
ORDER BY TotalMembros DESC;
O critério de "melhor guild" pode ser totalmente diferente dependendo do projeto.
Como remover GM do ranking
Muitas databases utilizam o campo:
ctlcode
Rankings customizados frequentemente aplicam:
WHERE ctlcode = 0 OR ctlcode IS NULL
Assim, personagens administrativos podem ser removidos da classificação.
Top 10, Top 50 ou Top 200?
Basta alterar o TOP.
SELECT TOP 200
Name,
ResetsG,
cLevel
FROM Character
ORDER BY
ResetsG DESC,
cLevel DESC;
Exemplo completo em PHP + MSSQL
Para sistemas antigos que utilizam a extensão
mssql, um exemplo simples seria:
<?php
$sql = "
SELECT TOP 10
Name,
Class,
ResetsG,
cLevel
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
ResetsG DESC,
cLevel DESC
";
$query = mssql_query($sql);
if (!$query) {
echo 'Erro ao carregar ranking.';
} else {
$posicao = 1;
while ($row = mssql_fetch_array($query)) {
echo '<tr>';
echo '<td>' . intval($posicao) . '</td>';
echo '<td>' .
htmlspecialchars($row['Name']) .
'</td>';
echo '<td>' .
intval($row['Class']) .
'</td>';
echo '<td>' .
intval($row['ResetsG']) .
'</td>';
echo '<td>' .
intval($row['cLevel']) .
'</td>';
echo '</tr>';
$posicao++;
}
}
?>
HTML da tabela
<table>
<thead>
<tr>
<th>#</th>
<th>Personagem</th>
<th>Classe</th>
<th>Resets</th>
<th>Level</th>
</tr>
</thead>
<tbody>
<?php
// loop PHP do ranking aqui
?>
</tbody>
</table>
Como mostrar o nome da classe
Em vez de exibir apenas o número da classe, você pode criar uma função PHP.
function nomeClasse($class)
{
$class = intval($class);
if ($class == 0) {
return 'Dark Wizard';
}
if ($class == 1) {
return 'Soul Master';
}
if ($class == 16) {
return 'Dark Knight';
}
if ($class == 17) {
return 'Blade Knight';
}
if ($class == 32) {
return 'Fairy Elf';
}
if ($class == 33) {
return 'Muse Elf';
}
return 'Classe ' . $class;
}
Os códigos precisam ser adaptados à versão utilizada pelo servidor.
Ranking com Guild
Em databases que possuem GuildMember,
você pode relacionar o personagem à guild.
Exemplo conceitual:
SELECT TOP 10
C.Name,
C.ResetsG,
C.cLevel,
G.G_Name
FROM Character C
LEFT JOIN GuildMember G
ON G.Name = C.Name
WHERE C.ctlcode = 0 OR C.ctlcode IS NULL
ORDER BY
C.ResetsG DESC,
C.cLevel DESC;
Ranking por posição individual
Também é possível calcular a posição de um personagem comparando quantos jogadores possuem um resultado superior.
SELECT COUNT(*) + 1 AS Posicao
FROM Character
WHERE
(ctlcode = 0 OR ctlcode IS NULL)
AND (
ResetsG > 100
OR (
ResetsG = 100
AND cLevel > 400
)
);
Neste exemplo, 100 e 400 representariam
os dados do personagem consultado.
Invalid Column Name no ranking
Exemplo:
Invalid column name 'ResetsG'
Significa que sua tabela Character não possui esse campo.
Confira:
sp_help 'Character';
Depois adapte a query.
Ranking não mostra ninguém
Verifique:
- conexão com SQL;
- database correta;
- tabela Character;
- filtro ctlcode;
- campo utilizado;
- erro retornado por mssql_query.
Ranking mostra dados antigos
Possíveis causas:
- GameServer ainda não salvou o personagem;
- cache do website;
- site conectado à database errada;
- campo diferente do usado no jogo;
- ranking consultando tabela auxiliar.
Ranking está lento
Evite consultas desnecessárias dentro de loops.
Por exemplo, é melhor buscar personagem e guild em um
JOIN do que executar uma nova consulta SQL
para cada linha da tabela.
Performance do ranking
Algumas boas práticas:
- use TOP para limitar resultados;
- evite SELECT * quando não precisa de todas as colunas;
- evite dezenas de queries por personagem;
- use JOIN quando apropriado;
- avalie índices em databases grandes;
- não ordene por campos desnecessários.
Segurança no PHP
Um ranking público normalmente não precisa receber valores arbitrários do usuário para montar SQL.
Quando filtros ou buscas forem adicionados, valide os dados e evite concatenar entrada do usuário diretamente em queries.
Checklist do ranking MU Online
| Verificação | Resultado esperado |
|---|---|
| Conexão SQL | Funcionando. |
| Database | MuOnline correta. |
| Character | Tabela disponível. |
| Campo de reset | Mesmo usado pelo GameServer. |
| ctlcode | Filtro compatível com a source. |
| ORDER BY | Critério correto. |
| TOP | Quantidade limitada. |
| PHP | Escapa conteúdo exibido. |
| Performance | Sem query desnecessária por linha. |
Perguntas frequentes
Qual tabela usar para ranking MU Online?
A tabela Character é uma das mais utilizadas para rankings de personagens, pois normalmente contém level, classe e outros dados importantes.
Como criar ranking de resets?
Descubra primeiro qual campo o GameServer atualiza, como ResetCount ou ResetsG, e ordene esse campo de forma decrescente.
Por que o ranking mostra 0 resets?
Uma causa muito comum é o site consultar uma coluna diferente daquela utilizada pelo sistema de reset.
Como esconder GM do ranking?
Algumas databases permitem filtrar por ctlcode, mas você deve confirmar os valores utilizados pela sua source.
Posso criar Top 200?
Sim. Em SQL Server, basta utilizar TOP 200 na consulta, desde que essa quantidade faça sentido para o layout e a performance do portal.
Ranking PHP funciona em MU Online 97D, 99z e Season 6?
O conceito funciona, mas os campos, classes, tabelas e estrutura da database precisam ser adaptados à versão e source utilizada.
Conclusão
Criar um ranking MU Online com PHP e SQL exige principalmente entender a estrutura da database.
Para Top Level, campos como cLevel e
Experience costumam ser importantes.
Para Top Resets, você precisa descobrir se sua source utiliza
ResetCount, Resets ou
ResetsG.
O melhor ranking não é aquele com a query mais complexa, mas aquele que consulta corretamente os dados reais utilizados pelo GameServer e faz isso de maneira segura e eficiente.