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

Como Restaurar Personagem Corrompido ou com Dados Inválidos no MU

Guia avançado para diagnosticar e restaurar personagens com dados corrompidos no banco SQL do MU Online, incluindo inventário, posição e stats.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

Visão Geral do Problema

Personagens corrompidos são uma das ocorrências mais críticas na administração de um servidor MU Online. A corrupção pode ocorrer por queda de energia durante o salvamento, falha do GameServer, inserção manual incorreta no banco, ataque externo, ou bug de versão do servidor. O resultado prático é um personagem que trava o GameServer ao tentar carregar, impedindo o acesso da conta inteira.

Este guia cobre o diagnóstico completo e o procedimento de restauração para servidores Season 6 (MuServer S6 EP3) com SQL Server 2008/2012/2014/2019.

Atenção: Faça um backup completo do banco antes de qualquer alteração. Execute: BACKUP DATABASE MuOnline TO DISK = 'C:\Backups\MuOnline_antes_restauro.bak' WITH COMPRESSION, STATS = 10

Passo 1 — Identificar o Personagem com Problema

1.1 Abra o arquivo de log do GameServer. O caminho padrão é:

GameServer\Logs\Error\Error_YYYYMMDD.log
GameServer\Logs\GMCommand\GMCommand_YYYYMMDD.log

1.2 Filtre por palavras-chave de erro crítico:

[Error] Character Load Failed - CharName: Jogador01
[Error] Invalid Map Position - Map:255 X:0 Y:0
[Error] Inventory data corrupted - AccountID: conta01
[Error] Exception in CharacterLoad() - Overflow or invalid data

1.3 Confirme no SQL Server Management Studio (SSMS) que o personagem existe:

USE MuOnline;
SELECT Name, AccountID, Class, cLevel, MapNumber, MapPosX, MapPosY, ConnectStat
FROM Character
WHERE Name = 'Jogador01';
Nota: O campo ConnectStat deve ser 0 quando o personagem está offline. Se estiver 1 com o servidor rodando e nenhum jogador conectado, o personagem ficou "travado" como online — isso por si só pode impedir o login.

Passo 2 — Resetar o Status de Conexão Travado

Antes de qualquer intervenção mais profunda, resolva o estado de conexão pendente:

USE MuOnline;

-- Forcar personagem para offline
UPDATE Character
SET ConnectStat = 0,
    ChatLimitTime = 0
WHERE Name = 'Jogador01';

-- Forcar conta para offline
UPDATE MEMB_STAT
SET ConnectStat = 0,
    ServerName = '',
    IP = ''
WHERE memb__id = 'conta01';

Reinicie o GameServer e teste o login. Se o problema persistir, avance para o Passo 3.


Passo 3 — Corrigir Posição Inválida no Mapa

Posição ou mapa com valor inválido (ex: MapNumber=255, coordenadas X=0 Y=0, ou mapa não existente) é a causa mais frequente de crash no carregamento.

Mapa Lorencia é o mais seguro para teleportar: MapNumber=0, X=125, Y=125.

USE MuOnline;

UPDATE Character
SET MapNumber = 0,
    MapPosX   = 125,
    MapPosY   = 125,
    Dir       = 1
WHERE Name = 'Jogador01';

Referência rápida de mapas válidos para Season 6:

MapNumberNome do MapaX seguroY seguro
0Lorencia125125
1Dungeon107247
2Devias19735
3Noria17199
7Atlans1515
10Crywolf Fortress8790
56Kanturu Relics3927
Dica: Se o seu servidor usa mapas customizados, verifique os IDs válidos no arquivo GameServer\Data\World\WorldSetting.xml ou tabela WZ_WORLD dependendo da versão do MuServer.

Passo 4 — Diagnóstico e Limpeza do Inventário Corrompido

O inventário é armazenado como dados binários (BLOB/Image) na coluna Inventory da tabela Character. Um byte fora do padrão pode travar o carregamento inteiro.

4.1 Verifique o tamanho dos dados do inventário:

USE MuOnline;

SELECT Name,
       DATALENGTH(Inventory) AS TamanhoInventario,
       DATALENGTH(MagicList)  AS TamanhoMagicList,
       DATALENGTH(Quest)      AS TamanhoQuest
