Wipe parcial vs total no MU Online: como fazer certo
Entenda a diferença entre wipe parcial e total no MU Online e execute cada um com segurança, preservando contas, rankings e economia quando necessário.
Poucas decisões de administração de um servidor de MU Online causam tanto impacto quanto um wipe. Feito na hora certa e com o método correto, um wipe renova a economia, corrige distorções acumuladas e traz jogadores de volta para uma competição justa. Feito de forma apressada — sem backup, sem aviso
Poucas decisões de administração de um servidor de MU Online causam tanto impacto quanto um wipe. Feito na hora certa e com o método correto, um wipe renova a economia, corrige distorções acumuladas e traz jogadores de volta para uma competição justa. Feito de forma apressada — sem backup, sem aviso ou apagando a tabela errada — ele destrói a confiança da comunidade e, no pior caso, deixa o banco de dados inconsistente e o servidor impossível de subir. Este guia separa os dois grandes tipos de wipe, mostra exatamente o que cada um toca no banco e apresenta um procedimento reproduzível para executar cada um com segurança.
Ao longo do texto os exemplos usam o schema clássico do MuServer (SQL Server, banco MuOnline, tabelas como MEMB_INFO, Character, Guild). Os nomes de tabela e coluna variam por season/emulador — IGCN, MuEMU, X-Files, Season 6 e seasons modernas têm diferenças. Trate cada comando como um exemplo a ser adaptado ao seu banco, nunca como algo para colar às cegas em produção.
Pré-requisitos
Antes de tocar em qualquer tabela, confirme que você tem:
- Acesso administrativo ao SQL Server (SA ou uma conta com permissão de
DELETE,TRUNCATEeBACKUP DATABASE) via SQL Server Management Studio ousqlcmd. - Acesso ao painel/serviços do servidor para parar GameServer, ConnectServer, JoinServer e quaisquer daemons auxiliares (event server, ranking, site).
- Backup completo e testado do banco antes de começar. Se você ainda não tem um fluxo de backup, resolva isso primeiro — veja o passo abaixo.
- Janela de manutenção definida e comunicada aos jogadores.
- Documentação do schema da sua distribuição, para saber quais tabelas guardam progresso e quais guardam configuração.
Se você está montando o servidor agora e ainda não tem essa base, comece pelo guia de como criar servidor de MU Online e volte aqui quando o ambiente estiver estável.
O que é wipe parcial e o que é wipe total
Os termos são usados de forma solta na comunidade, então vale fixar definições operacionais:
Wipe total (full wipe / reset de mundo). Apaga todos os dados de jogo: personagens, itens, zen, resets, guilds, rankings, warehouse, eventos. Na prática o servidor recomeça do zero. Há duas variantes: preservar as contas (MEMB_INFO) para que os jogadores mantenham login e senha, ou apagar também as contas (wipe "hard", raro e agressivo).
Wipe parcial (soft wipe). Zera apenas um subconjunto do progresso, preservando o resto. Exemplos comuns: zerar somente os resets e o ranking mantendo itens; zerar zen e economia mantendo personagens; remover um item específico introduzido por bug; ou zerar apenas as pontuações de um evento sazonal.
A tabela abaixo resume o alcance típico de cada abordagem. Os nomes de tabela são exemplos e variam por season/emulador.
| Dado | Tabela típica | Wipe parcial (economia) | Wipe parcial (resets) | Wipe total (mantém contas) |
|---|---|---|---|---|
| Contas/login | MEMB_INFO | Preserva | Preserva | Preserva |
| Personagens | Character | Preserva | Zera resets/level | Apaga |
| Zen | Character.Money | Zera | Preserva | Apaga (com o char) |
| Itens equipados/inventário | Character.Inventory | Limpa itens | Preserva | Apaga |
| Warehouse (baú) | warehouse | Limpa | Preserva | Apaga |
| Guilds | Guild, GuildMember | Preserva | Preserva | Apaga |
| Ranking/resets | Character.ResetCount, views de rank | Preserva | Zera | Apaga |
| Eventos (CS, BC) | tabelas de evento | Opcional | Opcional | Apaga |
Quando fazer cada tipo
Escolher o tipo errado é o erro mais caro. Use estes critérios:
Faça wipe parcial quando o problema é localizado. Um dupe bug que injetou milhões de zen? Zere a economia sem apagar personagens. O ranking ficou distorcido por um exploit de reset? Zere apenas resets e recomponha o rank. Um item bugado circulando? Remova só aquele item. O wipe parcial preserva o vínculo emocional do jogador com o personagem e reduz a evasão.
Faça wipe total quando a distorção é sistêmica e irrecuperável: economia colapsada em vários vetores, itens ilegítimos espalhados sem rastreabilidade, ou uma mudança de season/rates tão grande que o progresso antigo não faz mais sentido. Também é o caminho para relançamentos ("grand opening") planejados para atrair uma nova onda de jogadores.
> Regra prática: se você consegue escrever um WHERE que isola o problema, provavelmente um wipe parcial resolve. Se o problema está em todo lugar, o wipe total é mais honesto e mais barato de manter.
Passo 1 — Backup completo e verificado
Nunca pule esta etapa. O backup é a sua única rota de volta.
-- Backup full do banco de jogo antes do wipe
BACKUP DATABASE MuOnline
TO DISK = 'D:\Backups\MuOnline_pre_wipe_2024-04-22.bak'
WITH FORMAT, INIT, NAME = 'PreWipe Full', STATS = 10;
GO
-- (Opcional, recomendado) verificar a integridade do arquivo gerado
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\MuOnline_pre_wipe_2024-04-22.bak';
GO
Se houver um banco de contas separado (algumas distribuições usam MuOnline para jogo e outro para ranking/eventos), faça backup de todos. Copie o .bak para um segundo local (outro disco ou nuvem) antes de prosseguir.
Passo 2 — Parar todos os serviços
Encerre nesta ordem, para que ninguém consiga logar durante o processo e para evitar que o cache do GameServer regrave dados:
- ConnectServer — impede novas conexões de cliente.
- GameServer(s) — descarrega personagens da memória para o banco e libera locks.
- JoinServer / EventServer / daemons de ranking.
- Serviços do site que escrevem no banco (cash shop, doação, VIP).
Confirme que nada está conectado ao SQL antes de continuar:
-- Verificar sessões ativas no banco de jogo
SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('MuOnline');
GO
Se aparecerem sessões de GameServer, elas ainda estão vivas — pare o processo antes de seguir. Executar o wipe com o GS ligado é a causa número um de "fiz o DELETE mas os itens voltaram": o cache em memória sobrescreveu suas alterações no shutdown seguinte.
Passo 3 — Executar um wipe parcial
Abaixo, os três wipes parciais mais pedidos. Adapte nomes de coluna à sua season/emulador e rode dentro de uma transação para poder reverter.
Zerar economia (zen) mantendo personagens
USE MuOnline;
GO
BEGIN TRANSACTION;
-- Zerar o zen de todos os personagens
UPDATE Character SET Money = 0;
-- (Opcional) definir um zen inicial padrão em vez de zero
-- UPDATE Character SET Money = 1000000;
-- Confira o número de linhas afetadas antes de confirmar
-- Se estiver correto:
COMMIT; -- ou ROLLBACK; se algo parecer errado
GO
Zerar resets e ranking mantendo itens
USE MuOnline;
GO
BEGIN TRANSACTION;
UPDATE Character
SET ResetCount = 0, -- nome de coluna varia (Resets, ResetCount, etc.)
cLevel = 1, -- volta ao nível 1 (ajuste conforme sua regra)
Experience = 0;
-- Se o ranking for materializado numa tabela própria, limpe-a:
-- TRUNCATE TABLE RankingReset;
COMMIT;
GO
Remover um item específico introduzido por bug
Itens no MuServer clássico ficam em blobs binários (Inventory, warehouse), o que torna a remoção cirúrgica complexa e dependente do formato da distribuição. Quando existe uma tabela relacional de itens (algumas seasons modernas), a remoção é direta:
-- Exemplo: distribuição com tabela relacional de itens
DELETE FROM ItemInventory
WHERE ItemGroup = 12 AND ItemIndex = 15; -- índices variam por season
GO
Para o formato binário, o caminho seguro é usar a ferramenta/painel da própria distribuição ou um script oficial de limpeza — editar o blob manualmente sem conhecer o layout corrompe o inventário inteiro.
Passo 4 — Executar um wipe total
O wipe total (preservando contas) apaga os dados de jogo mantendo MEMB_INFO. Faça em transação e respeite a ordem das chaves estrangeiras (apague filhos antes dos pais).
USE MuOnline;
GO
BEGIN TRANSACTION;
-- 1) Dados dependentes de personagem/guild primeiro
DELETE FROM GuildMember;
DELETE FROM Guild;
DELETE FROM warehouse; -- baús/armazém
DELETE FROM AccountCharacter; -- vínculo conta<->slots (nome varia)
-- 2) Personagens
DELETE FROM Character;
-- 3) Tabelas de evento/ranking (nomes variam por season/emulador)
-- TRUNCATE TABLE Event_CastleSiege;
-- TRUNCATE TABLE Ranking;
-- MEMB_INFO NÃO é tocada: contas e senhas permanecem.
COMMIT;
GO
Depois do COMMIT, é boa prática reduzir/reindexar para o servidor subir limpo:
-- Reconstruir índices das tabelas grandes
ALTER INDEX ALL ON MEMB_INFO REBUILD;
GO
DBCC SHRINKDATABASE (MuOnline, 10); -- opcional, libera espaço do log
GO
Se optar pelo wipe "hard" (apagar também contas), inclua DELETE FROM MEMB_INFO; por último — mas avalie bem, pois isso obriga todo mundo a se registrar de novo e costuma queimar boa parte da base.
Passo 5 — Preservar o que importa num relançamento
Um wipe total não precisa ser terra arrasada. Você pode carregar seletivamente:
- Nomes de conta e guild: exporte
MEMB_INFO(login) e a lista de nomes de guild antes do wipe para oferecer "reserva de nick/guild" no relançamento. - Founder rewards: guarde uma lista de quem jogou na season anterior para dar um brinde de fidelidade na volta.
- Configurações: procedures, triggers e tabelas de configuração NÃO são progresso — não apague. O wipe é sobre dados de jogadores, não sobre a estrutura do banco.
-- Exportar nomes de guild antes de um wipe total (para reserva no relançamento)
SELECT G_Name, G_Master
INTO GuildNames_Backup_20240422
FROM Guild;
GO
Passo 6 — Subir o servidor e validar
Com o wipe concluído:
- Suba JoinServer → ConnectServer → GameServer na ordem inversa do desligamento.
- Crie um personagem de teste e valide: nível/reset zerados (ou como esperado), zen correto, inventário limpo, ranking recomeçando.
- Verifique os logs do GameServer por erros de leitura de tabela (indicam coluna faltando ou tipo incompatível).
- Só então libere o acesso público.
Erros comuns e soluções
| Sintoma | Causa provável | Solução |
|---|---|---|
| Itens/zen "voltam" após o wipe | GameServer estava ligado; o cache regravou no shutdown | Pare todos os GS antes do wipe e refaça o procedimento |
Erro de foreign key ao apagar Character | Tabelas filhas (guild, warehouse) ainda referenciam o char | Apague os dependentes primeiro; siga a ordem do Passo 4 |
| Servidor não sobe após wipe total | Uma procedure/trigger foi apagada junto | Restaure só a estrutura do backup; não delete objetos de configuração |
| Jogadores não conseguem logar | MEMB_INFO foi truncada por engano | Restaure MEMB_INFO do backup pré-wipe |
| Ranking mostra dados antigos | View/tabela materializada não foi recalculada | Rode o job de recomputação ou TRUNCATE na tabela de ranking |
| DELETE demorou e travou o servidor | Transação enorme sem batching, log cheio | Use DELETE TOP (N) em lotes ou TRUNCATE quando não há FK |
Checklist de lançamento
- Backup full feito, copiado para segundo local e verificado com
RESTORE VERIFYONLY - Tipo de wipe decidido (parcial ou total) e escopo documentado
- Aviso aos jogadores publicado com pelo menos 7 dias de antecedência
- Todos os serviços parados (Connect, Game, Join, event, site) e sessões SQL zeradas
- Comandos de wipe testados em transação, com contagem de linhas conferida antes do COMMIT
- Nomes de conta/guild exportados (se for relançamento com reserva de nick)
- Reindex/shrink executados após wipe total
- Personagem de teste validado (nível, zen, inventário, ranking)
- Logs do GameServer sem erros de tabela/coluna
- Backup pós-wipe (novo baseline limpo) realizado antes de liberar acesso
- Acesso público reaberto e anúncio de "no ar" publicado
Perguntas frequentes
Wipe parcial apaga as contas dos jogadores?
Não. Um wipe parcial preserva a tabela MEMB_INFO e normalmente os personagens. Ele zera apenas o progresso escolhido — resets, zen, ranking ou itens — mantendo o login e a senha de cada jogador.
Qual a diferença prática entre wipe total e recriar o banco?
Wipe total apaga todos os dados de jogo mas mantém a estrutura e as procedures do banco. Recriar o banco do zero também recria tabelas e configurações, exigindo reimportar o schema da sua distribuição.
Preciso parar o servidor para fazer wipe?
Sim, sempre. GameServer, ConnectServer e qualquer processo que mantenha conexão com o SQL devem ser encerrados antes do wipe, senão o cache em memória sobrescreve suas alterações e corrompe registros.
Como aviso os jogadores sem perder a base?
Anuncie com pelo menos 7 dias de antecedência, ofereça recompensas de founder e migre nomes de conta/guild. A retenção depende mais da comunicação do que do wipe em si.
Wipe resolve inflação de zen e itens duplicados?
Um wipe total resolve, pois zera a economia. Um wipe parcial de zen e itens também ajuda, mas se a causa (dupe bug, drop mal configurado) não for corrigida antes, a inflação volta em semanas.