Character Explicada: Guia Completo da Tabela de Personagens do MU Online
Entenda como funciona a tabela Character do MU Online, os principais campos de personagem, classe, level, atributos, mapa, posição, resets, PK, inventário e como consultar ou editar dados no SQL Server com segurança.
A tabela Character é uma das estruturas mais importantes da database MuOnline porque normalmente armazena os principais dados dos personagens criados pelos jogadores.
Nela podem existir informações como nome do personagem, conta proprietária, classe, level, experiência, pontos, atributos, dinheiro, mapa, posição, inventário e diversos campos personalizados adicionados pela source.
Sources modernas também podem adicionar colunas para resets, master resets, kills, ranking semanal, ranking mensal e outros sistemas.
Neste guia do Aprendiz MU Online, você aprenderá como interpretar a tabela Character, executar consultas SQL e evitar alterações que possam corromper personagens.
O que é a tabela Character?
A tabela Character costuma armazenar um registro para cada personagem existente no servidor.
De forma simplificada:
MEMB_INFO
|
| memb___id
v
Conta
|
v
Character
|
+-- Personagem 1
+-- Personagem 2
+-- Personagem 3
A ligação entre conta e personagem costuma acontecer através de campos como:
MEMB_INFO.memb___id
Character.AccountID
Como ver a estrutura da tabela Character
No SQL Server Management Studio:
Databases
|
+-- MuOnline
|
+-- Tables
|
+-- dbo.Character
|
+-- Columns
Você também pode executar:
sp_help 'Character';
Isso ajuda a descobrir:
- colunas existentes;
- tipo de dado;
- tamanho;
- campos NULL;
- índices;
- restrições.
Principais campos da Character
Uma tabela Character pode possuir campos semelhantes a:
| Campo | Uso comum |
|---|---|
| AccountID | Conta proprietária do personagem. |
| Name | Nome do personagem. |
| Class | Classe do personagem. |
| cLevel | Level atual. |
| Experience | Experiência acumulada. |
| LevelUpPoint | Pontos disponíveis para distribuir. |
| Strength | Força. |
| Dexterity | Agilidade. |
| Vitality | Vitalidade. |
| Energy | Energia. |
| Money | Zen do personagem. |
| MapNumber | Mapa onde o personagem está salvo. |
| MapPosX | Posição X. |
| MapPosY | Posição Y. |
| Inventory | Estrutura binária do inventário. |
Name e AccountID
O campo Name normalmente contém o nome do personagem.
O campo AccountID relaciona esse personagem
à conta proprietária.
Exemplo:
SELECT
AccountID,
Name
FROM Character
WHERE Name = 'DarkKnight';
Mostrar todos os personagens de uma conta
SELECT
Name,
Class,
cLevel
FROM Character
WHERE AccountID = 'usuario';
O que significa Class?
O campo Class armazena um código numérico
utilizado pela source para identificar a classe do personagem.
Em versões tradicionais você poderá encontrar valores associados a classes como:
- Dark Wizard;
- Soul Master;
- Dark Knight;
- Blade Knight;
- Fairy Elf;
- Muse Elf;
- Magic Gladiator;
- Dark Lord;
- classes adicionais em Seasons posteriores.
cLevel e Experience
O campo cLevel normalmente representa o
level atual do personagem.
Já Experience armazena sua experiência.
Uma consulta de ranking pode ser:
SELECT TOP 20
Name,
Class,
cLevel,
Experience
FROM Character
ORDER BY cLevel DESC, Experience DESC;
LevelUpPoint
LevelUpPoint normalmente representa os pontos
ainda disponíveis para distribuição.
Exemplo:
SELECT
Name,
LevelUpPoint
FROM Character
WHERE Name = 'DarkKnight';
Strength, Dexterity, Vitality e Energy
Esses campos normalmente representam os atributos básicos do personagem.
| Campo | Significado comum |
|---|---|
| Strength | Força. |
| Dexterity | Agilidade. |
| Vitality | Vitalidade. |
| Energy | Energia. |
Algumas classes ou Seasons podem utilizar atributos adicionais, como comando para Dark Lord.
Consultar os atributos
SELECT
Name,
Strength,
Dexterity,
Vitality,
Energy,
LevelUpPoint
FROM Character
WHERE Name = 'DarkKnight';
MapNumber, MapPosX e MapPosY
Esses campos geralmente registram onde o personagem foi salvo no mundo do jogo.
Por exemplo:
MapNumber = 0
MapPosX = 125
MapPosY = 125
Dependendo da versão, o mapa 0 costuma estar associado a Lorencia.
Como mover um personagem pelo SQL
Um exemplo conceitual:
UPDATE Character
SET
MapNumber = 0,
MapPosX = 125,
MapPosY = 125
WHERE Name = 'DarkKnight';
Faça esse tipo de alteração preferencialmente com o personagem desconectado.
Money
O campo Money normalmente representa a quantidade
de Zen carregada pelo personagem.
Exemplo:
SELECT
Name,
Money
FROM Character
WHERE Name = 'DarkKnight';
ResetCount, ResetsG e MResets
Campos de reset normalmente são customizações da source e não devem ser considerados universais.
Você poderá encontrar:
ResetCount
Resets
ResetsG
MResets
MasterReset
ResetsWeek
ResetsMonth
Exemplo de ranking por resets
SELECT TOP 20
Name,
ResetCount,
cLevel
FROM Character
ORDER BY ResetCount DESC, cLevel DESC;
Caso sua source utilize ResetsG:
SELECT TOP 20
Name,
ResetsG,
cLevel
FROM Character
ORDER BY ResetsG DESC, cLevel DESC;
PkCount e campos de PK
Sources customizadas podem utilizar colunas como:
PkCount
PkLevel
PkTime
para armazenar informações relacionadas ao sistema PK.
Um ranking personalizado pode usar:
SELECT TOP 20
Name,
PkCount
FROM Character
ORDER BY PkCount DESC;
ctlcode
Algumas databases possuem uma coluna como
ctlcode, frequentemente utilizada por sistemas
para distinguir determinados estados ou privilégios do personagem.
Websites de ranking costumam filtrar personagens administrativos.
Exemplo encontrado em muitas implementações customizadas:
WHERE ctlcode = 0 OR ctlcode IS NULL
A interpretação exata precisa ser confirmada na source.
Inventory
O campo Inventory merece atenção especial.
Em várias versões, ele armazena o inventário do personagem em uma estrutura binária.
Isso significa que não existe uma linha simples como:
Sword = 1
Armor = 1
Os itens são codificados em blocos de bytes de acordo com a versão da source.
MagicList
Algumas versões utilizam MagicList para armazenar
informações relacionadas a skills aprendidas pelo personagem.
Assim como Inventory, pode ser uma estrutura binária dependente da versão.
Quest
O campo Quest, quando presente, pode guardar
informações relacionadas ao progresso de quests e evoluções
do personagem.
Evite alterar seu conteúdo sem documentação da versão utilizada.
Como listar os personagens mais fortes
Exemplo simples por level:
SELECT TOP 10
Name,
Class,
cLevel
FROM Character
ORDER BY cLevel DESC;
Ranking por level e experiência
SELECT TOP 10
Name,
Class,
cLevel,
Experience
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
cLevel DESC,
Experience DESC;
Ranking por resets
SELECT TOP 10
Name,
Class,
ResetsG,
cLevel
FROM Character
WHERE ctlcode = 0 OR ctlcode IS NULL
ORDER BY
ResetsG DESC,
cLevel DESC;
Troque ResetsG pelo campo real utilizado
pela sua source.
Procurar personagem pelo nome
SELECT *
FROM Character
WHERE Name = 'DarkKnight';
Procurar personagens de uma conta
SELECT
Name,
Class,
cLevel
FROM Character
WHERE AccountID = 'usuario';
Como editar personagem com segurança
Antes de fazer qualquer UPDATE:
- faça backup da database;
- confirme que o personagem está offline;
- execute um SELECT;
- verifique o tipo da coluna;
- aplique o UPDATE usando WHERE;
- consulte novamente os dados.
Exemplo
SELECT
Name,
cLevel,
Money
FROM Character
WHERE Name = 'DarkKnight';
Depois:
UPDATE Character
SET Money = 1000000
WHERE Name = 'DarkKnight';
O perigo do UPDATE sem WHERE
Este comando:
UPDATE Character
SET Money = 0;
altera todos os personagens.
Sempre revise a query antes de executar em produção.
Invalid Column Name na Character
Exemplo:
Invalid column name 'ResetCount'
Significa que a aplicação ou query tentou acessar uma coluna que não existe naquela tabela.
Possíveis causas:
- database de outra source;
- site incompatível;
- script SQL ausente;
- campo com outro nome;
- versão antiga da database.
Invalid Object Name Character
Se surgir:
Invalid object name 'Character'
verifique:
- database selecionada;
- nome da tabela;
- schema;
- string de conexão;
- database correta.
Arithmetic Overflow nos atributos
Se a coluna utiliza um tipo numérico com limite inferior ao valor enviado, o SQL poderá retornar overflow.
Por isso, antes de aumentar atributos, resets ou pontos, confira o tipo real da coluna:
sp_help 'Character';
Personagem não entra depois de editar SQL
Se um personagem deixa de entrar depois de uma alteração, revise principalmente:
- MapNumber;
- MapPosX;
- MapPosY;
- Class;
- Inventory;
- MagicList;
- Quest;
- valores acima do limite da source.
Character e GameServer
A tabela Character precisa ser compatível com o GameServer.
Se a source tenta consultar:
ResetCount
MResets
PkCount
e esses campos não existem, o servidor poderá apresentar erros SQL.
Character e website
Rankings, perfil do personagem e painéis administrativos normalmente consultam essa tabela.
Um site pode utilizar:
Name
Class
cLevel
ResetsG
PkCount
mas sua database talvez utilize outros nomes.
Portanto, adapte o website à database real em vez de criar campos apenas porque o código PHP espera encontrá-los.
Checklist da tabela Character
| Verificação | Resultado esperado |
|---|---|
| Character | Tabela disponível. |
| AccountID | Relaciona personagem à conta. |
| Name | Nome válido. |
| Class | Código compatível com a source. |
| cLevel | Dentro do limite esperado. |
| Atributos | Valores suportados pela source. |
| Mapa | MapNumber e coordenadas válidos. |
| Resets | Campo correto para o projeto. |
| Inventory | Não alterado manualmente sem conhecimento. |
| Website | Queries compatíveis com a tabela real. |
| GameServer | Estrutura compatível. |
| Backup | Disponível antes de alterações. |
Perguntas frequentes
O que é Character no MU Online?
É uma tabela utilizada por muitas databases para armazenar as principais informações dos personagens.
Onde fica o nome do personagem?
Normalmente no campo Name.
Onde fica a conta do personagem?
Em muitas estruturas, no campo AccountID.
Onde fica o level?
Normalmente em cLevel.
Onde ficam os resets?
Depende da source. Campos comuns em projetos customizados incluem ResetCount, ResetsG e outros nomes semelhantes.
Posso editar Inventory pelo SQL?
Não é recomendado sem conhecer o formato binário utilizado pela sua versão.
Character pode causar Invalid Column Name?
Sim. Isso acontece quando uma aplicação espera uma coluna que não existe na estrutura atual.
Posso alterar Class diretamente?
Tecnicamente é possível editar o campo, mas o código precisa representar uma classe válida para sua source e o restante dos dados do personagem precisa permanecer consistente.
Por que meu ranking não mostra os resets?
Verifique qual coluna sua source realmente utiliza. O site pode estar consultando ResetCount enquanto a database utiliza ResetsG, ou vice-versa.
Conclusão
A tabela Character é a base para grande parte dos sistemas relacionados aos personagens de um servidor MU Online.
Entender campos como Name, AccountID, Class, cLevel, LevelUpPoint, atributos, MapNumber, Money e Inventory facilita o desenvolvimento de rankings, painéis, editores e sistemas administrativos.
Entretanto, campos de resets, PK e outros recursos customizados devem sempre ser conferidos na source real.
Antes de alterar qualquer personagem, faça backup da database, execute um SELECT e evite editar estruturas binárias como Inventory sem documentação.