FROM Character
WHERE Name = 'Jogador01';

Valores de referência para Season 6:

  • Inventory: deve ser exatamente 7168 bytes (112 slots * 64 bytes por item)
  • MagicList: varia, tipicamente entre 256 e 2048 bytes
  • Quest: tipicamente 4096 bytes

4.2 Se o tamanho estiver errado, limpe o inventário com um blob zerado do tamanho correto:

USE MuOnline;

-- Zerar o inventário (perde os itens, mas restaura o acesso)
UPDATE Character
SET Inventory = CAST(REPLICATE(CHAR(0xFF), 7168) AS VARBINARY(7168))
WHERE Name = 'Jogador01';
Atenção: O byte 0xFF representa slot vazio no protocolo do MuServer Season 6. Use 0x00 apenas se seu servidor utilizar outro padrão — consulte o protocolo da sua versão específica.

4.3 Para limpar também a lista de skills corrompida:

USE MuOnline;

UPDATE Character
SET MagicList = CAST(REPLICATE(CHAR(0xFF), 1152) AS VARBINARY(1152))
WHERE Name = 'Jogador01';

Passo 5 — Restaurar Stats Inválidos

Stats com valores fora do range permitido causam overflow na lógica do servidor.

5.1 Verifique os stats atuais:

USE MuOnline;

SELECT Name, Class, cLevel,
       Strength, Dexterity, Vitality, Energy, Leadership,
       LevelUpPoint, Life, MaxLife, Mana, MaxMana
FROM Character
WHERE Name = 'Jogador01';

5.2 Se algum valor estiver negativo ou absurdamente alto (ex: Strength = 65535 ou -1), corrija para valores base da classe:

USE MuOnline;

-- Exemplo para Dark Knight (Class=0) level 1 corrigido
UPDATE Character
SET Strength      = 28,
    Dexterity     = 20,
    Vitality      = 25,
    Energy        = 10,
    Leadership    = 0,
    LevelUpPoint  = 0,
    Life          = 110,
    MaxLife       = 110,
    Mana          = 40,
    MaxMana       = 40,
    cLevel        = 1,
    Experience    = 0
WHERE Name = 'Jogador01';

Valores base por classe (Season 6 padrão):

ClasseClassSTRDEXVITENE
Dark Knight028202510
Dark Wizard118181530
Fairy Elf222252015
Magic Gladiator326262616
Dark Lord426202015
Summoner518181823
Rage Fighter632272510

Passo 6 — Verificar e Corrigir Dados Auxiliares

Além da tabela Character, outros dados podem estar corrompidos:

6.1 Limpar dados de warehouse corrompidos:

USE MuOnline;

-- Verificar tamanho do warehouse
SELECT StoreName, DATALENGTH(Items) AS TamanhoWarehouse
FROM warehouse
WHERE StoreName = 'conta01';

-- Zerar warehouse se corrompido (perde itens do baul)
UPDATE warehouse
SET Items = CAST(REPLICATE(CHAR(0xFF), 7680) AS VARBINARY(7680)),
    Money = 0
WHERE StoreName = 'conta01';

6.2 Remover registros orfaos de Blood Castle / Devil Square que podem travar o personagem:

USE MuOnline;

DELETE FROM BC_UserData    WHERE Name = 'Jogador01';
DELETE FROM DS_UserData    WHERE Name = 'Jogador01';
DELETE FROM CC_UserData    WHERE Name = 'Jogador01';
DELETE FROM T_OfflineStore WHERE CharName = 'Jogador01';

6.3 Verificar e corrigir o registro de guild se necessário:

USE MuOnline;

-- Remover personagem de guild corrompida
UPDATE GuildMember
SET G_Name = '', G_Level = 0, G_Status = 0
WHERE Name = 'Jogador01';

Passo 7 — Restaurar a Partir de Backup

Se a corrupção for severa, a melhor solução é restaurar a partir de um backup recente apenas os dados do personagem.

7.1 Restaure o backup em banco temporário:

