Como gerenciar contas e guilds no servidor de MU Online
Gerencie contas, personagens, guilds e GMs do seu servidor de MU Online pelo SQL — criação, banimento, desbloqueio, alteração de itens e queries essenciais de administração.
Todo admin de servidor de MU Online precisa conhecer as tabelas do banco de dados para gerenciar contas, personagens e guilds. Este guia traz as queries SQL mais usadas no dia a dia — desde criar contas até dissolver guildas e transferir itens.
Todo admin de servidor de MU Online precisa conhecer as tabelas do banco de dados para gerenciar contas, personagens e guilds. Este guia traz as queries SQL mais usadas no dia a dia — desde criar contas até dissolver guildas e transferir itens.
Tabelas principais do banco MuOnline
| Tabela | Conteúdo |
|---|---|
MEMB_INFO | Contas de usuário — login, senha, bloqueio, GM level |
MEMB_STAT | Status de conexão por conta |
Character | Personagens — nível, stats, posição, itens equipados |
Inventory | Inventário dos personagens |
Guild | Guildas registradas |
G_UserList | Membros das guildas com posição |
GuildWar | Guerras de guild ativas |
CastleSiege | Dados do Castle Siege |
GMLogs | Log de ações de GM |
Gerenciamento de contas
Criar conta manualmente
USE MuOnline;
GO
INSERT INTO MEMB_INFO
(memb___id, memb__passwd, memb_name, sno__numb, bloc_code, ctl_code)
VALUES
('novaconta', 'senha123', 'PlayerX', '000-000-000-0001', 0, 0);
GO
-- memb___id = login (max 10 chars normalmente)
-- memb__passwd = senha (texto puro ou hash, depende do sistema de registro)
-- memb_name = nome do titular da conta
-- sno__numb = "número de segurança" — geralmente qualquer valor único
-- bloc_code = 0 (ativo) / 1 (banido)
-- ctl_code = 0 (jogador) / 1 (GM básico) / 2 (GM sênior) / 3 (Admin)
Criar conta de GM
INSERT INTO MEMB_INFO
(memb___id, memb__passwd, memb_name, sno__numb, bloc_code, ctl_code)
VALUES
('gmadmin', 'SenhaGM!', 'GameMaster', '777-777-777-0001', 0, 3);
GO
-- ctl_code 3 = acesso completo de GM
-- Verifique na sua distribuição os níveis exatos (variam entre 1-3 ou 1-10)
Verificar lista de GMs
SELECT memb___id, memb_name, ctl_code
FROM MEMB_INFO
WHERE ctl_code > 0
ORDER BY ctl_code DESC;
Banir conta
-- Ban permanente
UPDATE MEMB_INFO
SET bloc_code = 1
WHERE memb___id = 'contaDoJogador';
-- Ban temporário — muitas distribuições usam uma coluna adicional
-- Se não tiver, faça o ban manual e agende o desban
UPDATE MEMB_INFO
SET bloc_code = 1, memb_name = 'BANNED-ate-2026-12-31'
WHERE memb___id = 'contaDoJogador';
Desbanir conta
UPDATE MEMB_INFO
SET bloc_code = 0
WHERE memb___id = 'contaDoJogador';
Alterar senha (para recuperação)
-- Se o sistema usa senha em texto puro:
UPDATE MEMB_INFO
SET memb__passwd = 'NovaSenha123'
WHERE memb___id = 'contaDoJogador';
-- Se o sistema usa MD5:
UPDATE MEMB_INFO
SET memb__passwd = UPPER(CONVERT(VARCHAR(32), HashBytes('MD5', 'NovaSenha123'), 2))
WHERE memb___id = 'contaDoJogador';
Verificar todas as contas de um IP
-- Se o sistema de site registra IP:
SELECT a.memb___id, a.memb_name, r.ip_address, r.created_at
FROM MEMB_INFO a
JOIN Registration r ON a.memb___id = r.memb___id
WHERE r.ip_address = '201.15.30.XXX';
-- Útil para detectar multi-contas
Buscar conta por personagem
-- Descobrir qual conta um personagem pertence
SELECT m.memb___id, m.memb_name, c.Name, c.Class, c.cLevel
FROM MEMB_INFO m
JOIN Character c ON c.AccountID = m.memb___id
WHERE c.Name = 'NomeDoPersonagem';
Gerenciamento de personagens
Listar personagens de uma conta
SELECT Name, Class, cLevel, Reset, MasterLevel, MapNumber
FROM Character
WHERE AccountID = 'nomeDaConta'
ORDER BY cLevel DESC;
Destravar personagem (ConnectStat)
Personagem não consegue entrar — o banco acha que ainda está conectado:
-- Destravar personagem específico
UPDATE Character
SET ConnectStat = 0
WHERE Name = 'NomeDoPersonagem';
-- Destravar TODOS os personagens (útil após crash do servidor)
UPDATE Character
SET ConnectStat = 0
WHERE ConnectStat = 1;
-- Destravar status de conta também
UPDATE MEMB_STAT
SET ConnectStat = 0
WHERE ConnectStat = 1;
Alterar nível de um personagem
UPDATE Character
SET cLevel = 400, LevelUpPoint = 0
WHERE Name = 'NomeDoPersonagem';
Teleportar personagem (mudar mapa)
-- Mover personagem para Lorencia (mapa 0, coordenada 125,125)
UPDATE Character
SET MapNumber = 0, MapPosX = 125, MapPosY = 125
WHERE Name = 'NomeDoPersonagem';
Ver inventário de um personagem
-- A estrutura do inventário varia por distribuição
-- Geralmente a coluna Items contém dados binários
-- Para ver de forma legível, use a ferramenta de administração do seu sistema
-- Verificar se o personagem tem itens (binário — mostra tamanho)
SELECT Name, DATALENGTH(Inventory) AS TamanhoInventario
FROM Character
WHERE Name = 'NomeDoPersonagem';
Congelar zen (dinheiro) de uma conta
-- Ver zen do personagem
SELECT Name, Money FROM Character WHERE Name = 'NomeDoPersonagem';
-- Zerar zen (penalidade)
UPDATE Character SET Money = 0 WHERE Name = 'NomeDoPersonagem';
-- Dar zen a um personagem
UPDATE Character SET Money = Money + 100000000 WHERE Name = 'NomeDoPersonagem';
Verificar resets
SELECT Name, cLevel, Reset, MasterLevel
FROM Character
WHERE Reset > 0
ORDER BY Reset DESC;
Gerenciamento de Guilds
Ver todas as guildas do servidor
SELECT G_Name, G_Master, Score, DATALENGTH(G_Mark) AS TemMark
FROM Guild
ORDER BY Score DESC;
Ver membros de uma guilda
SELECT G_Name, G_Master
FROM Guild WHERE G_Name = 'NomeDaGuilda';
SELECT gl.Name AS Membro, gl.G_Level AS Posicao
FROM G_UserList gl
WHERE gl.G_Name = 'NomeDaGuilda';
-- G_Level indica a posição:
-- 0 = Membro normal
-- 1 = Sub-Líder (Battle Master)
-- 2 = Líder
Dissolver uma guilda
-- Primeiro remover todos os membros
DELETE FROM G_UserList WHERE G_Name = 'NomeDaGuilda';
-- Depois remover a guilda
DELETE FROM Guild WHERE G_Name = 'NomeDaGuilda';
-- Remover referência de guilda nos personagens membros
UPDATE Character
SET G_Name = '', G_Status = 0
WHERE G_Name = 'NomeDaGuilda';
Trocar o líder de uma guilda
-- Promover outro membro a líder
UPDATE Guild
SET G_Master = 'NovoLider'
WHERE G_Name = 'NomeDaGuilda';
UPDATE G_UserList
SET G_Level = 2
WHERE G_Name = 'NomeDaGuilda' AND Name = 'NovoLider';
-- Rebaixar o líder anterior para membro
UPDATE G_UserList
SET G_Level = 0
WHERE G_Name = 'NomeDaGuilda' AND Name = 'LiderAntigo';
Aumentar pontuação de uma guilda
UPDATE Guild
SET Score = Score + 1000
WHERE G_Name = 'NomeDaGuilda';
Remover um membro da guilda
-- Remover da lista de membros
DELETE FROM G_UserList
WHERE G_Name = 'NomeDaGuilda' AND Name = 'NomeDoMembro';
-- Atualizar o personagem
UPDATE Character
SET G_Name = '', G_Status = 0
WHERE Name = 'NomeDoMembro';
Relatórios e monitoramento
Jogadores mais ativos (mais personagens online)
SELECT AccountID, COUNT(*) AS QtdPersonagens, MAX(cLevel) AS MaiorNivel
FROM Character
GROUP BY AccountID
ORDER BY QtdPersonagens DESC;
Top players por nível
SELECT Name, AccountID, cLevel, Reset, Class
FROM Character
WHERE ConnectStat = 0 -- excluir conectados (podem ter dados desatualizados)
ORDER BY Reset DESC, cLevel DESC
LIMIT 20;
Contas criadas hoje
SELECT memb___id, memb_name, memb_joindate
FROM MEMB_INFO
WHERE CAST(memb_joindate AS DATE) = CAST(GETDATE() AS DATE)
ORDER BY memb_joindate DESC;
Verificar contas suspeitas (mesmo nome ou padrão)
-- Contas com nome similar (padrão de multi-conta)
SELECT memb___id, memb_name, sno__numb
FROM MEMB_INFO
WHERE memb___id LIKE 'bot%'
OR memb___id LIKE 'teste%'
ORDER BY memb___id;
-- Múltiplas contas com o mesmo sno__numb
SELECT sno__numb, COUNT(*) AS Total
FROM MEMB_INFO
GROUP BY sno__numb
HAVING COUNT(*) > 1;
Total de jogadores e estatísticas
-- Totais gerais
SELECT
(SELECT COUNT(*) FROM MEMB_INFO) AS TotalContas,
(SELECT COUNT(*) FROM MEMB_INFO WHERE bloc_code = 1) AS ContasBanidas,
(SELECT COUNT(*) FROM Character) AS TotalPersonagens,
(SELECT COUNT(*) FROM Character WHERE ConnectStat = 1) AS PersonagensOnline,
(SELECT COUNT(*) FROM Guild) AS TotalGuildas;
Logs de administração (GMLog)
Algumas distribuições têm tabela de log de GM. Se não existir, crie:
-- Criar tabela de log de GM (se não existir)
CREATE TABLE GMLog (
LogID INT IDENTITY(1,1) PRIMARY KEY,
GMAccount VARCHAR(32) NOT NULL,
Action VARCHAR(128) NOT NULL,
Target VARCHAR(32),
Details VARCHAR(512),
LogTime DATETIME DEFAULT GETDATE()
);
-- Inserir log manualmente quando necessário
INSERT INTO GMLog (GMAccount, Action, Target, Details)
VALUES ('gm', 'BAN', 'contaBanida', 'Motivo: uso de hack detectado');
Melhores práticas de administração
- Nunca compartilhe credenciais de GM — crie contas separadas para cada admin;
- Documente banimentos — sempre registre o motivo no GMLog;
- Faça backup antes de qualquer UPDATE ou DELETE em produção;
- Use transações para operações críticas:
BEGIN TRANSACTION;
-- Suas alterações aqui
UPDATE Character SET ConnectStat = 0 WHERE ConnectStat = 1;
-- Se estiver correto, confirme
COMMIT;
-- Se algo deu errado, desfaça
-- ROLLBACK;
- Teste primeiro com um SELECT antes de executar o UPDATE:
-- Antes de banir:
SELECT memb___id, bloc_code FROM MEMB_INFO WHERE memb___id = 'conta';
-- Só depois execute o ban
Perguntas frequentes
Como criar uma conta de GM diretamente no banco?
Insira na tabela MEMB_INFO com ctl_code = 1, 2 ou 3 (depende da distribuição). ctl_code 0 = jogador normal, 1 = GM básico, 3 = GM completo.
Como banir um jogador temporariamente?
Use UPDATE MEMB_INFO SET bloc_code = 1 WHERE memb___id = 'conta'. Para desbanir, mude bloc_code de volta para 0.
Como desfazer o ban de um personagem travado?
UPDATE Character SET ConnectStat = 0 WHERE Name = 'nome'. ConnectStat = 1 significa que o banco acha que o personagem ainda está conectado.
Onde ficam os dados de uma guild?
Na tabela Guild (nome, líder, membros, mark) e G_UserList (lista de membros com posição).