RESTORE DATABASE MuOnline_Backup
FROM DISK = 'C:\Backups\MuOnline_20240115_0600.bak'
WITH MOVE 'MuOnline'     TO 'C:\SQL\MuOnline_Backup.mdf',
     MOVE 'MuOnline_log' TO 'C:\SQL\MuOnline_Backup_log.ldf',
     NORECOVERY, STATS = 10;

RESTORE DATABASE MuOnline_Backup WITH RECOVERY;

7.2 Copie apenas os dados do personagem específico do banco restaurado:

-- Copiar Character
UPDATE MuOnline..Character
SET Inventory    = B.Inventory,
    MagicList    = B.MagicList,
    MapNumber    = B.MapNumber,
    MapPosX      = B.MapPosX,
    MapPosY      = B.MapPosY,
    Strength     = B.Strength,
    Dexterity    = B.Dexterity,
    Vitality     = B.Vitality,
    Energy       = B.Energy,
    cLevel       = B.cLevel,
    Experience   = B.Experience,
    LevelUpPoint = B.LevelUpPoint
FROM MuOnline..Character A
JOIN MuOnline_Backup..Character B ON A.Name = B.Name
WHERE A.Name = 'Jogador01';

-- Copiar warehouse
UPDATE MuOnline..warehouse
SET Items = B.Items,
    Money = B.Money
FROM MuOnline..warehouse A
JOIN MuOnline_Backup..warehouse B ON A.StoreName = B.StoreName
WHERE A.StoreName = 'conta01';

Passo 8 — Validação Final

Após todas as correções, execute este checklist antes de reiniciar o GameServer:

USE MuOnline;

-- Checklist de validacao
SELECT
    Name,
    ConnectStat,
    MapNumber,
    MapPosX,
    MapPosY,
    cLevel,
    Strength,
    Dexterity,
    Vitality,
    Energy,
    DATALENGTH(Inventory) AS InventarioBytes,
    DATALENGTH(MagicList) AS MagicListBytes
FROM Character
WHERE Name = 'Jogador01';

Confirme:

  • ConnectStat = 0
  • MapNumber entre 0 e 255, com valor reconhecido pelo servidor
  • MapPosX e MapPosY > 0
  • DATALENGTH(Inventory) = 7168 (Season 6)
  • Stats todos positivos e dentro do range 0-65534
Dica: Após restaurar, oriente o jogador a fazer logout completo do launcher antes de tentar o login. Sessões em cache podem usar dados antigos e causar erro mesmo após a correção no banco.

Reinicie o GameServer e monitore o arquivo GameServer\Logs\Error\ por 5 minutos após o login do personagem restaurado para confirmar que não há novos erros relacionados.

Perguntas frequentes

Como identificar se um personagem está corrompido?

Sinais comuns: crash ao fazer login no personagem, mensagem 'Character load failed', personagem invisível no servidor, erro 'Invalid map position' nos logs do GameServer, ou inventário que não carrega. Verifique os logs em GameServer/Logs/Error/ para identificar o CharName específico.

Qual tabela SQL armazena os dados do personagem no Season 6?

A tabela principal é Character na database MuOnline. Ela contém colunas como Name, AccountID, Class, cLevel, LevelUpPoint, Strength, Dexterity, Vitality, Energy, Leadership, MapNumber, MapPosX, MapPosY, Inventory, MagicList e Life.

Posso restaurar o inventário de um personagem sem backup?

Sem backup completo não é possível recuperar os itens originais. Você pode, porém, limpar o inventário corrompido definindo a coluna Inventory como NULL ou um blob zerado, o que permite o login novamente, mas os itens serão perdidos.

O personagem fica preso em mapa inválido após restaurar. O que fazer?

Execute UPDATE MuOnline..Character SET MapNumber=0, MapPosX=125, MapPosY=125 WHERE Name='NomePersonagem' para teletransportar para Lorencia (MapNumber=0). Se o problema persistir, verifique se o mapa configurado existe em GameServer/Data/World/.

Como evitar corrupção de dados no futuro?

Configure backups automáticos com SQL Server Agent agendando um job para fazer BACKUP DATABASE MuOnline TO DISK a cada 6 horas. Também ative o modo de recuperação FULL no banco MuOnline e mantenha transaction logs para point-in-time recovery.

EQ

Equipe ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados